こんにちは。私は地方のスーパーの商品部に所属し「地域商品」の仕入や売場管理の仕事をしている女性会社員です。
デジタルの勉強を始めて早1か月半がたちました。
今の業務はパソコンを使った事務作業が多いのですが、どちらかというと個々の対応が多いためアナログな動きをしていることが多いです。
その中で売上実績の業者さんへの報告業務は毎月の定型業務として必須です。
こちらは過去のバイヤーが作成してくれたマクロを使っていますが、手順が複雑で1回あたり仕分けだけで約30分かかっています。
今回はChatGPTを活用してこの売上実績の報告業務の時短をめざしてExelのマクロ
を作成してみたいと思います。
実は2週間前にも同じことを挑戦したのですが、ChatGPTへの質問がうまくいかずで約6時間かけてもマクロ・PowerAutomateDesktop
も全く動かすことができず、断念してしまいました。
今回は再挑戦です!
1.ひとつのExelブックから取引先名を抽出して、新しいExelブックに内容をコピーして貼り付ける
<制作の背景>
月度の定型業務として実績データを取引先様ごとにわける作業があります。現在は昔の担当者が作ってくれたマクロにデータをはめ込んで作成していますが、そのデータ作成までに非常に手数がかかります。
これをもっと簡単な方法で自分でも作成できないかと思いやってみました。
データとしては簡略版を作って試してみます。
これでは1行目の項目がカットされたファイルができてしまったので、さらに細かく指示をだしてみました。
上記の質問でだしてもらったコードでやりたいことがちゃんと動きました。
最終的に貼り付けたコードはこちら
Sub CopyDataAndSaveAsNewWorkbooks()
Dim sourceWorkbook As Workbook
Dim newWorkbook As Workbook
Dim sourceSheet As Worksheet
Dim newSheet As Worksheet
Dim lastRow As Long
Dim extractStrings As Object
Dim extractString As Variant
Dim desktopPath As String
' Define the path to the desktop
desktopPath = CreateObject("WScript.Shell").SpecialFolders("Desktop")
' Assuming the source workbook is already opened
Set sourceWorkbook = ThisWorkbook ' Change ThisWorkbook to the appropriate workbook if needed
' Set the source sheet
Set sourceSheet = sourceWorkbook.Sheets("Sheet1")
' Find the last row in column C of the source sheet
lastRow = sourceSheet.Cells(sourceSheet.Rows.Count, "C").End(xlUp).Row
' Extract unique strings from column C
Set extractStrings = CreateObject("Scripting.Dictionary")
For i = 2 To lastRow
extractStrings(sourceSheet.Cells(i, "C").Value) = 1
Next i
' Loop through unique strings
For Each extractString In extractStrings.keys()
' Create a new workbook and sheet
Set newWorkbook = Workbooks.Add
Set newSheet = newWorkbook.Sheets(1)
' Copy the first row from source to new workbook
sourceSheet.Rows(1).Copy newSheet.Rows(1)
' Set the extract string as the name for the new workbook
newWorkbook.SaveAs desktopPath & "\" & extractString & ".xlsx"
' Loop through column C from row 2 to the last row
For i = 2 To lastRow
If sourceSheet.Cells(i, "C").Value = extractString Then
' Copy the row from source to new workbook
sourceSheet.Rows(i).Copy newSheet.Rows(newSheet.Cells(newSheet.Rows.Count, "A").End(xlUp).Row + 1)
End If
Next i
' Close the new workbook
newWorkbook.Close True
Next extractString
' Clean up
Set newWorkbook = Nothing
Set newSheet = Nothing
MsgBox "Data copied and new workbooks saved successfully!", vbInformation
End Sub
動作はこちら
2.Exelブックから不要な行を削除する
<制作背景>
生データには私の部署に関係のないデータも多数含まれており、そちらのデータの削除が必要になります。現在は手動で取引先名などをフィルタにかけて削除しています。
こちらもマクロで簡単にできないか試してみました。
ChatGPTにはこんな質問をしました。
何回か聞き直しましたが上記の質問で、B列に取引先番号の218と2128を削除するマクロを聞き出すことができました。
コードはこちら
Sub RemoveColumnsBasedOnValue()
Dim ws As Worksheet
Dim lastRow As Long
Dim searchRange As Range, cel As Range
Dim searchValue1 As String, searchValue2 As String
Dim delRange As Range
' シート1を設定します
Set ws = ThisWorkbook.Sheets("Sheet1")
' 検索範囲の最終行を取得します
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
' 検索する値を指定します
searchValue1 = "218"
searchValue2 = "2128"
' 削除する範囲を初期化します
Set delRange = Nothing
' 指定された値を含むセルを検索し、該当する行のA列からS列を削除する範囲を取得します
For Each cel In ws.Range("B2:B" & lastRow)
If cel.Value = searchValue1 Or cel.Value = searchValue2 Then
If delRange Is Nothing Then
Set delRange = cel.EntireRow
Else
Set delRange = Union(delRange, cel.EntireRow)
End If
End If
Next cel
' 削除する範囲がある場合は、A列からS列を削除します
If Not delRange Is Nothing Then
delRange.Delete Shift:=xlUp
End If
End Sub
それまでの質問はこちら
どのエクセルを開くかの指示が明確ではなく動きません。
指定したファイルではなく開いたファイルにしました。
指定した値218,2128
の言い方がだめなようです。
218 or 2128
と書き直したらできました。
質問のコツをつかんだのもあり、こちらは比較的スムーズにできました。
実際は削除したい取引先が100個程度あるかと思うので、今回のように不要な個所の削除がいいのか必要な部分を取り出す方がいいのか検討が必要です。
3.PowerAutomateDesktopのメール送信自動化に挑戦
<制作背景>
VBA
がスムーズにできたので、ChatGPTを使ってPowerAutomateDesktop
を使えるようになりたいと思いました。
今までうまく動いた経験はがないため、自信がありませんでした。まずはChatGPTにPowerAutomateDesktop
の複数相手に対するメール送信の方法を聞いてみました。
7.送信するメールの詳細を設定する → ここが知りたいのに、なかなかいい答えが出てこず。
具体的な操作手順は提供できないとのこと。ChatGPTはPowerAutomateDesktop
の使い方については苦手なのかもしれないです。
補足
結局ChatGPTではなく以下の記事を参考に作成しました。
ChatGPTのおかげでVBA
がスムーズにできたので、その時間でPowerAutomateDesktop
の勉強に時間が使えました。
4.まとめ
Exelのマクロ
に関してはChatGPTへの質問を丁寧に繰り返せば動くことがわかりました。
コードを教えてくれる点でChatGPTとVBA
は相性がいいかと思います。
反対にPowerAutomateDesktop
ついては手順の流れは教えてくれますが、細部の設定についてはきちんと教えてもらえなかったので、相性が悪いかと思います。
最後に、実際のデータでやってみたところ…
1.「取引先名を抽出して、新しいExelブックに内容をコピーして貼り付ける」
今回つくったコードを応用して実際に私の業務で使っているデータに実行してみました。
すると30分たっても完成しませんでした。原因は13万行ほどデータがあるため検索に時間がかかるのではないかと思います。
先にフィルターをかけてからコピーするなど、さらに改良が必要だと感じました。
最後まで読んでいただきありがとうございました。