• 締切済み

ExcelのVBAに関して教えてください。

下記のようにCSVファイル名を複数入力してマクロ実行したら転記するようにしたいです。 やり方がわかる人いたら、教えてください。 (1)C10にa、C11にb、C12にc、C13にdを入力 (2)マクロ実行ボタンを押す (3)aのcsvファイルのG12~G36をD10~D34に転記。 ※aのパスは¥¥mm¥nn¥cc¥a.csv  bのcsvファイルのG12~G36をD35~D59に転記。 ※bのパスは¥¥mm¥nn¥yy¥b.csv  cのcsvファイルのG12~G36をD60~D84に転記。 ※cのパスは¥¥mm¥nn¥kk¥c.csv  dのcsvファイルのG12~G36D85~D109にを転記。※dのパスは¥¥mm¥nn¥bb¥d.csv  難しい点は最下層のフォルダが異なっている点です。。  最下層のフォルダ違うが、csvファイルを転記する方法はありませんか?

みんなの回答

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

Sub Test2() Dim FSO As Object, myPath As String, strText As String Dim c As Range, buf As Variant Dim i As Long, j As Long, sr As Long Set FSO = CreateObject("Scripting.FileSystemObject") j = 10 For Each c In Range("C10", Cells(Rows.Count, "C").End(xlUp)) myPath = GetPath("\\mm\nn", c.Value & ".csv") If myPath <> "" Then With FSO.OpenTextFile(myPath, 1) buf = .ReadAll .Close End With buf = Split(buf, vbCrLf) For i = 11 To 35 strText = Split(buf(i), ",")(6) Cells(sr + j, "D").Value = strText j = j + 1 Next End If Next Set FSO = Nothing End Sub Function GetPath(Path As String, Target As String) Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders For Each File In Folder.Files If File.Name = Target Then GetPath = File.Path Exit Function End If Next Next GetPath = "" Set FSO = Nothing End Function

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

参考に Sub Test()   Dim FSO As Object, myPath As String, strText As String   Dim myRng As Range, c As Range, buf As Variant   Dim i As Long, j As Long, sr As Long   Set FSO = CreateObject("Scripting.FileSystemObject")   Set myRng = ActiveSheet.Columns("C:C").SpecialCells(xlCellTypeConstants)   For Each c In myRng     If c.Value Like "[a-d]" Then       Select Case c.Value         Case "a": sr = 10: myPath = "\\mm\nn\cc\a.csv"         Case "b": sr = 35: myPath = "\\mm\nn\yy\b.csv"         Case "c": sr = 60: myPath = "\\mm\nn\kk\c.csv"         Case "d": sr = 85: myPath = "\\mm\nn\bb\d.csv"       End Select       With FSO.OpenTextFile(myPath, 1)         buf = .ReadAll         .Close       End With       buf = Split(buf, vbCrLf)       j = 0       For i = 11 To 35         strText = Split(buf(i), ",")(6)         Cells(sr + j, "D").Value = strText         j = j + 1       Next     End If   Next   Set FSO = Nothing End Sub

kabigonmama
質問者

補足

すみません。説明不足でした。 csvファイルは多数存在していて、e.csvやf.csvなども転記できる形にしたいです。 最下層のcsvファイルを取得するマクロなどはないでしょうか?

  • SI299792
  • ベストアンサー率48% (712/1469)
回答No.1

