- 締切済み
Excelのマクロで困ってます
エクセルのマクロを使用しているのですが、CSVで作成済のエクセルのファイルを1行づつセルに展開するマクロを記述したいのですが、どうすれば良いのか困ってます。 教えてください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
>エクセルのマクロを使用しているのですが ー>エクセルVBA >CSVで作成済のエクセルのファイル 表現がおかしい。 CSVはファイル形式。エクセルファイルも独自のファイル形式。 ー>CSVのァイルをエクセルに読み込み、エクセルの各行各列に読み込みたい・・ >展開 ー>読み込み ファイル形式やエクセルでの用語を本やWEBで勉強し経験を積む必要アリと思う。 ーーーー 一番基礎的なコードを書いてみます。 Sub test01() i = 1 '読み込み最初行数 Open "aaa2.csv" For Input As #1 While Not EOF(1) Line Input #1, a s = Split(a, ",") 'カンマ区切りCSV For j = 0 To UBound(s) Cells(i, j + 1) = s(j) Next j i = i + 1 Wend Close #1 End Sub Openのファイル名は変えること。 ーーー Sub test02() Workbooks.OpenText Filename:="C:\Documents and Settings\XXXX\My Documents\aaa2.csv", _ DataType:=xlDelimited, Comma:=True End Sub なんていう進んだやり方もあります。 Workbooks.Openもあります。
- ham_kamo
- ベストアンサー率55% (659/1197)
No.1です。 > 作成済みのCSVファイルは6列あるのですが、展開してみるとシートのA列にすべてのデータが展開されてしまいます。 CSVファイルの拡張子がCSVで、コンマで区切られているなら自動的に各フィールドがセルに分割されるはずなのですが、ファイルの拡張子はCSVでないのでしょうか。 とりあえず、どのような拡張子でも、OpenするときにCSVとして読み込むように変更してみました。 Set WB_From = Workbooks.Open("test.csv") 'CSVファイル名を指定 の行を、 Set WB_From = Workbooks.Open("test.txt", , , 2) 'CSVファイル名を指定 に置きかえてみてください。(もちろんファイル名も書き換えてください)
お礼
お礼遅くなりました。 丁寧な回答ありがとうございます。 質問の内容は無事に解決することができました。
こんばんは。 「外部データの取り込み」機能を使う方法もあります。 データを展開する戦闘のセルを選択しておきます。 データ→外部データの取り込み→新しいデータの取り込み CSVファイルを選び、拓をクリック 「カンマやタブなどの区切り文字によって・・・」を選び、次へをクリック 区切り文字で「カンマ」を選ぶ。(チェックする) 完了をクリック これで一応取り込めます。「マクロの記録」をすればマクロに出来ます。 どうでしょうか。
お礼
回答ありがとうございます。 ファイルのデータを展開するといった操作も「マクロの記録」で行うことができるのですね。 勉強になりました。 ありがとうございます。
- ham_kamo
- ベストアンサー率55% (659/1197)
これは普通にマクロからCSVファイルを開く、ということではなくて、今開いているファイルにCSVファイルの内容を展開したい、ということですよね。 普通にOpenステートメントでファイルを開いて一行ずつ読み込んでコンマで区切ってセルに入れていってもいいのですが、横着なやり方を考えてみました。 一度CSVファイルをBookとしてOpenし、内容を現在開いているシートにコピーしてCloseします。決まったシート名に読み込むときは、マクロ文中のコメントを参考に書き換えてください。 Sub Sample() Application.ScreenUpdating = False Dim WB_From As Workbook, WS_To As Worksheet Set WS_To = ActiveSheet '読み込み先シート名を指定するときは、 'Set WS_To = Worksheets("Sheet1") のようにする Set WB_From = Workbooks.Open("test.csv") 'CSVファイル名を指定 WB_From.Worksheets(1).Cells.Copy WS_To.Range("A1") WB_From.Close Application.ScreenUpdating = True End Sub
お礼
回答ありがとうございます。 参考にさせていただきました。 1行づつデータを展開できるようにはなったのですが、 作成済みのCSVファイルは6列あるのですが、展開してみるとシートのA列にすべてのデータが展開されてしまいます。 列ごとに1行づつデータを展開する方法はありますでしょうか? 教えてください。
お礼
お礼遅くなりました。 ご指摘ありがとうございます。 確かにその通りですね。 少しづつ勉強をして質問をする際に適切な表現を使えるよう経験を 積んでいきます。 お気遣いありがとうございました。