• 締切済み

Excelのマクロで困ってます

エクセルのマクロを使用しているのですが、CSVで作成済のエクセルのファイルを1行づつセルに展開するマクロを記述したいのですが、どうすれば良いのか困ってます。  教えてください。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

>エクセルのマクロを使用しているのですが ー>エクセル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もあります。

seisan07
質問者

お礼

お礼遅くなりました。 ご指摘ありがとうございます。 確かにその通りですね。 少しづつ勉強をして質問をする際に適切な表現を使えるよう経験を 積んでいきます。 お気遣いありがとうございました。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

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ファイル名を指定 に置きかえてみてください。(もちろんファイル名も書き換えてください)

seisan07
質問者

お礼

お礼遅くなりました。 丁寧な回答ありがとうございます。 質問の内容は無事に解決することができました。

noname#187541
noname#187541
回答No.2

こんばんは。 「外部データの取り込み」機能を使う方法もあります。 データを展開する戦闘のセルを選択しておきます。 データ→外部データの取り込み→新しいデータの取り込み CSVファイルを選び、拓をクリック 「カンマやタブなどの区切り文字によって・・・」を選び、次へをクリック 区切り文字で「カンマ」を選ぶ。(チェックする) 完了をクリック これで一応取り込めます。「マクロの記録」をすればマクロに出来ます。 どうでしょうか。

seisan07
質問者

お礼

回答ありがとうございます。 ファイルのデータを展開するといった操作も「マクロの記録」で行うことができるのですね。 勉強になりました。 ありがとうございます。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

これは普通にマクロから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

seisan07
質問者

お礼

回答ありがとうございます。 参考にさせていただきました。 1行づつデータを展開できるようにはなったのですが、 作成済みのCSVファイルは6列あるのですが、展開してみるとシートのA列にすべてのデータが展開されてしまいます。 列ごとに1行づつデータを展開する方法はありますでしょうか? 教えてください。

