6
3

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と一緒なら大丈夫!マクロde時短チャレンジ

Last updated at Posted at 2023-08-17

話題のAI。ちょっとだけ勉強しました!

プログラミングは全く分からないデジタル初心者です。
ChatGPTはコードも書いてくれると聞いて…!
色々チャレンジした挙句、私にはマクロが限界でした…(^^;)

Excel編集 時短チャレンジ!

こんにちは、小売業の総務部で事務作業に従事しております。
前回の記事でPower Automate DesktopでExcel編集の自動化に挑戦しました。

少しでも自動化できる部分は自動化して、 人間にしかできない「書類のファイリング」や「考えて組み立てる業務」に費やす時間を増やしたい! というのが私のデジタル勉強の目標です!
なので、またまたExcel編集作業の時短大作戦です^^
今回使用するのも、請求状況の進捗管理のExcelです。
店舗改装などの際に、商品の陳列応援依頼を取引先にすることがあり、その費用支払いの請求書処理状況を確認するためのデータです。
37列3,000行のデータを編集して不要分を削除します。
image.png
今回は全体の作業の一部分だけなので慣れていれば5分ほどで終わる作業なんですが…
(この後も編集やメール、集計、確認の連絡など手間のかかることが続くので少しでも時短したい…)
マクロ実行だと一瞬で作業が終わってしまうんですね… すごすぎる…。

なぜ今回マクロに挑戦したかというと、 ChatGPTにコードを書いてもらえると知ったからなんです。
過去、マクロに挑戦しようと色々調べたり本を読もうとしてみたりしたことがありましたが、さっぱり理解できず途中で諦めてしまいました💦
それなのに、ChatGPTがコードを書いてくれるというじゃないですか!!
ちょうどPower Automate DesktopでExcelの編集を行い、作業軽減としてやりたい方向性も定まってきたところ。
時短の手段は色々身に着けておいて損はない! と早速チャレンジしてみました。

ChatGPTとのお戯れ

とりあえず話しかけてみよう

VBAのコードは全く理解できなかった私。書いてもらうとはいえ本当に扱えるのか? と不安になりながら、とりあえずGPT先生に話しかけてみました。

マクロの記録方法を教えてくれました!
これは、記録を始めてから実際に操作したことをコードに書き起こしてくれる(?)みたいなのですが…
効率的な操作を知らない私の無駄な動きもすべて記録されてしまうし、あとから見返しても絶対何かわからないコードが完成しました…。
折りたたみの中身は見ないことをおすすめします(笑)

こんなに長いコード、絶対見たくない…。
vba
Sub 不要行削除()
'
' 不要行削除 Macro
' 過年度、応援辞退、支払済を削除します
'

