【初心者】チャットGPTを使ったExcelマクロの勉強について【実際にやってみた記録】

当ページのリンクには広告が含まれています

目次

はじめに

Excelのマクロは便利なツールですが、プログラムの勉強をしていない私のような素人にはなかなかハードルが高いです。

一度ちょっと勉強したことがあるのですが、挫折しました。

今流行りのチャットGPTを使えば、プログラミングの知識がなくてもマクロを活用できるということを聞いたので

色々と試行錯誤をしているところです。

この記事では非システム人材の私がチャットGPTを使ってExcelマクロを使うことができるのか、実際に試した結果をご紹介します。

さて、なにからはじめるか

いざ、マクロを練習しようと考えましたが何からやっていいかわかりません。なので、チャットGPTに聞いてみることにします。

こういう時に気軽に会話式で聞けるって便利だなー

いよいよ近未来感がでてきましたね。

チャットGPTに聞いてみた

うい(筆者)

チャットGPTを使ったマクロの練習をわかりやすく教えてください

ChatGPT

もちろんです!以下にチャットGPTを使ったマクロの練習方法をわかりやすく説明します。
マクロの目的を設定する: まずは、マクロで達成したい目的を明確にしましょう。具体的な作業やタスクを自動化することで効率化を図りたい場合、それを具体的に示します。
マクロの手順を考える: 次に、マクロを作成するための手順を考えましょう。どの操作を自動化したいのか、どのようなステップが必要なのかを順番に洗い出します。この段階では、まだ具体的なVBAコードは必要ありません。
マクロの作成を開始する: Excelの「開発」タブから「マクロ」を選択し、VBAエディタを開きます。新しいマクロを作成するために、適切なマクロ名を入力しましょう。
マクロの記録を開始する: VBAエディタでマクロが記録されるように設定し、実際の作業を行います。例えば、特定のセルの値を変更するなど、手順に沿って作業を進めましょう。
マクロの記録を停止する: 作業が完了したら、VBAエディタでマクロの記録を停止します。
マクロの修正と最適化: 記録したマクロをVBAエディタで開き、不要なコードを削除したり、必要な変更を加えたりします。必要に応じて、変数の追加や条件分岐の設定などを行いましょう。チャットGPTを使って、マクロの修正や最適化に関するアドバイスやヒントを得ることもできます。
マクロの実行と結果の確認: 修正が完了したら、マクロを実行して動作を確認しましょう。作業が自動化されていることを確認し、結果が期待通りであることを確認します。
繰り返し練習する: さまざまなマクロを作成して練習を続けましょう。新しい作業やタスクに挑戦したり、既存のマクロを改善したりすることで、スキルを向上させることができます。
チャットGPTを利用する: マクロ作成の過程で疑問や課題があれば、チャットGPTに質問を投げかけてみましょう。マクロの作成方法や修正方法、最適化のアイデアなど、さまざまな助言やヒントを得ることができます。
以上のステップに沿って、チャットGPTを使ってマクロの練習を行いましょう。自身の経験とチャットGPTのアドバイスを組み合わせることで、より効果的なマクロ作成が可能になります。継続的な練習と試行錯誤を通じて、マクロ作成のスキルを向上させていきましょう!

いや、長いって!

いきなり長文が返ってきてやる気をなくしました。

うい(筆者)

もう少し短くしてください

ChatGPT

チャットGPTを使ったマクロの練習方法を簡潔に説明します。
目的を設定する。
手順を考える。
マクロを記録する。
マクロを修正する。
マクロを実行して確認する。
チャットGPTを利用して質問や助言を得る。
この手順に従って、マクロの練習を行いましょう。

今度は短すぎるだろ。極端なやつですね。

我ながら我儘なお願いをしているのは重々承知ですが。

ともあれ、まずは目標を作ることですね。

マクロを記録するのはあまり使えない気がします。やりたくないですね。

練習用のデータを作ってもらう

いまのところ目標もなんもないので、まずは練習用のデータをチャットGPTにもらうことにします。

うい(筆者)

マクロの練習をしたいので1000件のデータを生成するマクロを教えてください

ChatGPT

マクロを使用して1,000件のデータを生成する例を以下に示します。この例では、名前と年齢の2つのフィールドを持つデータを生成します。
VBA
Copy code
Sub GenerateData() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") 'データを書き込むシートの名前を指定してください Dim i As Long Dim name As String Dim age As Integer 'ヘッダー行を書き込む ws.Range("A1").Value = "名前" ws.Range("B1").Value = "年齢" '1,000件のデータを生成して書き込む For i = 1 To 1000 name = "名前" & i age = Int((60 - 20 + 1) * Rnd + 20) '20歳から60歳の範囲でランダムな年齢を生成 ws.Range("A" & i + 1).Value = name ws.Range("B" & i + 1).Value = age Next i End Sub
このマクロを実行すると、指定したシートに1,000件のデータが生成されます。名前は「名前1」から「名前1000」までの連番で生成され、年齢は20から60歳の範囲でランダムに生成されます。

