-チャット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

