-チャットGPT4-
-チャットGPT4-に質問
ダイアログボックスで選択したファイルのSheet1からダイアログボックスで選択した別のファイルのBank Statement(編集用)R列のデータがUSDでF列がSheet1のC列が一致した時、Sheet1のE列の数値をQ列に、最終列の-13にI列に数値がある場合、=round(I列*Q列,0)の式、 I列に数値がない場合、=round(H列*Q列,0)の式を入れるVBAを作ってください。
-チャットGPT4-の回答
Option Explicit Sub TransferDataWithMatchingCurrency() Dim SourceWorkbook As Workbook Dim TargetWorkbook As Workbook Dim wsSource As Worksheet Dim wsTarget As Worksheet Dim OpenFileName As Variant Dim LastRowSource As Long Dim LastRowTarget As Long Dim LastColTarget As Long Dim i As Long, j As Long ' ソースファイルの選択 OpenFileName = Application.GetOpenFilename _ (Title:="ソースファイルを選択してください", _ FileFilter:="Excel Files *.xls* (*.xls*),") If OpenFileName = False Then MsgBox "ファイルが選択されませんでした。", vbExclamation, "エラー" Exit Sub End If Set SourceWorkbook = Workbooks.Open(OpenFileName) ' ターゲットファイルの選択 OpenFileName = Application.GetOpenFilename _ (Title:="ターゲットファイルを選択してください", _ FileFilter:="Excel Files *.xls* (*.xls*),") If OpenFileName = False Then MsgBox "ファイルが選択されませんでした。", vbExclamation, "エラー" Exit Sub End If Set TargetWorkbook = Workbooks.Open(OpenFileName) ' シートの設定 Set wsSource = SourceWorkbook.Worksheets("Sheet1") Set wsTarget = TargetWorkbook.Worksheets("Bank Statement(編集用)") ' 最終行の取得 LastRowSource = wsSource.Cells(wsSource.Rows.Count, "C").End(xlUp).Row LastRowTarget = wsTarget.Cells(wsTarget.Rows.Count, "F").End(xlUp).Row ' ターゲットファイルの1行目の最終列を取得 LastColTarget = wsTarget.Cells(1, wsTarget.Columns.Count).End(xlToLeft).Column ' データを転送 For i = 2 To LastRowSource For j = 2 To LastRowTarget ' 条件が一致したらQ列に値を入れる If wsSource.Cells(i, "C").Value = wsTarget.Cells(j, "F").Value And wsTarget.Cells(j, "R").Value = "USD" Then wsTarget.Cells(j, "Q").Value = wsSource.Cells(i, "E").Value ' I列に数値がある場合、式を最終列の-13列目に入れる If Not IsEmpty(wsTarget.Cells(j, "I").Value) Then wsTarget.Cells(j, LastColTarget - 13).Formula = "=ROUND(I" & j & "*Q" & j & ", 0)" ' I列に数値がない場合、式を最終列の-12列目に入れる Else wsTarget.Cells(j, LastColTarget - 13).Formula = "=ROUND(H" & j & "*Q" & j & ", 0)" End If ' Exit For End If Next j Next i ' 完了メッセージを表示 MsgBox "Bank Statement(編集用)シートのQ列と最終列-12列目が更新されました。", vbInformation, "完了" End Sub