瞬時に出てきました。こやつ できる・・・!

うい(筆者)

名前は適当な日本人名を入れてください。性別もいれてください。

ChatGPT

了解です。以下は、ランダムに生成された日本人の名前と性別を含む1,000件のデータを生成するマクロの例です。
VBA
Copy code
Sub GenerateData() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") 'データを書き込むシートの名前を指定してください Dim i As Long Dim firstName As Variant Dim lastName As Variant Dim gender As String 'ヘッダー行を書き込む ws.Range("A1").Value = "名前" ws.Range("B1").Value = "性別" '日本人の名前リスト firstName = Array("佐藤", "鈴木", "高橋", "田中", "伊藤", "山本", "渡辺", "中村", "小林", "加藤", "吉田", "山田", "佐々木", "山口", "松本", "井上", "木村", "林", "斉藤", "清水") lastName = Array("大輔", "美咲", "悠太", "真理子", "健太", "佳奈子", "隆太郎", "さくら", "駿", "未来", "拓実", "夏美", "悠斗", "葵", "遥香", "大和", "まどか", "和也", "詩織", "翔太") '1,000件のデータを生成して書き込む For i = 1 To 1000 firstNameIndex = Int((UBound(firstName) - LBound(firstName) + 1) * Rnd + LBound(firstName)) lastNameIndex = Int((UBound(lastName) - LBound(lastName) + 1) * Rnd + LBound(lastName)) gender = IIf(Rnd < 0.5, "男性", "女性") ws.Range("A" & i + 1).Value = firstName(firstNameIndex) & " " & lastName(lastNameIndex) ws.Range("B" & i + 1).Value = gender Next i End Sub
このマクロを実行すると、指定したシートに1,000件のデータが生成されます。名前はランダムに組み合わせられた日本人の名字と名前で生成され、性別はランダムに「男性」または「女性」が割り当てられます。

うい(筆者)

年齢もお願いします

ChatGPT

申し訳ありません、年齢も追加いたします。以下に修正版のマクロを示します。
VBA
Copy code
Sub GenerateData() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") 'データを書き込むシートの名前を指定してください Dim i As Long Dim firstName As Variant Dim lastName As Variant Dim gender As String Dim age As Integer 'ヘッダー行を書き込む ws.Range("A1").Value = "名前" ws.Range("B1").Value = "性別" ws.Range("C1").Value = "年齢" '日本人の名前リスト firstName = Array("佐藤", "鈴木", "高橋", "田中", "伊藤", "山本", "渡辺", "中村", "小林", "加藤", "吉田", "山田", "佐々木", "山口", "松本", "井上", "木村", "林", "斉藤", "清水") lastName = Array("大輔", "美咲", "悠太", "真理子", "健太", "佳奈子", "隆太郎", "さくら", "駿", "未来", "拓実", "夏美", "悠斗", "葵", "遥香", "大和", "まどか", "和也", "詩織", "翔太") '1,000件のデータを生成して書き込む For i = 1 To 1000 firstNameIndex = Int((UBound(firstName) - LBound(firstName) + 1) * Rnd + LBound(firstName)) lastNameIndex = Int((UBound(lastName) - LBound(lastName) + 1) * Rnd + LBound(lastName)) gender = IIf(Rnd < 0.5, "男性", "女性") age = Int((60 - 20 + 1) * Rnd + 20) '20歳から60歳の範囲でランダムな年齢を生成 ws.Range("A" & i + 1).Value = firstName(firstNameIndex) & " " & lastName(lastNameIndex) ws.Range("B" & i + 1).Value = gender ws.Range("C" & i + 1).Value = age Next i End Sub
修正後のマクロでは、新たに「年齢」のフィールドを追加し、20歳から60歳の範囲でランダムな年齢が生成されるようになります。

実行したマクロがこれです↓ 実際は1000行あります。

ダミーデータがあっという間に1000件できました。魔法かよ!!

ダミーデータができたので、思い付きでマクロを作っていきたいと思います。

マクロ作成

ランダムでチーム分けしてみたいと思います。

うい(筆者)

A列に名前、B列に性別、C列に年齢が入力されているExcelのシートがあります。これを100チームにランダムに分けるマクロを作成してください。同じ性別のみのチームができないようにお願いします。

ChatGPT