(1)C10にa、C11にb、C12にc、C13にdを入力 というのは、プログラムで入力ということでしょうか、 それとも、手作業で入力して、そのファイル名でを読み取るということでしょうか。 前者だとします。 >最下層のフォルダが異なっている こういう時は、テーブルを作るのが1番手っ取り早い。プログラム上に持つのは面倒です。 まず、新しいワークブックに、"Works" "Table" というシートを作ります(他のシートはいりません) Table に図のように入力します。 このプログラムを入れ、実行します。 ' Option Explicit ' Sub Macro1() '   Dim Table As Worksheet   Dim Works As Worksheet   Dim Row As Integer   Dim InputArea As String   Dim OutputArea As String ' '  Application.ScreenUpdating = False   Set Table = Sheets("Table")   Set Works = Sheets("Works")   Workbooks.Add '   For Row = 2 To Table.[A1].End(xlDown).Row     Works.Cells.ClearContents     InputArea = Table.Cells(Row, "A")     Range(InputArea) = Table.Cells(Row, "B")     InputArea = Table.Cells(Row, "C") '     With Works.QueryTables.Add("TEXT;" & InputArea, Works.[A1])       .RefreshStyle = xlOverwriteCells       .TextFileCommaDelimiter = True       .Refresh False     End With     Works.[A1].QueryTable.Delete     InputArea = Table.Cells(Row, "D")     OutputArea = Table.Cells(Row, "E")     Range(OutputArea) = Works.Range(InputArea).Value   Next Row End Sub

kabigonmama
質問者

補足

すみません。プログラム上で作成は無理でしょうか? csvファイル名のみ入力してマクロ実行したら、転記できるようにしたいです。またa~d.csv以外にも複数csvファイルがある状況です。