'
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 5
    ActiveWindow.ScrollColumn = 6
    ActiveWindow.ScrollColumn = 7
    ActiveWindow.ScrollColumn = 8
    ActiveWindow.ScrollColumn = 9
    ActiveWorkbook.Worksheets("元データ (2)").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("元データ (2)").AutoFilter.Sort.SortFields.Add2 Key:= _
        Range("R1:R2949"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
        :=xlSortNormal
    With ActiveWorkbook.Worksheets("元データ (2)").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Columns("S:S").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("S2").Select
    ActiveCell.FormulaR1C1 = "=left(R2,10)"
    Range("S2").Select
    Selection.AutoFill Destination:=Range("S2:S2949")
    Range("S2:S2949").Select
    Columns("S:S").Select
    Selection.NumberFormatLocal = "yyyy/m/d"
    Range("S2937").Select
    ActiveCell.FormulaR1C1 = "=LEFT(R[-2935]C[-1],2945)"
    Range("S2799").Select
    ActiveCell.FormulaR1C1 = "=LEFT(R[-2797]C[-1],2807)"
    Range("S2797").Select
    ActiveWindow.SmallScroll Down:=-54
    Range("S2743").Select
    Selection.End(xlUp).Select
    ActiveWindow.SmallScroll Down:=-24
    Range("S2").Select
    ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],10)"
    Range("S2").Select
    Selection.AutoFill Destination:=Range("S2:S2949")
    Range("S2:S2949").Select
    Columns("S:S").Select
    Selection.Replace What:="-", Replacement:="/", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Columns("S:S").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.Replace What:="-", Replacement:="/", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Range("S10").Select
    Application.CutCopyMode = False
    Range("S1").Select
    ActiveSheet.Range("$A$1:$AO$2949").AutoFilter Field:=19, Criteria1:= _
        "<2023/03/01", Operator:=xlAnd
    ActiveWindow.SmallScroll Down:=-18
    Rows("2:2").Select
    Range("I2").Activate
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWindow.SmallScroll Down:=3
    Selection.Delete Shift:=xlUp
    ActiveSheet.Range("$A$1:$AO$1229").AutoFilter Field:=19
    Columns("S:S").Select
    Selection.Delete Shift:=xlToLeft
    Range("Q8").Select
    ActiveWindow.ScrollColumn = 8
    ActiveWindow.ScrollColumn = 9
    ActiveWindow.ScrollColumn = 10
    ActiveWindow.ScrollColumn = 11
    ActiveWindow.ScrollColumn = 12
    ActiveWindow.ScrollColumn = 13
    ActiveWindow.ScrollColumn = 14
    ActiveWindow.ScrollColumn = 15
    ActiveWindow.ScrollColumn = 16
    ActiveWindow.ScrollColumn = 17
    ActiveWindow.ScrollColumn = 18
    ActiveWindow.ScrollColumn = 19
    ActiveWindow.ScrollColumn = 20
    ActiveWindow.ScrollColumn = 21
    ActiveWindow.ScrollColumn = 22
    Range("AB1").Select
    ActiveSheet.Range("$A$1:$AN$1229").AutoFilter Field:=28, Criteria1:="\N"
    ActiveWindow.SmallScroll Down:=-21
    Rows("46:46").Select
    Range("V46").Activate
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWindow.SmallScroll Down:=9
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlUp)).Select
    ActiveWindow.SmallScroll Down:=-21
    Selection.Delete Shift:=xlUp
    ActiveWindow.SmallScroll Down:=-18
    ActiveSheet.Range("$A$1:$AN$1103").AutoFilter Field:=28
    ActiveWindow.SmallScroll Down:=-21
    Range("AD1").Select
    ActiveSheet.Range("$A$1:$AN$1103").AutoFilter Field:=30, Criteria1:="1"
    ActiveWindow.SmallScroll Down:=-24
    Rows("2:2").Select
    Range("V2").Activate
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWindow.SmallScroll Down:=6
    Selection.Delete Shift:=xlUp
    ActiveSheet.Range("$A$1:$AN$238").AutoFilter Field:=30
    Range("A1").Select
End Sub

ほら、GPT先生もこのように仰っています。

まぁ、つまり無駄が多いってことですね(笑) ありがとうございます。

全っっっ然うまく伝えられない!!!

やはり私では無理なので、GPT先生に頼ることにします。
できるだけ簡潔に、誤解のないように、順を追って説明をする必要があるようなので画像のようにお願いしてみました。

VBAのコードは書いてくれたものの、実行してみるとうまく動きません…。
意図しないところに列が挿入されていたり、置換してほしい列がずれていたり…。
エラーが出ている部分もあったので、「~~でエラーが出ています。修正してください」と何度かお願いしてみましたが、思ったような結果は得られず…。

本当は、GPT先生にコード書いてもらって、不具合あるところも修正してもらってパパッと完成!!
を思い描いていましたが、今の私には少し難しそう。
なので、確実に完成させるために1行ずつ私自身が意味を理解しながら進める方向に切り替えることにしました。

先生、一行ずつ教えてもらえますか…?

どこで何が起きているのかわからないので、1つずつ確認していきます。
VBAのエディタにコードを一行ずつ足していって実行を繰り返して自分のやりたいこととズレている部分を確認。
image.png
画像のように一つずつ意味ややりたいことを聞いたり伝えたりして、少しずつ進んでいきます。
対話型なので本当に先生に教えてもらっているような気分でした^^
何回質問しても、物分かりが悪くても、相手が気分を悪くする心配がないので心おきなく質問攻めにできました(笑)
地道な作業で、嫌になるかと思いましたがVBAのコードを勉強できているのでワクワク。
繰り返すうちに、ここはこういう意味では?これはこうすればうまくいくのでは?とわかってきて楽しく作業できました!

完成したコードがこちら!

本当ならもっとスマートなコードができるのかもしれませんが…今の私の精一杯です^^;

↓不要行削除のコード↓