了解しました。以下は、指定された条件に基づいてExcelシートのデータを100チームにランダムに分けるマクロの例です。
VBA
Copy code
Sub CreateTeams() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") 'データが入力されているシート名を指定してください Dim lastRow As Long lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 'データの最終行を取得 Dim nameRange As Range Dim genderRange As Range Dim ageRange As Range Set nameRange = ws.Range("A2:A" & lastRow) '名前の範囲 Set genderRange = ws.Range("B2:B" & lastRow) '性別の範囲 Set ageRange = ws.Range("C2:C" & lastRow) '年齢の範囲 Dim teamNames() As String teamNames = GetTeamNames(100) 'チーム名のリスト(100チーム分) Dim teamCounts() As Variant ReDim teamCounts(LBound(teamNames) To UBound(teamNames)) '各チームの人数をカウントする配列 Dim i As Long Dim name As String Dim gender As String Dim age As Integer Dim teamIndex As Integer 'データをランダムにチームに分ける For i = 1 To lastRow - 1 name = nameRange.Cells(i).Value gender = genderRange.Cells(i).Value age = ageRange.Cells(i).Value '同じ性別のチームができないように分配する If gender = "男性" Then teamIndex = GetAvailableTeamIndex(teamNames, teamCounts, "男性") Else teamIndex = GetAvailableTeamIndex(teamNames, teamCounts, "女性") End If 'チームに割り当てる ws.Range("D" & i + 1).Value = teamNames(teamIndex) '各チームの人数をカウントする teamCounts(teamIndex) = teamCounts(teamIndex) + 1 Next i End Sub Function GetTeamNames(numTeams As Integer) As String() Dim teamNames() As String ReDim teamNames(1 To numTeams) Dim i As Integer For i = 1 To numTeams teamNames(i) = "チーム" & i Next i GetTeamNames = teamNames End Function Function GetAvailableTeamIndex(teamNames() As String, teamCounts() As Variant, gender As String) As Integer Dim availableTeams() As Integer Dim availableIndex As Integer Dim teamIndex As Integer Dim count As Integer availableIndex = 0 '同じ性別のチームを検索 For teamIndex = LBound(teamNames) To UBound(teamNames) If teamCounts(teamIndex) = 0 Then availableIndex = availableIndex + 1 ReDim Preserve availableTeams(1 To availableIndex) availableTeams(availableIndex) = teamIndex ElseIf gender = "男性" And Right(teamNames(teamIndex), 1) <> "男" Then availableIndex = availableIndex + 1 ReDim Preserve availableTeams(1 To availableIndex) availableTeams(availableIndex) = teamIndex ElseIf gender = "女性" And Right(teamNames(teamIndex), 1) <> "女" Then availableIndex = availableIndex + 1 ReDim Preserve availableTeams(1 To availableIndex) availableTeams(availableIndex) = teamIndex End If Next teamIndex '利用可能なチームからランダムに選択 If availableIndex > 0 Then GetAvailableTeamIndex = availableTeams(Int((availableIndex - 1 + 1) * Rnd + 1)) Else '利用可能なチームがない場合はランダムに選択 GetAvailableTeamIndex = Int((UBound(teamNames) - LBound(teamNames) + 1) * Rnd + LBound(teamNames)) End If End Function
このマクロでは、ExcelシートのデータがA列に名前、B列に性別、C列に年齢として入力されていることを前提としています。D列にはマクロによって割り当てられたチーム名が記録されます。
同じ性別のチームができないように分配されます。男性の場合は「男」で終わるチーム名、女性の場合は「女」で終わるチーム名のいずれかに割り当てられます。もし利用可能なチームがない場合はランダムに選択されます。
上記のマクロを実行すると、Excelシートのデータがランダムに100チームに分けられます。
なお、このマクロではチーム名を自動的に生成していますが、必要に応じてチーム名のリストを手動で作成して配列teamNamesに代入することも可能です。
ご質問やお困りごとがありましたら、遠慮なくお知らせください。お手伝いできる範囲でお答えします。

速い!

早速実行した結果が↓です

いや、便利すぎるだろChatGPT。

実はたまにコードが間違えてるときがありますが、その時は違う箇所を明示すると修正版を教えてくれます。

複雑な条件だと結構トライ&エラーが必要のようです。

マクロ作成はAIが主流になる予感

ここまで便利だとマクロを勉強する気が失せます。

ChatGPTを使いこなす練習をした方が効率的に感じますね。

今後もいろいろトライしてみます。すごいぜChatGPT!

この記事を書いた人

ういのアバター うい 一般人

ご覧いただきありがとうございます!
●趣味 漫画 音楽 左党 辛い物 筋トレ 野球
●音楽:Nujabes Creepy Nuts THE HIGH LOWS Sundae May club the dadadadys マキシマムザホルモン 中島みゆき
●漫画:喧嘩稼業 アフロ田中 おおきく振りかぶって アンダーニンジャ ラーメン再遊記 ハイスコアガール ドロヘドロ
●経理歴15年●商社勤務
●資格:簿記論、財務諸表論、簿記1級、AFP、TOEIC750、ビジ法2級

目次