ChatGPTでエクセルのマクロを作成

■指示

以下のようなエクセルマクロを作成して

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

完璧に思ったとおりにうごくプログラムを作ってもらうには何度も指示をし直す必要がありました。プログラミング言語は「日本語です」と言える日はもう少し先の未来です…。

タイトルとURLをコピーしました