関連するQ&A

  • エクセルのマクロを教えて下さい

    csvファイルなのですが、ファイルサイズが大きくて、エクセルでは全部を開くことが出来ません。 csvファイルを開くことなく、指定行から指定行までを取り出すようなマクロを教えて下さい。 なおエクセルは、エクセル2000を使用しています。 (会社の指定でエクセル2000以降のバージョンは使えません)

  • エクセル初心者です。マクロなのか関数なのか

    エクセル初心者です。マクロ or VBAを使えばいいのか関数なのかわからないです・・・・・ デスクトップにある新しいフォルダという名前の中に50以上のエクセルCSVブックがあります。 これをひとつも展開させずに新しいブックにひとつにまとめたいのですが、最低でもフォルダ内には50~100ぐらいのエクセルのCSVブックがあるので(ひとつひつ展開するのも手間なので)ワンクリックか何かでまとめる方法はないでしょうか?(フォルダ内にある名前は全てばらばらです) Book1.CSV A B C 1 1 1 Book2.CSV A B C 2 2 2 Book3.CSV A B C 3 3 3 例えば上のような3つのブックがあって中には一行目はすべて固定で二行目以降から数字が入っています。 最終的には・・・・ 新しいBook A B C 1 1 1 2 2 2 3 3 3 ↑ 一行目は固定で2行目以降から各ブックに入っている行を追加するだけのようにしたいのです。 こういことはマクロでも可能でしょうか?それとも関数のほうがいいのでしょうか? ご存知であればぜひマクロの登録手順とその方法を教えてください。 いろいろと調べたのですがマクロは書いていた記述をそのまま貼り付けてもうまく動作しなかったんです。 マクロであればその手順まで教えていただけると非常に助かります。 エクセルのverは2003です。よろしくお願いいたします。

  • エクセルマクロでファイルを開いて保存したいです。

    エクセルマクロでファイルを開いて保存したいです。 エクセルファイルでファイル名「編集」という物を開きます。 このSheet1には中央にコマンドボタンが作成して有ります。 このボタンをクリックして以下の作業をマクロで行いたいです。 1.エクセル標準の「ファイルを開く」のメッセージボックスが開く 2.ここは使用者が作業をしてもらう   マイドキュメントだったり、マイネットワークだったり、   (ファイルの種類はCSVにする)   処理をしたいCSVファイルを探してもらい選択後、開くをクリック   例えば20100922.CSVを選択し開くをクリック 3.クリックと同時にそのファイルが展開されて、「編集」のエクセルファイルの   Sheetにシート名「集計」が作成されそのシートにCSVファイルの全内容がセルA1から貼り付く。   さらに登録してあるマクロモジュールで編集処理がされ   マクロを引き継がず、シート「集計」だけを   ファイル名は固定でそのファイル名の後ろに作成日(システム日付)を入れて   参照したCSVファイルの保管場所に保存する。   ファイル名例:売上20100923.xls(売上は固定) 4.エクセル「編集」のファイルからシート「集計」を削除する。 5.メッセージBOXで「編集終了」と表示 次回エクセルファイル「編集」を開くと、コマンドボタンだけである。 また作成された「売上20100923」はマクロがないから開くときに マクロのメッセージは出ない。というようにしたいです。 NO.2のファイルを選択する作業は作業者にしてもらいますが シート1のコマンドボタン1回を押すだけでNO.1~NO.5まで完結させたいです。  NO.3のマクロ処理はマクロの記録でモジュールができています。 このマクロの作成方法と、そのマクロが出来たら その文のどこに作成済みの処理文を入れればいいのかわかりません。 よろしくお願いします。 ここでつまづいています。この後この選択したファイルの全内容が シートの集計に展開されません。 Private Sub CommandButton1_Click() Call 集計 End Sub Sub 集計() FullPath = Application.GetOpenFilename("CSV,*.CSV") If FullPath <> "False" Then Sheets("Sheet1").Select Sheets.Add ActiveSheet.Name = "集計" With ActiveSheet.QueryTables.Add(Connection:="CSV;" & FullPath, Destination:=Range("A1"))   マクロの記録で作成したマクロ   シート"集計"をマクロを引きつかずファイル名売上&システム日付で保存   シート"集計"を削除する

  • マクロで可能でしょうか??

    初めまして ken2308といいます。 Excelは有る程度、使えるのですが 業務上マクロを覚えることになりました。 マクロに関しては全くのシロウトです。 Excelのマクロで以下のような事をやろうと思っておりますが Excelのマクロでは対応は可能でしょうか?? 【例】 Excelファイルが2つあります。 このファイルの大きさが【50列】×【50行】あり 【列】は飛び飛びで20列ほど非表示にており 【行】は複数のセルを結合して有ります。 このファイルを1つのファイルにしたいのですが Excelのマクロでは対応は可能でしょうか?? 自分としては以下のマクロを作成すればよいと 思っているのですが・・・ (1)列・行ともに非表示⇒表示にする。 (2)結合しているセルを解除戻す。 (3)2つのファイルをコピペする。 (4)貼り付け後、不要な列を削除する。 ※このマクロがうまく行ったら、上記で出来たファイルから  ピボットテーブルを作成するつもりです。

  • このようなエクセルマクロを組みたいのですが...

    下記のようなマクロを組みたいと思っていますが、 知見がほとんどないので教えていただきたいと思います。 "csv"というフォルダにランダムなファイル名でcsv形式のファイルが100以上保存されています。 目的は、 そのcsvファイル内の一部のデータをひとつのファイル(ファイル名を"まとめ"とします)に移して並べたいと思います。 <前提> "csv"フォルダと"まとめ"ファイルは既に開かれている状態とします。 "まとめ"ファイルを開いた状態で、マクロを走らせると、 (1)csvファイルが開く (2)セルA1とB1をコピー (3)"まとめ"ファイルのA1、A2へ貼り付け(行と列を変更) (4)csvファイルを閉じる (5)次のcsvファイルが開く (6)セルA1とB1をコピー (7)"まとめ"ファイルのB1、B2へ貼り付け(行と列を変更) (8)csvファイルを閉じる 以降、"csv"フォルダの中身をすべて処理できるまで繰り返し。 という風に考えていますが、 当方あまり知識が無くアレンジが難しいためできる限りシンプルにと考えています。 そのため、もしこうした方が...等あればアドバイスいただけるとありがたいです。 すみませんがよろしくお願いいたします。

  • エクセルマクロ

    やりたいことは、毎回更新されて開くエクセルCSVの画面で、自分仕様にマクロの記録を行い、(枠固定や、セルの幅変更、色を付けておいたり)、そして再度 更新されたエクセルCSV画面がを開かれたときに、前回記録したマクロ設定された状態で開きたい。 現在は、CSVファイルが開かれると、自分の見やすいように操作して見ているのですが、これをいったん閉じて(毎回更新される内容なので保存しないで閉じています) またCSVファイルを開くとき繰り返し自分の見やすいように操作してから見ていますが、この見やすいようにする操作を毎回行わず設定するやり方を教えてください。 パソコンは詳しくないです、プログラムみたいな画面はさっぱりわかりません。 ちなみに、毎回更新されて開くCSVエクセルファイルは、フィルター選択で自分の見たい部分を選択して見ています。 職場で使用しているのでなるべくはやく解決したいです。

  • Excelのマクロを使ってのオートフィル

    Excelのマクロを使ってのオートフィルについて教えて下さい。 類似の質問があったのですが、決まったセルからのものが多くわかりませんでした。 マクロはまだ始めたばかりです。 やりたいことはExcelの2つのシートに別のcsvファイルの数字を入れることです。 ExcelのSheet1のD1セルに日付を表す数字が入っています。 Sheet2と3には2行目に月の日付がずらりと並んでいます。 1列目には記録番号が入っています。 それぞれのシートにSheet1のD1セルと同じ日付の列を見つけて、 その下の行から1列目の記録番号を元に検索したcsvファイルのデータを引っ張ってきたいのです。   Sheets("Sheet1").Select Cells(3, (Sheets("Sheet2").Range("D1")).Select と最初に入れるセルを探しても違う列に飛んでしまったりします。 又、下のセルまで数式もコピーできずに止まったままです。 VBAまでは手が出せずに悩んでいます。どうか教えて下さい。よろしくお願いします。

  • エクセルのマクロで

    こんにちは、お願いします。 エクセルに画像の添付でマクロを使用したいのですが、 下記のようなマクロ作成・編集ができるのでしょうか? エクセルの特定のセルに画像のファイル名を入力しマクロを実行すると、他のフォルダにある.jpg画像が指定したセル位置に添付される。 また、添付位置を複数にもできますか? 説明がわかるでしょうか…?^_^; マクロに関して全く無知なのですが、できるものでしたら是非教えてください。 宜しくお願いします。

  • EXCELのマクロをバッチファイルから起動させ、あるフォルダ内のCSVファイルをTXTファイルに変換。

    あるフォルダにdata.csvというファイルがあります。 一つ目の質問は、EXCELのマクロで「あるフォルダ内にある***.csvを開く」という動作はどのように記述されますか? 2つ目の質問はバッチファイルあるいはスクリプトファイルでEXCELのこのマクロを実行させることは可能ですか。どのように記述したらよいのでしょうか。 3つ目はセルA1~A10の値をx B1~B10の値をyとしてグラフを描かせるコマンドはありますか。

  • エクセル2007でマクロを有効にするには?

    ご存じの方教えて下さい。 エクセルの2007を使用しています。  エクセル2003のマクロファイルなんですが、ファイルを開いた際、2003だとマクロを有効にしますか?と聞いてきましたが、2007では何も聞いてきません。  2003で作成したマクロファイルは、2007では使用できないのでしょうか?

専門家に質問してみよう