• ベストアンサー

同フォルダ内の串刺し集計と文字列結合のマクロ作成

同じフォルダ内に同じ形式のファイルがいくつかあり、ブック間で数値の串刺し集計と、文字列を結合して集計できるマクロの作成がしたいです。 フォルダ内には各所から送付されてくる同一フォーマット書類『(回答)**.xls』が多数あります。 「**」にはそれぞれの部署名が入っており、シート名は『回答』となっています。 各ファイルの『回答』シート F5~F32セルまでには数値が入力されています。 同じく各ファイルの『回答』シート G5~G32セルまでには文字列が入力されています。 これらを同一フォルダ内にある『集計ファイル.xls』の『集計』シートに集計をしたいのです。 F列は数値なので串刺し集計、G列はそれぞれバラバラの文字列のため「,」で区切って文字を結合をしたいと思っています。 (G列イメージ) あああ,XX,○△△,・・・ このようなマクロを同一フォルダ内にある『集計ファイル.xls』に作成することはできるのでしょうか? よろしくお願いいたします。

質問者が選んだベストアンサー

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

この質問は、丸投げになっている。ヒントだけを考えて、簡単な例でテストしてみた。改良する根気と力があるならヒントにしてください。 ーー 対象のセルに、文字列があると3D集計や、統合、ピボットも使えない。 出来合いのソフトも適したものは見つからないだろう? ただしVBAでやるには無理があるように思う。 ブックが多数あると、インタープリタ的なVBAでは、処理に時間がかかることを覚悟せねばならない。 ーー 私のテスト例 あるフォルダに 回答総務 回答人事 回答営業 の名のブックをつくり、その各々のシートSheet1のA1:C4の範囲にデータを入れた。第1列は項目名。 対象セルを総なめという泥臭いやり方だが、 Sub test01() Dim buf As String Dim cl Set wks = ActiveWorkbook x = CurDir buf = Dir(x & "\") Do While buf <> "" If Left(buf, 2) = "回答" And Right(buf, 4) = ".xls" Then MsgBox buf Set wk = Workbooks.Open(buf) For Each cl In wk.Worksheets("Sheet1").Range("A1:C4") If IsNumeric(cl) Then wks.Worksheets("sheet1").Cells(cl.Row, cl.Column) = _ wks.Worksheets("sheet1").Cells(cl.Row, cl.Column) + cl Else wks.Worksheets("sheet1").Cells(cl.Row, cl.Column) = cl End If Next wk.Close SaveChanges:=False End If buf = Dir() Loop End Sub (注意) If Left(buf, 2) = "回答" And Right(buf, 4) = ".xls" Then は質問どおりだと If Left(buf,4) = "(回答)" And Right(buf, 4) = ".xls" Then ーー x = CurDir はフォルダまでのフルパス+"\"を指定 ーー For Each cl In wk.Worksheets("Sheet1").Range("A1:C4") はF列と他を分ける あるいは文字列セルなら、 wks.Worksheets("sheet1").Cells(cl.Row, cl.Column) = _ wks.Worksheets("sheet1").Cells(cl.Row, cl.Column) +","+ cl この部分はいれておらず、私はテストしてない。 最後に、このブックを名前を付けて保存(操作又はVBAで。ここでは略) ScreenUpdating=Falseなどは入れた方が良いかも。 2007以降なら、エクセルの拡張子の判別部分は変えて。 ーー Sub test02() Dim buf As String Dim cl Set wks = ActiveWorkbook x = CurDir buf = Dir(x & "\") Do While buf <> "" If Left(buf, 2) = "回答" And Right(buf, 4) = ".xls" Then MsgBox buf End If buf = Dir() Loop End Sub の部分だけでも実行して、対象のエクセルファイル名を(もれなく、余分なく掴めるか)掴む所からやってみたら。

chokoy67
質問者

お礼

丁寧にコードを書いて頂きありがとうございました。 VBA初心者であり時間的に余裕もありませんでしたので、ご指摘のような丸投げとなってしまいました。 頂きましたコードを活用して役立たせて頂きます。

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1
chokoy67
質問者

お礼

ありがとうございました。 私の方法が間違っているためか、残念ながら思うような形にはなりませんでしたが、頂きましたコードを活用して役立たせて頂きます。

chokoy67
質問者

補足

丁寧にありがとうございます。 ご指摘ありましたとおり、集計ファイルの「集計」シートは(回答)ファイルと同じフォーマットにて既にシートを作成してあります。 この「集計」シートF列からG列に合計と文字列の結合を入力されるようにしたいのです。 Cドライブに「data」フォルダを作成して「集計ファイル」とその他集計する多数の「(回答)部署名.xls」を格納しました。 お教え頂いたマクロを実行しましたが、集計ファイルには何も入力はされませんでした。 エラーメッセージも出ておらず、どこが機能していないか原因も分かりません。 お手数ですが再度ご教示頂けませんでしょうか。