-ChatGPT4-
-ChatGPT4-に質問
VBAで給与仕訳を作成します。コメントは日本語にしてください。パスワードは解除し、ダイアログボックスでファイルを選択して、Sheet1の右隣にコピーして給与データと名前を変更する。給与データの最終行は、削除する。給与データの3行目から行データを取得して、給与仕訳テンプレート のシートに代入していく。C列ーE列ーF列ーG列ーH列ーI列ーJ列ーK列の値を給与仕訳テンプレートのC1に代入、D列をC2列に代入、G列をC3に代入、F列をC4に代入、L列をC10とE10に代入、M列をC11とE11に代入、N列をC9とE9に代入、O列をE6に代入、Q列をE7に代入、R列をE4に代入、S列をE3に代入、T列をE1に代入、U列をE2に代入、T列+U列の値をJ1に代入。代入後のその給与仕訳テンプレートのシートをコピーして一番右に追加していく。シート名は、給与仕訳(部門:A列)としてください。
給与仕訳テンプレートのK列にある文字列の頭に○月度をつけるようにしてください。〇はインプットボックスで入力します。
ChatGPT4の回答
-ChatGPT4-による回答は完璧ではありませんので、多少の調整が必要です。
Sub CreateSalaryJournal() Dim wb As Workbook, wsData As Worksheet, wsTemplate As Worksheet Dim srcPath As String Dim lastRow As Long, i As Long Dim password As String Dim month As String ' パスワードを設定 password = "あなたのパスワード" ' ファイルを選択 With Application.FileDialog(msoFileDialogFilePicker) .AllowMultiSelect = False .Filters.Clear .Filters.Add "Excel Files", "*.xls*" .Show srcPath = .SelectedItems(1) End With ' パスワードを解除してファイルを開き、Sheet1の内容をコピー Set wb = Workbooks.Open(srcPath, Password:=password) wb.Sheets("Sheet1").Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) ' 新しいシートに名前を付けて最終行を削除 Set wsData = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) wsData.Name = "給与データ" lastRow = wsData.Cells(Rows.Count, 1).End(xlUp).Row wsData.Rows(lastRow).Delete ' テンプレートシートを準備 Set wsTemplate = ThisWorkbook.Sheets("給与仕訳テンプレート") ' ○月度を取得 month = InputBox("月度を入力してください(例:1月度の場合は、1):", "月度の入力") ' データをコピーして入力 For i = 3 To lastRow wsTemplate.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) With ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) .Name = "給与仕訳(部門:" & wsData.Cells(i, 1).Value & ")" .Cells(1, 3).Value = wsData.Cells(i, 3).Value-wsData.Cells(i, 5).Value-wsData.Cells(i, 6).Value-wsData.Cells(i, 7).Value-wsData.Cells(i, 8).Value-wsData.Cells(i, 9).Value-wsData.Cells(i, 10).Value-wsData.Cells(i, 11).Value .Cells(2, 3).Value = wsData.Cells(i, 4).Value .Cells(3, 3).Value = wsData.Cells(i, 7).Value .Cells(4, 3).Value = wsData.Cells(i, 6).Value .Cells(10, 3).Value = wsData.Cells(i, 12).Value .Cells(10, 5).Value = wsData.Cells(i, 12).Value .Cells(11, 3).Value = wsData.Cells(i, 13).Value .Cells(11, 5).Value = wsData.Cells(i, 13).Value .Cells(9, 3).Value = wsData.Cells(i, 14).Value .Cells(9, 5).Value = wsData.Cells(i, 14).Value .Cells(6, 5).Value = wsData.Cells(i, 15).Value .Cells(7, 5).Value = wsData.Cells(i, 17).Value .Cells(4, 5).Value = wsData.Cells(i, 18).Value .Cells(3, 5).Value = wsData.Cells(i, 19).Value .Cells(1, 5).Value = wsData.Cells(i, 20).Value .Cells(2, 5).Value = wsData.Cells(i, 21).Value .Cells(1, 10).Value = wsData.Cells(i, 20).Value + wsData.Cells(i, 21).Value ' 給与仕訳テンプレートのK列にある文字列の頭に○月度を追加 Dim rowIndex As Long For rowIndex = 1 To 11 .Cells(rowIndex, 11).Value = month & wsTemplate.Cells(rowIndex, 11).Value Next rowIndex End With Next i ' 元のファイルを保存せずに閉じる wb.Close SaveChanges:=False End Sub