■指示
以下のようなエクセルマクロを作成して
1 データ入力用のエクセルファイルが複数入ったフォルダをダイアログで指定する。
2 マクロを実行するエクセルファイル(以下、「コピー元ファイル」という。)の2番目のシートにあるA1:A10のデータをコピーしてクリップボードに保持しておく。
3 ダイアログで選択したフォルダの1番目にあるファイルを開き、そのファイルの2番目のシートのC1:C10に値を張り付け(ただし、C列のセルがD列と結合していても貼り付けられるよう工夫する。)、保存してファイルを閉じる。
4 2から3の処理を「コピー元ファイル」のデータがnullになるまで繰り返すが、2回目のループはコピー元のデータをB1:B10、3回目のループはコピー元のデータをC1:C10とループを繰り返すごとにコピーするデータの列を右に一つずつずらしていく。
■できたプログラム
Sub PasteData()
Dim inputFolder As String
Dim copyData() As Variant
Dim copyDataIndex As Integer
Dim currentFile As String
' ステップ 1: ユーザーに入力用フォルダを選択するように促す
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Title = "入力用フォルダを選択してください"
If .Show = True Then
inputFolder = .SelectedItems(1)
Else
Exit Sub
End If
End With
' ステップ 2: コピー元ファイルの2番目のシートからデータをコピーする
copyDataIndex = 0
copyData = Sheets(2).Range("A1:A10").Value
' ステップ 3: 入力用フォルダ内のファイルをループしてデータを貼り付ける
currentFile = Dir(inputFolder & "\*.xlsx")
Do While currentFile <> ""
Dim targetWorkbook As Workbook
Set targetWorkbook = Workbooks.Open(inputFolder & "\" & currentFile)
' コピーしたデータを C1:C10 に貼り付ける(C列が D列と結合している場合でも貼り付けられるようにする)
targetWorkbook.Sheets(2).Range("C1:C10").Value = copyData
' ファイルを保存して閉じる
targetWorkbook.Save
targetWorkbook.Close
' コピーするデータを更新する
copyDataIndex = copyDataIndex + 1
If copyDataIndex < 10 Then
copyData = Sheets(2).Range("A1:A10").Offset(0, copyDataIndex).Value
Else
Exit Do
End If
' 次のファイルを取得する
currentFile = Dir()
Loop
End Sub
完璧に思ったとおりにうごくプログラムを作ってもらうには何度も指示をし直す必要がありました。プログラミング言語は「日本語です」と言える日はもう少し先の未来です…。