Site cover image

Site icon imageExcelおさるくんのastro-notion-blog

VBA / Python / Notion / AIによる業務効率化とデータサイエンスに関する情報を発信しています!

Post title iconChatGPTで売上表を量産するVBAコードを作成!10,000行のダミーの売上表データを生成するテクニックをご紹介!

Featured image of the post

🔄 アップデート情報

2024年9月12日よりChatGPTの最新モデルとしてOpenAI o1の提供が開始されました!
  • 高度な推論能力を持つように設計されており、特に科学、数学、コーディングの分野で優れたパフォーマンスを発揮します。
  • 応答前に「思考時間」を取るよう訓練されており、複雑な問題に対してより深い分析が可能です。
  • o1-previewo1-miniの2つのモデルがあります。主な違いを以下の表にまとめました。
特徴o1-previewo1-mini
推論能力より高度o1-previewよりやや劣る
処理速度標準より高速
コスト高いo1-previewの約80%
週間利用制限30メッセージ50メッセージ
最大出力トークン数32,768トークン65,536トークン
主な用途高度な技術開発、
研究プロジェクト
小規模プロジェクト、
基本的な自動化タスク
コーディング能力非常に高いo1-previewと同等
リソース消費多い少ない(軽量)
複雑なタスク処理優れているやや劣る
Image in a image block
🎙️
OpenAI o1とGPT-4oの出力精度の違いを漫才ネタで比較してみました!

Post title icon in a page linkArrow icon of a page linkChatGPTの最新モデルOpenAI o1で漫才ネタを作ってみた!

2024年5月13日よりChatGPTのGPT-4oモデルの提供が開始されました!
  • GPT-4o(オムニ)ではテキスト、音声、画像、映像をシームレスに扱い、自然なテンポでのリアルタイム音声会話が可能になりました。
  • 特に、視覚と音声の理解力が際立ち、多言語対応や複雑な対話の要素を理解できるようになったと言われています。
  • さらに、既存モデルや競合モデルを上回る性能でありながら、制限はありますが、無料ユーザーも利用可能となっています。
Image in a image block

2024年4月1日よりChatGPTがログイン不要で利用できるようになりました!
  • 「まずはお試しください」をクリックすると利用できます。
Image in a image block
Image in a image block
  • 米OpenAIは4月1日、ログインやアカウント作成なしでもChatGPTが利用可能になったと発表しました。
  • これまでは、ChatGPTの利用にはアカウント作成が必須でしたが、今回の更新でアカウントを作成せずにChatGPTを試せるようになりました。ただし、モデルはGPT3.5、過去のチャット履歴の保存や確認、チャットの共有、音声対話やカスタム指示などの追加機能は利用できないようです。
  • 早速試してみましたが、GPT3.5モデルでも十分な精度だと感じました!
試しにマクロの記録をリファクタリングしてみました!
Image in a image block
Image in a image block
Image in a image block

ご質問の中にありました、VBAコードの実行方法について詳しくご説明いたします。
Image in a image block
1. コードを入力するVBE(Visual Basic Editor)の画面を表示する方法
  • まずはコードを入力するVBE(Visual Basic Editor)の画面を表示する方法をご紹介します。
    Image in a image block

  • Excelのツールバーのメニューから「開発」タブを選び、「Visual Basic」をクリックします。
    Image in a image block

  • もし開発タブが表示されていない場合は、リボンの上で右クリック、リボンのユーザー設定を選択します。
    Image in a image block

  • リボンのユーザー設定が選択されていることが確認できたら、「開発」にチェックマークを入れてOKボタンをクリックします。
    Image in a image block

  • また、ショートカットキーで起動することも可能です。Excelが開いている状態で、キーボードのAlt + F11を押すことで、直接VBEを起動することができます。
    Image in a image block
    Image in a image block

2. VBE(Visual Basic Editor)にコードを貼り付ける方法
  • 次にコードの貼り付け方法をご紹介します。
    Image in a image block

  • VBE画面の、左のプロジェクトウィンドウで現在開いているExcelファイルの「VBAProject (現在のファイル名)」を右クリックし、「挿入」→「標準モジュール」を選択します。
    Image in a image block
    Image in a image block

  • キーボードショートカットで挿入する場合はAlt ➜ I ➜ Mで挿入できます。
    Image in a image block

  • 標準モジュールを削除する場合は削除するモジュールを選択し、右クリックからモジュールの解放を選択します。
    Image in a image block
    Image in a image block

  • 「いいえ」を選択することでモジュールを削除することができます。
    Image in a image block

  • 本記事でご紹介したChatGPTで作成したVBAコードを貼り付けます。
    Image in a image block

3. VBAコードの実行方法
  • 最後にコードの実行方法をご紹介します。
    Image in a image block

  • コードを貼り付けたら、エディタの上部にある「実行」ボタン(緑の再生ボタン)をクリックするか、F5キーを押して実行できます。
    Image in a image block

1️⃣ はじめに

  • 今回は、ChatGPTで生成したマスタデータをもとにして、ダミーデータを生成可能なVBAコードを作成していきます。
  • ChatGPTを使えば簡単にダミーデータを生成することも可能ですが、出力可能な文字数に制限があるため、VBAと組み合わせることでダミーデータを量産できるようにします!
  • それでは早速、動画で生成方法を確認していきましょう!

2️⃣ 10,000行の売上表の生成

  • まずはベースとなるマスタデータを生成していきます。
