-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