vba
Sub データ編集マクロ()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    
    ' 元データ (3) シートを指定
    Set ws = ThisWorkbook.Worksheets("元データ (3)")
    
    ' 最終行を取得
    lastRow = ws.Cells(ws.Rows.Count, "R").End(xlUp).Row
    
    ' R列の後ろに1列挿入
    ws.Columns("S:S").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    
    ' 挿入した列の書式をyyyy/mm/ddに変更
    ws.Columns("S:S").NumberFormatLocal = "yyyy/mm/dd"
    
    ' 挿入した列にLEFT関数の式を入力して値貼り
    ws.Range("S2:S" & lastRow).FormulaR1C1 = "=LEFT(RC[1], 10)"
    ws.Range("S2:S" & lastRow).Value = ws.Range("S2:S" & lastRow).Value
    
    ' 挿入した列の値にフィルターを設定
    ws.Range("$A$1:$S$" & lastRow).AutoFilter Field:=19, Criteria1:="<2023/03/01"
    
    ' 表示された行を削除
    ws.UsedRange.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
       
    ' すべてのデータを選択してフィルターを解除
    ws.ShowAllData
    
     ' S列を削除
    ws.Columns("S:S").Delete
    
    ' AB列にフィルターをかけて特定のテキストを持つ行を削除
    ws.Range("$A$1:$S$" & lastRow).AutoFilter Field:=28, Criteria1:="=*N*"
    ws.UsedRange.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        
    ' すべてのデータを選択してフィルターを解除
    ws.ShowAllData
    
     ' AD列にフィルターをかけて特定の値を持つ行を削除
    ws.Range("$A$1:$S$" & lastRow).AutoFilter Field:=30, Criteria1:="1"
    ws.UsedRange.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        
    ' すべてのデータを選択してフィルターを解除
    ws.ShowAllData
     
     ' Z列にフィルターをかけて特定の値を持つ行を削除
    ws.Range("$A$1:$S$" & lastRow).AutoFilter Field:=26, Criteria1:="1"
    ws.UsedRange.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        
    ' すべてのデータを選択してフィルターを解除
    ws.ShowAllData
    
End Sub

↓不要列削除のコード↓

vba
Sub 不要列の削除()
   Dim ws As Worksheet
    Dim lastCol As Long
    Dim colIndex As Long
    
    ' 元データ (3) シートを指定
    Set ws = ThisWorkbook.Worksheets("元データ (3)")
    
    ' 最終列を取得
    lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
    
    ' 列削除
    For colIndex = lastCol To 1 Step -1
        Select Case ws.Cells(1, colIndex).Value
            Case "店code", "店名", "グループ名", "応援者ID", "応援開始日(実績)", _
                 "応援依頼出した取引先", "実際に来た取引先", "応援者名", "支払フラグ"
                ' 指定した列を残す
            Case Else
                ws.Columns(colIndex).Delete
        End Select
    Next colIndex
End Sub

このコードをVBAのエディタに貼り付けます。
image.png
image.png
マクロの実行にはボタンを使ってみました!
image.png
これで秒で毎月の編集作業が完了するようになりました!
(まだまだ、その先の編集もマクロにしていく予定です^^ まずは第一歩!)

「無理!」を「できるかも?」にしてくれた素敵ツール。

VBAの勉強を一度諦めていた私にマクロを作るなんて無理!と思っていましたが、ChatGPTの力を借りることで実現することができました^^
ただ、知識がなさすぎるが故、「こうしてほしい!」とお願いすることがとても難しいと感じました。
意図した内容を誤解のないように正しく伝えることができなければ、望んだレスポンスは返ってきません…。
今回記事にしたVBAコードの作成については、会話しながらそれを探るのも楽しい作業でしたが、先にWebアプリを作成しようとChatGPTにコードを書いてもらったときはエラーが出ていても修正が全くうまくいかずやり取りが堂々巡りになって諦めてしまいました💦
ただただ私の知識不足で指示をしっかり出せていなかったのだと思うので、懲りずにチャレンジを続けていきたいと思います!

こんな素敵な記事があったのですね!もっと調べなきゃいけなかった!!反省!!!

今回はこちらの記事を参考にさせていただきました。
ありがとうございます!

Power Automate DesktopChatGPTでVBA使うならどっち?

当初の想定では「ChatGPTでサクッとできた~♪」の予定だったのが、意外と苦戦してしまった今回。
じゃぁ、Power Automate Desktopでフロー作るのと同じことじゃないの…?コードなんて勉強しなくても作れてしまいますもんね…。
マクロの利点は 「誰でも使用できること」 だと考えています。Power Automate Desktopをダウンロードしているか否かというような環境によって左右されることはありません。現在の私のChatGPT使用スキルではすぐに色々なコードを作成してバンバン時短していきます!!とはできませんが、少しずつでも使用スキルを上げて業務に活用できるようになればと考えています

ここまでお付き合いいただきありがとうございました!

6
3
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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?