• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのマクロについての質問です。)

エクセルマクロでファイルを結合する方法

このQ&Aのポイント
  • エクセルのマクロを使用して、ファイルA.xlsのA列とB列にファイルB.csvを、最終行にファイルC.csvを結合する方法を教えてください。
  • 注意点として、実際のファイルの行数は毎回変動するため、柔軟に結合できる方法が必要です。
  • また、ファイルA.xlsのC列には関数が含まれており、結合した情報を計算して表示する必要があります。

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

  • ベストアンサー
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.2

こんなのはどうでしょうか? B.csvとC.csvが2列しかない場合は Sub sample() Dim r As Long r = 1 Columns("A:B").Clear '一応クリアする場合 Workbooks.Open "C:\B.csv" ActiveSheet.UsedRange.Copy ThisWorkbook.ActiveSheet.Range("A1") r = r + ActiveSheet.UsedRange.Rows.Count ActiveWorkbook.Close False Workbooks.Open "C:\C.csv" ActiveSheet.UsedRange.Copy ThisWorkbook.ActiveSheet.Range("A" & r) ActiveWorkbook.Close False End Sub B.csvとC.csvが3列目(C列)以降もある場合は Sub sample() Dim r As Long r = 1 Columns("A:B").Clear '一応クリアする場合 Workbooks.Open "C:\B.csv" Application.Intersect(Columns("A:B"), ActiveSheet.UsedRange).Copy ThisWorkbook.ActiveSheet.Range("A1") r = r + ActiveSheet.UsedRange.Rows.Count ActiveWorkbook.Close False Workbooks.Open "C:\C.csv" Application.Intersect(Columns("A:B"), ActiveSheet.UsedRange).Copy ThisWorkbook.ActiveSheet.Range("A" & r) ActiveWorkbook.Close False End Sub

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 今のところ、ファイルオープンダイアログで、ファイルを複数選択した時に、順序を選べませんが、複数選択可能です。 注意としては、書き込もうとする最初のセルに値が入っていると、「上書きしますか?」と聞いてきます。そうすると、最初の右の関数自体も無視されますので、CSVが右の関数のデータ列よりも大きいと、上書きされます。 >実際は関数が入っていて 本来、関数は、マクロで入れれば、もっと簡単なマクロにできるはずです。 '------------------------------------------- Sub ImportCSV() ''間にCSVデータを挿入するマクロ   Dim i As Long   Dim j As Long   Dim FileNames As Variant   Dim textLine As String   Dim myArray As Variant   Dim fNum As Integer   Dim n As Variant   Dim sh As Worksheet   Dim flg As Boolean   '=========================================   ''設定   i = 1 '開始行   '=========================================      Set sh = ActiveSheet   '列幅の指定 'j =1 は、無視される   j = sh.Cells(i, 1).End(xlToRight).Column   FileNames = Application.GetOpenFilename("CSVファイル(*.csv),*.csv", 1, "複数ファイル名取得", , True)   If VarType(FileNames) = vbBoolean Then Exit Sub   For Each n In FileNames     fNum = FreeFile()     Application.ScreenUpdating = False     Open n For Input As #fNum     Do While Not EOF(fNum)       Line Input #fNum, textLine       myArray = Split(textLine, ",") 'デリミタは、「,」       If sh.Cells(i, 1).Value <> "" And flg = False Then         If MsgBox("上書きしますが、よろしいですか?", vbOKCancel + vbQuestion) = vbCancel Then           Exit Sub         End If         'フラッグ         flg = True         j = Columns.Count       End If       If j < Columns.Count Then         sh.Cells(i, 1).Resize(, j - 1).Value = myArray       Else         sh.Cells(i, 1).Resize(, UBound(myArray) + 1).Value = myArray       End If       i = i + 1     Loop     Application.ScreenUpdating = True     Close #fNum   Next n   Set sh = Nothing   Beep End Sub

関連するQ&A