🪄
「6列10行のマスタデータを作成してください。列の構成はNo.、企業名、商品部門、商品コード、商品名、単価です。」
Image in a image block

  • 企業名の列株式会社A、株式会社B…となってしまったため、修正していきます。
🪄
「企業名は日本によくある名字を使用した架空のものを生成するようにしてください」
Image in a image block

  • 作成したマスタデータをベースに日付、数量をランダムとして、任意の行数出力可能VBAコードを生成していきます。
🪄
「上記のマスタデータをもとに任意の行数量産可能な売上表を作成するVBAコードを生成してください。
  • マスタデータの配列をVBA内で定義してください。
  • 任意の行数を入力可能なインプットボックスを用意してください。
  • 列の構成は日付、企業名、商品部門、商品コード、商品名、単価、数量、売上金額です。
  • 日付はyyyy/mm/dd形式で2023年のランダムな日付を生成するようにしてください。
  • integer型は使わずにlong型としてください。
Image in a image block

  • コードが生成されていきます。もし途中でコードの生成が途切れてしまった場合は、「コードの続きを書いてください」と入力します。
🪄
「コードの続きを書いてください」
Image in a image block

  • 売上表データを生成するVBAコードが生成されましたら、こちらをVBEに貼り付けてマクロの動きを確認していきます。
Image in a image block

  • VBEはExcelの画面でAlt + F11と入力すると起動できます。
Image in a image block

3️⃣ VBAコードの実行

  • F5キーでVBAを実行します。InputBoxが表示され、任意の行数を入力します。
Image in a image block

  • 10,000行の売上表が生成されました。
Image in a image block
Image in a image block

4️⃣ 生成されたVBAコード

Option Explicit

Sub GenerateSalesData()
    ' マスターデータの配列を定義
    Dim masterData As Variant
    masterData = Array(Array(1, "佐藤商事", "食品", "F001", "チョコレート", 150), _
                       Array(2, "田中電機", "家電", "E022", "スマートフォン", 80000), _
                       Array(3, "山田化粧品", "化粧品", "C003", "リップスティック", 2000), _
                       Array(4, "加藤衣料品", "衣料品", "A010", "ファッションTシャツ", 500), _
                       Array(5, "伊藤エンターテイメント", "エンターテイメント", "M007", "映画「スパイダーマン」", 1800), _
                       Array(6, "木村日用品", "日用品", "H031", "バスタオル", 1200), _
                       Array(7, "渡辺薬品", "医薬品", "P005", "風邪薬", 800), _
                       Array(8, "小林スポーツ用品", "スポーツ用品", "S019", "バスケットボール", 2500), _
                       Array(9, "鈴木書店", "書籍", "B006", "小説「夏目漱石」", 1200), _
                       Array(10, "高橋家具", "家具", "F055", "ベッド", 35000))
    
    ' 行数を取得
    Dim numRows As Long
    numRows = InputBox("何行の売上表を生成しますか?", "行数の入力")
    
    ' ヘッダー行を作成
    Range("A1").Value = "日付"
    Range("B1").Value = "企業名"
    Range("C1").Value = "商品部門"
    Range("D1").Value = "商品コード"
    Range("E1").Value = "商品名"
    Range("F1").Value = "単価"
    Range("G1").Value = "数量"
    Range("H1").Value = "売上金額"
    
    ' ランダムな日付の範囲を指定
    Dim startDate As Date
    startDate = DateSerial(2023, 1, 1)
    Dim endDate As Date
    endDate = DateSerial(2023, 12, 31)
    
    ' データ行を生成
    Dim i As Long
    For i = 1 To numRows
        ' ランダムな日付を生成
        Dim randomDate As Date
        randomDate = Int((endDate - startDate + 1) * Rnd + startDate)
        
        ' 企業名、商品部門、商品コード、商品名、単価をランダムに選択
        Dim randomIndex As Long
        randomIndex = Int((UBound(masterData) - LBound(masterData) + 1) * Rnd + LBound(masterData))
        Dim company As String
        company = masterData(randomIndex)(1)
        Dim department As String
        department = masterData(randomIndex)(2)
        Dim productCode As String
        productCode = masterData(randomIndex)(3)
        Dim productName As String
        productName = masterData(randomIndex)(4)
        Dim unitPrice As Long
        unitPrice = masterData(randomIndex)(5)
        
        ' 数量をランダムに生成
        Dim quantity As Long
        quantity = Int((10 - 1 + 1) * Rnd + 1)
        
        ' 売上金額を計算
        Dim salesAmount As Long
        salesAmount = unitPrice * quantity
        
        ' データを出力
        Range("A" & i + 1).Value = Format(randomDate, "yyyy/mm/dd")
        Range("B" & i + 1).Value = company
        Range("C" & i + 1).Value = department
        Range("D" & i + 1).Value = productCode
        Range("E" & i + 1).Value = productName
        Range("F" & i + 1).Value = unitPrice
        Range("G" & i + 1).Value = quantity
        Range("H" & i + 1).Value = salesAmount
    Next i
    
End Sub

5️⃣ さいごに

  • 最後までご覧いただきありがとうございました!
  • ベースとなるマスタデータの行数、列数、項目などをカスタマイズしていただければ、さまざまなダミーデータが生成できますので、ぜひプログラミング学習にお役立てください!
  • この動画がためになった、参考になったという方はぜひチャンネル登録、Goodボタンを押していただけると今後の動画投稿の励みになります。
  • またTwitterでもVBA、Pythonに関するアウトプットをしていますので、概要欄からフォローいただけますと幸いです。