ChatGPT4に質問
VBAでダイアログボックスで選択したファイルのInvoice_details(編集用)シートのP列にソートを降順でかけて、P列のデータを支払日の列に代入、AT列を金額の列に代入、貸方消費税に対象外を代入、F列と(D列)を文字結合した値を摘要に代入して、E列がOAの時は、W列を摘要、未払金という文字列を勘定科目に代入、E列がHIEXPENSEの時は、【BH列】とW列を文字結合した値を摘要に未払金(立替精算)という文字列を勘定科目列に代入してください。
ChatGPT4の回答
Sub ProcessInvoiceDetails() Dim targetFile As Variant Dim targetWb As Workbook Dim targetWs As Worksheet Dim lastRow As Long Dim i As Long ' ダイアログボックスでファイルを選択 targetFile = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls; *.xlsx; *.xlsm),*.xls; *.xlsx; *.xlsm", Title:="対象のExcelファイルを選択してください") ' キャンセルボタンがクリックされた場合、処理を終了 If targetFile = False Then Exit Sub ' 選択したファイルを開く Set targetWb = Workbooks.Open(targetFile) ' Invoice_details(編集用)シートを選択 On Error Resume Next Set targetWs = targetWb.Worksheets("Invoice_details(編集用)") On Error GoTo 0 If targetWs Is Nothing Then MsgBox "Invoice_details(編集用)シートが見つかりません。", vbCritical, "エラー" targetWb.Close SaveChanges:=False Exit Sub End If ' P列ソートを昇順に適用 With targetWs.Sort .SortFields.Clear .SortFields.Add Key:=targetWs.Range("P2:P" & lastRow), Order:=xlAscending .SetRange targetWs.Range("A1:AT" & lastRow) .Header = xlYes .Apply End With ' 最終行を取得 lastRow = targetWs.Cells(targetWs.Rows.Count, "P").End(xlUp).Row ' 指定された処理を実行 For i = 2 To lastRow ' 支払日の列にP列のデータを代入 targetWs.Cells(i, "PaymentDateColumn").Value = targetWs.Cells(i, "P").Value ' 金額の列にAT列のデータを代入 targetWs.Cells(i, "AmountColumn").Value = targetWs.Cells(i, "AT").Value ' 貸方消費税に対象外を代入 targetWs.Cells(i, "TaxColumn").Value = "対象外" ' 摘要にF列と(D列)を文字結合した値を代入 targetWs.Cells(i, "DescriptionColumn").Value = targetWs.Cells(i, "F").Value & " (" & targetWs.Cells(i, "D").Value & ")" ' E列がOAの時 If targetWs.Cells(i, "E").Value = "OA" Then targetWs.Cells(i, "SummaryColumn").Value = targetWs.Cells(i, "W").Value targetWs.Cells(i, "AccountColumn").Value = "未払金" ' E列がHIEXPENSEの時 ElseIf targetWs.Cells(i, "E").Value = "HIEXPENSE" Then targetWs.Cells(i, "SummaryColumn").Value = targetWs.Cells(i, "BH").Value & targetWs.Cells(i, "W").Value targetWs.Cells(i, "AccountColumn").Value = "未払金(立替精算)" End If Next i ' 保存してファイルを閉じる targetWb.Save targetWb.Close SaveChanges:=False MsgBox "処理が完了しました。", vbInformation, "完了" End Sub