質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

4回答

11712閲覧

VBAでCSVから読み込んだものをすべてセルに入れる

nissanngtr34

総合スコア24

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

2クリップ

投稿2015/09/17 05:15

編集2015/09/17 05:17

csvを読み込んだものを配列にし、セルの範囲を指定しないで入れたいのですがどうしたらよろしいでしょうか?

「Range("A10:D10") = tmp」このようにセルの範囲を指定をせずにCSVに入ってる情報すべてを貼り付けたいです。

foreachを使えばよろしいでしょうか?

csvの中身は
yamada,山田,yamada@yahoo.co.jp
suzuki,鈴木,suzuki@yahoo.co.jp

Sub csv読み込み() Dim buf As String, tmp As Variant, n As Long Open "user.csv" For Input As #1 Do Until EOF(1) Line Input #1, buf tmp = Split(buf, ",") Loop Close #1 Range("A10:D10") = tmp End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

CopyFromRecordset で貼り付けたらどうでしょうか。

Microsoft ActiveX Data Object #.# Library に参照設定

VBA

1 Dim Cn As New ADODB.Connection 2 Dim RS As New ADODB.Recordset 3 4 With Cn 5 .Provider = "Microsoft.Jet.OLEDB.4.0" 6 .Properties("Extended Properties") = "Text;HDR=NO" 7 .Open "G:\TEST\" 8 End With 9 10 Set RS = Cn.Execute("SELECT * FROM tera16369.csv") 11 12 Range("A10").CopyFromRecordset RS 13 14 RS.Close: Set RS = Nothing 15 Cn.Close: Set Cn = Nothing 16

投稿2015/09/17 05:41

hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

色々な実装方法がありますので、一例をご紹介致します。

Sub csv読み込み() Dim oFileSys As Object Dim oTxtStream As Object Dim sPath As String Dim sFile As String Dim sTxt As String Dim s As Variant Dim I As Integer ' CSVファイル一括読み込み Set oFileSys = CreateObject("Scripting.FileSystemObject") sPath = ThisWorkbook.Path sFile = oFileSys.BuildPath(sPath, "user.csv") Set oTxtStream = oFileSys.OpenTextFile(sFile, 1) If oTxtStream.AtEndOfStream = False Then sTxt = oTxtStream.ReadAll End If oTxtStream.Close Set oTxtStream = Nothing Set oFileSys = Nothing With ActiveSheet 'csvデータ貼り付け I = 0 For Each s In Split(sTxt, vbCrLf) I = I + 1 .Cells(I, 1).Value2 = s Next s ' 区切り位置調整 .Cells(1, 1).Resize(I).TextToColumns Comma:=True End With End Sub

<簡単な説明>
0. Excelブックと同じフォルダに存在する「user.csv」をテキストファイルとしてオープンし一括読み込み
0. 行単位に分割し A1 セルから順に列方向に貼り付け
0. 区切り位置の調整(TextToColumns)でカンマ区切りを指定

投稿2015/09/17 16:34

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

貼り付けについて回答します。
速度の面から言って範囲貼り付けで良いと思います。

固定で指定するのではなく変数に格納された配列数から動的に範囲を指定してみてはどうでしょう。

VBA

1Sub 貼り付け() 2 Dim tmp As Variant 3 tmp = Csv読み込み() 4 Const row As Integer = 1 5 Const startCol As Integer = 1 6 7 Range(Cells(row, startCol), Cells(row + UBound(tmp, 1), startCol + UBound(tmp, 2))) = tmp 8End Sub 9 10Function Csv読み込み() As Variant 11 Dim value(1, 2) As String 12 13 value(0, 0) = "yamada" 14 value(0, 1) = "山田" 15 value(0, 2) = "yamada@yahoo.co.jp" 16 17 value(1, 0) = "suzuki" 18 value(1, 1) = "鈴木" 19 value(1, 2) = "suzuki@yahoo.co.jp" 20 21 Csv読み込み = value 22 23End Function

CSV読み込みについてはそれ上手くいってますか?
ループごとにセル出力するか、ループの中で多次元配列を組み立てるか検討してみてください。

http://www.moug.net/tech/exvba/0060086.html

うまくいってるのであれば余計でした。すみません。

投稿2015/09/17 05:39

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

「配列に読み込んで、それを貼り付ける」という方法からは外れてしまいますが、
CSVファイルをワークブックとして読み込んで(少し表現がおかしいかも知れませんが.)
そこから貼り付けをする方法もあるかと思いましたので、投稿させてもらいました。

対象のCSVファイルがExcelでオープンできる事が前提になります。

Excel 2010で確認しています

VBA

1Sub PasteFromCSV() 2 Const CSV_FILE = "d:\test\sample.csv" 3 Dim ReadWBk As Workbook 4 Dim WriteWBk As Workbook 5 Dim WriteSht As Worksheet 6 Dim Rng As Range 7 8 '貼り付け先をアクティブなシートとする 9 Set WriteWBk = ActiveWorkbook 10 Set WriteSht = WriteWBk.ActiveSheet 11 12 '対象のCSVファイルをオープンし、値の入っている範囲をコピー 13 Set ReadWBk = Workbooks.Open(CSV_FILE) 14 Set Rng = ReadWBk.Worksheets.Item(1).UsedRange 15 Rng.Copy 16 17 '指定のセル(A10)を起点として貼り付け(形式を選択して貼り付け→値) 18 WriteSht.Range("A10").PasteSpecial xlPasteValues, xlPasteSpecialOperationNone, False, False 19 20 'CSVファイルをクローズ 21 ReadWBk.Close 22 Set ReadWBk = Nothing 23End Sub

投稿2015/09/17 08:20

編集2015/09/17 08:44
sgr-2

総合スコア294

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問