0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ChatGPTにExcelVBA作成してもらった 結果は・・・

Posted at

大規模なシステムを開発する程ではないけど、日々の業務をもう少し楽にしたい。
でも、vbaの知識もないし・・・

そういった方でもChatGPTを使用すれば、vbaが作成できるのか。
やってみた。

注)日々システム開発を行っていない方々にとって、要件を正確に伝えることも難しいことだと思います。
なので、今回はあえて要件は正確に伝えず、徐々に改善していくこととします。

ゴールイメージ(csvファイルイメージ)

image.png

インプットとなるExcelファイル

image.png

最初に伝えた要件

ExcelVBAで以下の要件も満たすプログラムを作成してください。
シート1。セルB1に指定されたExcelファイルからcsvファイルを作成します。
B1ni指定されたExcelファイルの1番目のシートを使用します。
データは2行目からあり、最終行はその時によって何行目まであるかは可変します。
全データを対象にしてください。
使用する列はA列。C列。E〜I列をcsvファイルに出力してください。
csvファイルの1件目はヘッダーレコード
2件目からがデータレコード(Excelから取得するデータ)
最後にエンドレコードを出力してください。

他に何か必要な情報があれば聞いてください

提示されたコード

Sub ExportToCSV()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim csvFile As String
    Dim lastRow As Long
    Dim i As Long
    Dim dataRange As Range
    
    ' 対象のExcelファイルを開く
    Set wb = Workbooks.Open(Range("B1").Value)
    
    ' 1番目のシートを取得
    Set ws = wb.Worksheets(1)
    
    ' 最終行を取得
    lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
    
    ' 出力する範囲を指定
    Set dataRange = ws.Range("A2:I" & lastRow)
    
    ' 出力するファイル名を指定
    csvFile = ThisWorkbook.Path & "\" & Replace(wb.Name, ".xlsx", "") & ".csv"
    
    ' csvファイルを作成
    
    Open csvFile For Output As #1
    
    ' ヘッダーレコードを出力
    Print #1, "Column A, Column C, Column E, Column F, Column G, Column H, Column I"
    
    ' データレコードを出力
    For i = 1 To dataRange.Rows.Count
        Print #1, dataRange.Cells(i, 1) & "," & dataRange.Cells(i, 3) & "," & dataRange.Cells(i, 5) & "," & dataRange.Cells(i, 6) & "," & dataRange.Cells(i, 7) & "," & dataRange.Cells(i, 8) & "," & dataRange.Cells(i, 9)
    Next i
    
    ' エンドレコードを出力
    Print #1, "End Record"
    
    ' csvファイルを閉じる
    Close #1
    
    ' 対象のExcelファイルを閉じる
    wb.Close SaveChanges:=False
    
    MsgBox "CSVファイルを作成しました。", vbInformation
End Sub


実行結果

image.png

実行結果には程遠いですね。

要件を追加してみましょう

2回目の要件

上記のコードを少し修正してください。
ヘッダレコードは以下で作成
1項目目はH、2項目目はマクロを実行した日付
データレコードは先頭をD
エンドレコードは先頭をE 2つ目の項目でデータレコードの件数を出力してください```

提示されたコード

Sub ExportDataToCSV()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim csvFile As String
    Dim headerRecord As String
    Dim endRecord As String
    Dim dataRecord As String
    Dim recordCount As Integer
    
    ' 元となるExcelファイルを取得
    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Sheet1")
    
    ' CSVファイルの保存先を設定
    csvFile = ws.Range("B1").Value & ".csv"
    
    ' CSVファイルを作成する前に、ファイルが存在する場合は削除する
    If Dir(csvFile) <> "" Then
        Kill csvFile
    End If
    
    ' CSVファイルを "Append" モードで開く
    Open csvFile For Append As #1
    
    ' ヘッダーレコードを作成
    headerRecord = "H," & Format(Now, "YYYY-MM-DD")
    
    ' CSVファイルにヘッダーレコードを書き込む
    Print #1, headerRecord
    
    ' データレコードを作成
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    For i = 2 To lastRow
        dataRecord = "D,"
        For j = 1 To 9 Step 2
            dataRecord = dataRecord & ws.Cells(i, j).Value & ","
        Next j
        ' 最後のカンマを削除
        dataRecord = Left(dataRecord, Len(dataRecord) - 1)
        ' CSVファイルにデータレコードを書き込む
        Print #1, dataRecord
        ' レコード数をカウント
        recordCount = recordCount + 1
    Next i
    
    ' エンドレコードを作成
    endRecord = "E," & recordCount
    
    ' CSVファイルにエンドレコードを書き込む
    Print #1, endRecord
    
    ' ファイルを閉じる
    Close #1
    
    ' 完了メッセージを表示
    MsgBox "CSVファイルを作成しました。", vbInformation
    
End Sub

データレコードが何も出力されなくなった。
原因はここ。マクロ実行ファイルになってる

    ' 元となるExcelファイルを取得
    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Sheet1")

指摘

あれ?なんで入力元のファイルがthisworkbookになってるの?

再度提示されたコード

Sub ExportDataToCSV()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim csvFile As String
    Dim headerRecord As String
    Dim endRecord As String
    Dim dataRecord As String
    Dim recordCount As Integer
    
    ' 入力元のExcelファイルを取得
    Set wb = Workbooks.Open(ThisWorkbook.Sheets("Sheet1").Range("B1").Value)
    Set ws = wb.Sheets(1)
    
    ' CSVファイルの保存先を設定
    csvFile = ws.Range("B1").Value & ".csv"
    
    ' CSVファイルを作成する前に、ファイルが存在する場合は削除する
    If Dir(csvFile) <> "" Then
        Kill csvFile
    End If
    
    ' CSVファイルを "Append" モードで開く
    Open csvFile For Append As #1
    
    ' ヘッダーレコードを作成
    headerRecord = "H," & Format(Now, "YYYY-MM-DD")
    
    ' CSVファイルにヘッダーレコードを書き込む
    Print #1, headerRecord
    
    ' データレコードを作成
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    For i = 2 To lastRow
        dataRecord = "D,"
        For j = 1 To 9 Step 2
            dataRecord = dataRecord & ws.Cells(i, j).Value & ","
        Next j
        ' 最後のカンマを削除
        dataRecord = Left(dataRecord, Len(dataRecord) - 1)
        ' CSVファイルにデータレコードを書き込む
        Print #1, dataRecord
        ' レコード数をカウント
        recordCount = recordCount + 1
    Next i
    
    ' エンドレコードを作成
    endRecord = "E," & recordCount
    
    ' CSVファイルにエンドレコードを書き込む
    Print #1, endRecord
    
    ' ファイルを閉じる
    Close #1
    
    ' Excelファイルを閉じる
    wb.Close False
    
    ' 完了メッセージを表示
    MsgBox "CSVファイルを作成しました。", vbInformation
    
End Sub

実行結果

image.png

因みにファイル名はこれになりました。
image.png

ん~いろいろおかしくなった。
なんでファイル名の付け方変えちゃったんだろう?
なぜ、行をstep 2にしてしまったんだろう?

私はコードが読めるので、ダメな箇所が分かるけど・・・

世間では精度が高いと言われているけど、これじゃあ使えない

要件の提示方法に問題があるのだろうか?
今回は失敗になったが、要件の出し方を工夫して再チャレンジしたい

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?