Site cover image

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

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

Post title iconNotion AI × VBA コードがスラスラ読める!?改善もできちゃう!コードリーディングの方法をご紹介

Featured image of the post

1️⃣ はじめに

  • 今回は、正式にリリースされたNotionAIを使用して、コードリーディングの方法をご紹介していきます。
  • Notion AIを使うことで、VBAの処理内容ごとにコードが分割され、見出しがついて、説明文を記述することが出来ます。
  • 後半ではNotion AIのコード改善の指示にしたがってピボットテーブル・ピボットグラフを自動生成するコードを追加していきます。
  • それでは早速、生成方法を動画で確認していきましょう!

そもそもNotion AIって?
📖
プロジェクト管理やタスク管理、ノート作成、データベース作成などの機能を提供するアプリケーション「Notion」に組み込まれた人工知能(AI)機能のことです。

2️⃣ Notion AIの利用方法について

  • Notion は個人利用の場合、無料で利用できます。

  • Notionそのものは個人利用の場合無料ですが、 Notion AIを利用する場合は、月額$10のサブスクリプションサービスの契約が必要です。
Image in a image block

  • Notionの入力画面でスペースを入力することでNotion AIへの指示が可能です。
Image in a image block

3️⃣ Notion AIによるコードリーディングの方法

  • 今回は、前回ChatGPTで作成したダミーデータを作成するVBAコードのコードリーディングを行います。
Image in a image block

  • ダミーデータ作成の方法についてはこちらの記事をご覧ください。

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

  • まずはVBAコードをコードブロックとしてNotionに貼り付けます。
Image in a image block

  • /コマンドを使用して/codeと入力するコードブロックの入力が可能です。
Image in a image block

  • コードブロックにコードを貼り付けます。
Image in a image block

  • コードブロックの続きにNotion AIの指示文を記述します。
🪄
「上記のコードを上から順番に細かく説明してください。
・処理内容ごとに見出しをつけてください
・処理内容ごとにコードブロックを作成してください
・処理内容ごとに説明してください」
Image in a image block

  • コードが生成されていきます。
Image in a image block

  • 以下のように処理内容ごとにコードが分割され、見出しがついて、処理の内容の説明文が記述されました。
マスターデータの定義
Image in a image block
行数の入力
Image in a image block
ヘッダー行の作成
Image in a image block
ランダムな日付の範囲を指定
Image in a image block
データ行の生成
Image in a image block
Image in a image block
処理の終了
Image in a image block

  • Notion AIではページに対してさらに指示文を追加することが可能です。
🪄
「・プログラムの内容を説明してください。
 ・プログラムの実行方法を説明してください。
 ・プログラムの改善点を教えてください。」
Image in a image block

  • プログラムの全体内容、実行方法、改善点が記述されました。
Image in a image block

  • プログラムの改善点に従って、ピボットテーブルの集計、グラフ化を自動化するVBAコードを記述します。
🪄
上記のコードにピボットテーブル化、グラフ化するコードを追加して記述してください。
Image in a image block

  • 改善後のVBAコードが生成されました。
Image in a image block

4️⃣ 改善後のVBAコードを実行

  • このコードを実行することで、売上データをピボットテーブル化し、グラフ化することができます。
Image in a image block

  • VBEに貼り付けてF5キーで実行します。
Image in a image block

  • 売上表データピボットテーブルピボットグラフが生成されました。
Image in a image block
Image in a image block
Image in a image block
  • 以上でNotion AIによるVBAコードの改善が完了しました。

Notion AIによる改善後の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

    ' ピボットテーブルを作成
    Dim rangeData As Range
    Set rangeData = Sheets("Sheet1").Range("A1").CurrentRegion
    Dim pivotSheet As Worksheet
    Set pivotSheet = ThisWorkbook.Sheets.Add
    pivotSheet.Name = "売上集計"
    Dim pivotTable As pivotTable
    Set pivotTable = pivotSheet.PivotTables.Add(PivotCache:=ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rangeData), TableDestination:=pivotSheet.Range("A3"), TableName:="売上集計")
    pivotTable.PivotFields("商品部門").Orientation = xlRowField
    pivotTable.PivotFields("商品部門").Position = 1
    pivotTable.PivotFields("商品名").Orientation = xlRowField
    pivotTable.PivotFields("商品名").Position = 2
    pivotTable.PivotFields("日付").Orientation = xlColumnField
    pivotTable.PivotFields("日付").Position = 1
    pivotTable.AddDataField pivotTable.PivotFields("売上金額"), "売上金額の合計", xlSum


    ' ピボットテーブルからグラフを作成
    Dim chartSheet As Worksheet
    Set chartSheet = ThisWorkbook.Sheets.Add
    chartSheet.Name = "売上グラフ"
    Dim chartObj As ChartObject
    Set chartObj = chartSheet.ChartObjects.Add(0, 0, 500, 300)
    chartObj.Chart.SetSourceData Source:=pivotTable.TableRange1
    chartObj.Chart.ChartType = xlColumnClustered
    chartObj.Chart.HasTitle = True
    chartObj.Chart.ChartTitle.Text = "商品部門別の売上"
    chartObj.Chart.HasLegend = False
End Sub

5️⃣ さいごに

  • 最後までご覧いただきありがとうございました!
  • Notion AIでは、VBAコードの生成だけでなく、コードリーディングの際の理解の手助けやコードの改善にも活用することが出来ます!
  • この動画がためになった、参考になったという方はぜひチャンネル登録、Goodボタンを押していただけると今後の動画投稿の励みになります。
  • またTwitterでもVBA、Pythonに関するアウトプットをしていますので、フォローいただけますと幸いです。