関連するQ&A

  • 複数のcsvファイルをマクロ(VBA)で取り込みたい

    複数のcsvファイルをマクロ(VBA)で取り込みたい csvファイルの中身が、 20090507 120508 osaka 項目1,項目2,項目3,・・・・・,項目10 a1,a2,a3,・・・・・,a10 b1,b2,b3,・・・・・,b10 c1,c2,c3,・・・・・,c10 や 20090507 132529 hokkaido 項目1,項目2,項目3,・・・・・,項目10 d1,d2,d3,・・・・・,d10 e1,e2,e3,・・・・・,e10 f1,f2,f3,・・・・・,f10 となっているcsvファイルが特定のフォルダの中に100以上あります。 このcsvふぁいるの5行目だけをaccessに書き込んでテーブルに追加していきたいと思っています。 項目1,項目2,項目3,・・・・・,項目10 a1,a2,a3,・・・・・,a10 d1,d2,d3,・・・・・,d10 このようなテーブルができればいいのですが・・・ csvファイルを開く→5行目をテーブルに追加→csvファイルを閉じる(削除する)→次のcsvファイルを開く→5行目をテーブルに追加→csvファイルを閉じる(削除する) この流れでいいと思うのですが方法が分かりません。 丸投げですがよろしくお願いします。

  • CSVからエクセルへの取り込み

    エクセル・マクロ初心者です。 CSVファイルの一部分を、エクセルで読み込みたいのですが、 マクロでの作成は可能でしょうか。 (例) ・CSVファイル(読み込み側)  ABCDE 1 2 3 4 5 ・EXCELファイル(書き込み側)  ABCDE 1 2 3 4 5 ・CSV側は、複数のファイルがあります。 ・EXCEL側は、1つのシートにCSVのデータを書き込みます。 ・CSVファイルAの1B、2B、3B、4B、5Bを読み込み、EXCELファイルの、1A、1B、1C、1D、1Eに書き込みます。 ・CSVファイルBの1B、2B、3B、4B、5Bを読み込み、EXCELファイルの、2A、2B、2C、2D、2Eに書き込みます。 ・CSVファイルCの1B、2B、3B、4B、5Bを読み込み、EXCELファイルの、3A、3B、3C、3D、3Eに書き込みます。 というような事をやりたいのです。 どなたか、ご指導のほどよろしくお願いします。

  • Excel VBAに詳しい方教えてください。

    Excel VBAについて 下記内容をマクロを使ってできるようにしたいのですが、どなたかお力添えいただけませんか? 例えば、下記のような記載のファイルBook1があるとします。 A1セル内 名前 B1セル内 〇〇会社 C2セル内 〇〇部 D2セル内 〇〇係 この内容を別のファイルBook2へ転記したいのです。 ただし、Book2の列は下記のようになっており A列 名前(すでに入力されている) B列 会社名 C列 部 D列 課 E列 係 Book1の内容をBook2の下記の条件で正しいセルへ転記したいです。 -Book1で[部]で終わっているものはBook2のB列[部]に転記 -Book2ですでに入力されている名前の行に、Book1の情報を転記 ご協力のほど何卒よろしくお願いいたします。

  • エクセル マクロ 特定のフォルダ内 ファイルコピー

    エクセルのセルに入力されたフォルダを参照して、 CSVファイルを シート1・2・3・4に1度にコピーしたいのですが 例えば C\ドキュメント¥フォルダA |-フォルダB |-フォルダC                 |-フォルダD                 |-フォルダE                        |-フォルダ1                             |-CSVファイルA                         |-フォルダ2                             |-CSVファイルB                          |-フォルダ3                             |-CSVファイルC                         |-フォルダ4                              |-CSVファイルD 上記のアドレスで シート1のA1セルに フォルダEを入力し  シート2に CSVファイルA シート3に CSVファイルB シート4に CSVファイルC シート5に CSVファイルD それぞれすべての内容を貼り付けたいのですが 何分初心者なもので ご指導いただければと思います。  ちなみに A1セルの入力は変わるため各シートは1度削除した上で再度貼り付けを行いたいです。     

  • エクセルのvbaの質問

    a b c d e f g h i j k l m n 1 p1 p2 p3 2 s1 s2 s3 s4 s1 s2 s3 s4 s1 s2 s3 s4 3 あ い う お え い あ う お え い 4 10 25 20 40 25 50 10 30 20 15 17 5 6 7 p1 p2 p3 8 =a3 =b3 =c3 =d3 9 =a4 =b4 =c4 =d4 こんな感じでデータが入ってます。 p1の内訳がs1からs4という感じです。 で、a7からc3にp1,p2,p3とありますが、これをクリックしたら、 またはa7にp1とかp2と入力したら、a8からd9にそれぞれの内訳が参照されるようなマクロを組みたいのです。 どうか教えてください。 見づらいですね。 データはa1,f1,k1にそれぞれp1,p2,p3 a2からd2,f2からi2,k2からn2にそれぞれs1,s2,s3,s4 a3あ,b3い,c3う,d3"",e3"",f3お,g3え,h3い,i3あ,j3"",k3う,lお, m3え,n3い a3 10,b3 25,c3 20,d3 "",e3 "",f3 40,g3 25,h3 50,i3 10,j3 "",k3 30,l3 20,m3 15,n3 17 a7 p1,b7 p2,c7 p3 a8からd9の"=a3"から"=d4" です。 3行目、4行目は必ずしも全部埋まってなくて、スペースが入る場合があります。 よろしくお願いします。

  • Excel VBA、ファイルのオープンについて

    どうにも解決が付かず、困ってしまっています、どなたかご回答をお願いいたします。 デスクトップ上にAというフォルダがあり、その中に二つのファイルa.xls、b.xlsがあるとします。 今、a.xlsを開いて、その中に「データ入力表」というシートを作り、そこに入力したデータをマクロを貼り付けたボタン一つでb.xlsへデータ蓄積できるようにしようと考えています。蓄積データが大量になることが予想されるので、別ファイルとしたかったのですが、そうすると、何度もb.xlsにデータを転記する必要があるので、b.xlsはその都度開いたり閉じたりせずに開いたままにしておきたいわけです。 そこで、ボタンに貼り付けるマクロには、 ・最初にデータ転記する時にb.xlsを開く ・以降のデータ転記時にはb.xlsは開いたままにする ように、IF文で分岐を付けたいのですが、最初にファイルを開くのは  Set wb = Workbooks.Open("b.xls") で良いわけですが、「b.xlsを開いたままデータを転記する」場合がどうにもうまくいきません。 ファイルをオブジェクト変数にセットするように、 Set wb = Workbook("b.xls") とすると「インデックスが有効範囲にありません」と怒られ、パスの設定か?と思い、 myDir.Workbook("b.xls") とすれば「オブジェクトが必要です」 と断られてしまいます。 この、転記先となるb.xlsを開いたままデータを転記する場合には、オープンしてあるb.xlsはどうセットしたら良いのでしょうか?、というのが今回の質問です。 まだ初心者のため要点が掴みづらい文章となってしまい、お答えしにくいかとは思いますが、どなたかこの混迷状態をご理解頂けた方、ご返答を宜しくお願いいたします。

  • excel 2010 VBAについて質問です

    複数(約2000ファイル)のcsvファイルのC列だけを抽出してまとめるVGAコード? をしりたいのですがなにか方法はないでしょうか。 例 ファイル名が1.csv~100.csvのファイル 1.csvのc1~c100をa1~a100 2.csvのc1~c100をb1~b100 100.csvのc1~c100をn1~n100 に抽出するようなことをしたいです。 1.csv 2.csv 抽出されたファイル.csv ABCDEF ABCDEF ABCDEF 111 112 12 121 122 12 131 132 12 ・・・ ・・・ 12 ・・・     ・・・ ご回答よろしくお願いいたします。

  • excel vbaのファイルコピー

    あるフォルダに次のようなテキストデータ(*.csv)が50個入っています。 ファイル名:aaa.csv bbb.csv ccc.scv など ファイルの中身--- "aaa.csv" time,value 0.1,10 0.2,32 0.3,33 0.4,45 ---------------- それを次のように一つのエクセルファイルにまとめたいのですが、どうすればよいでしょうか? ----------------- A B C D E F 1 "aaa.csv" "bbb.csv" "ccc.scv" 2 time value time value time value 3 0.1 10 0.1 23 0.1 23 4 0.2 32 0.2 11 0.2 55 5 0.3 33 0.3 43 0.3 11 6 0.4 45 0.4 76 0.4 23 ------------------ よろしくおねがいします。

  • EXCEL VBA 複数ファイル値を集計

    yakkunnと申します。 お世話になっております。 下記処理を実現するためのEXCEL VBAコードをご教授いただけないでしょうか。 ■やりたい事 デスクトップに「実績集計.xlsx」というファイルがあります。 このファイルにボタンを配置し、このボタンをクリックしましたら、C3セルに記述されているファイルパス配下を見てその配下ファイルを全て開き、各ファイルの値を「実績集計.xlsx」に全て転記するVBAコードをご教授いただきたく思います。 ■転記内容 例えばA.xlsx~C.xlsxという3つのファイルがあるとします。この3つのファイルを開いて・・ 左が「A.xlsx」、右が[実績集計.xlsx」とします 処理付を転記・・B4セル⇒B7へ転記 コードを転記・・B7セル⇒C7へ転記 商品名を転記・・C7セル⇒D7へ転記 数量を転記・・ D7セル⇒E7へ転記 金額を転記・・ E7セル⇒F7へ転記 これをA.xls~C.xlsまで繰り返し、実績集計.xlsxに値をどんどん転記したいです。 金額のF列の最後に合計金額が出力されれば最高です。 よろしくお願いいたします。

  • Excelマクロに関しての質問

    Excelマクロに関しての質問です。 ファイルAの”シート1”のF1,F16,F42,F65,F97,F122を別のファイルBの”集計シート”のB2,C2,D2,E2,F2,G2にデータ(数値or文字)を移します。 そしてファイルAの”シート2”のF1,F16,F42,F65,F97,F122をファイルBの”集計シート”のB3,C3,D3,E3,F3,G3にデータを移します。 それをファイルAの”シート29”まで繰り返し行いたいのですが、どのようなマクロを組めば良いのでしょうか? 教えて頂きたいです。

専門家に質問してみよう