📖
🔄 アップデート情報
2024年9月12日よりChatGPTの最新モデルとしてOpenAI o1の提供が開始されました!
- 高度な推論能力を持つように設計されており、特に科学、数学、コーディングの分野で優れたパフォーマンスを発揮します。
- 応答前に「思考時間」を取るよう訓練されており、複雑な問題に対してより深い分析が可能です。
o1-preview
とo1-mini
の2つのモデルがあります。主な違いを以下の表にまとめました。
特徴 | o1-preview | o1-mini |
---|---|---|
推論能力 | より高度 | o1-previewよりやや劣る |
処理速度 | 標準 | より高速 |
コスト | 高い | o1-previewの約80% |
週間利用制限 | 30メッセージ | 50メッセージ |
最大出力トークン数 | 32,768トークン | 65,536トークン |
主な用途 | 高度な技術開発、 研究プロジェクト | 小規模プロジェクト、 基本的な自動化タスク |
コーディング能力 | 非常に高い | o1-previewと同等 |
リソース消費 | 多い | 少ない(軽量) |
複雑なタスク処理 | 優れている | やや劣る |
🎙️
OpenAI o1とGPT-4oの出力精度の違いを漫才ネタで比較してみました!
VBAコードの実行方法について
- 本記事で紹介している動画にたくさんのコメント、ご質問をいただきました。ありがとうございます!
- ご質問の中にありました、VBAコードの実行方法について詳しくご説明いたします。
1. コードを入力するVBE(Visual Basic Editor)の画面を表示する方法
- まずはコードを入力するVBE(Visual Basic Editor)の画面を表示する方法をご紹介します。
- Excelのツールバーのメニューから「開発」タブを選び、「Visual Basic」をクリックします。
- もし開発タブが表示されていない場合は、リボンの上で右クリック、リボンのユーザー設定を選択します。
- リボンのユーザー設定が選択されていることが確認できたら、「開発」にチェックマークを入れてOKボタンをクリックします。
- また、ショートカットキーで起動することも可能です。Excelが開いている状態で、キーボードの
Alt + F11
を押すことで、直接VBEを起動することができます。
2. VBE(Visual Basic Editor)にコードを貼り付ける方法
- 次にコードの貼り付け方法をご紹介します。
- VBE画面の、左のプロジェクトウィンドウで現在開いているExcelファイルの「VBAProject (現在のファイル名)」を右クリックし、「挿入」→「標準モジュール」を選択します。
- キーボードショートカットで挿入する場合は
Alt ➜ I ➜ Mで挿入できます。
- 標準モジュールを削除する場合は削除するモジュールを選択し、右クリックからモジュールの解放を選択します。
- 「いいえ」を選択することでモジュールを削除することができます。
- 本記事でご紹介したChatGPTで作成したVBAコードを貼り付けます。
3. VBAコードの実行方法
- 最後にコードの実行方法をご紹介します。
- コードを貼り付けたら、エディタの上部にある「実行」ボタン(緑の再生ボタン)をクリックするか、F5キーを押して実行できます。
1️⃣ はじめに
- 今回は、ChatGPTのフラッグシップモデルとして2024/5/13より提供が開始されたGPT-4o(オムニ)を利用してスクショした画面からVBAコードを生成する方法を紹介していきます。
📖
GPT-4o(オムニ)とは?
OpenAIが開発した最新のマルチモーダルAIモデルです。
- テキスト、音声、画像、映像をシームレスに扱い、自然なテンポでのリアルタイム音声会話が可能になりました。特に、視覚と音声の理解力が際立ち、多言語対応や複雑な対話の要素を理解できるようになったと言われています。
- GPT-4oの「o」は「omni」を意味し、omniとは全て、あまねくという意味を含み、マルチモーダルとなった新たなGPTと、多言語に対応したことを指す意図が推測されます。
- さらに、既存モデルや競合モデルを上回る性能でありながら、制限はありますが、無料ユーザーも利用可能となっています。
- それでは早速、動画で作成方法を確認していきましょう!
2️⃣ GPT-4oの利用方法について
- GPT-4oは画面左上のプルダウンメニューから選択することが可能です。
3️⃣ スクリーンショットからVBAコードの作成
1. 列のピボット解除を行うVBAコードの生成
- まずはこちらのExcelファイルの列のピボット解除を行うVBAを作成します。
📖
列のピボット解除とは?
横持ちのデータを縦持ちのデータに変換する作業のことです。
横持ちのデータ : 行と列にそれぞれ異なる項目が配置され、データが横方向に蓄積されていきます。一般的に Excel などによくみられる形で、人が見るには視認性が高いですがデータ分析では扱いづらい形式です。
縦持ちのデータ : 列に配置された項目に対して、データが縦方向に蓄積されていきます。一般的にリレーショナルデータベース(RDB)の構築やデータ分析の処理は縦持ちのデータが適しているといわれます。
- 以前こちらの動画でも、スクリーンショットからVBAコードの生成を行いましたが、今回は画像認識の能力が強化されたGPT-4oを利用して、より手軽にVBAコードを生成する方法をご紹介します。
- こちらの記事でご紹介しています。
ChatGPTの最新モデルGPT-4Vが登場!ExcelシートのスクリーンショットからVBAコードを生成する方法をご紹介します!
- VBAで処理を自動化する際は、予め処理後の形式がわかっていることがほとんどかと思います。処理後のイメージがわかっていることが前提として、変更前と変更後のスクショを撮影しChatGPTで差分を分析し、コードを生成していきます。
graph TD; A[Excelシートのスクリーンショットを撮影] --> B[処理する前のスクリーンショット] A[Excelシートのスクリーンショットを撮影] --> C[処理した後のスクリーンショット] B --> D[ChatGPTに処理する前のスクショをアップロード] C --> E[ChatGPTに処理した後のスクショをアップロード] D --> F[変更内容を分析] E --> F[変更内容を分析] F --> G[VBAコードを生成] G --> H[生成されたVBAコードの実行]
- VBAで処理をしたい変更前のExcelデータをスクリーンショットで撮ります。
- 続いて、VBAで処理をしたい変更後のExcelデータをスクリーンショットで撮ります。
- 2枚のスクリーンショットをChatGPTにアップロードし、プロンプトを記述します。🪄プロンプトの内容
- 1枚目から2枚目の状態にするVBAコードを教えてください。
日本語でお願いいたします。
※何も指示しない場合、英語で出力されることが多いため日本語で出力する指示をしています。
- 1枚目から2枚目の状態にするVBAコードを教えてください。
- VBAコードが出力されました。
- VBEに貼り付けて、F5キーでコードを実行します。
- 列のピボット解除が完了しました。
列のピボット解除のVBAコード
Option Explicit
Sub ConvertDataFormat()
Dim wsSource As Worksheet
Dim wsDest As Worksheet
Dim lastRow As Long
Dim i As Long
Dim destRow As Long
' ソースシートとデスティネーションシートの設定
Set wsSource = ThisWorkbook.Sheets("修正前")
Set wsDest = ThisWorkbook.Sheets("修正後")
' デスティネーションシートの初期設定
wsDest.Cells.Clear
wsDest.Range("A1").Value = "社員"
wsDest.Range("B1").Value = "カテゴリ"
wsDest.Range("C1").Value = "値"
' 最終行の取得
lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
' データの変換
destRow = 2
For i = 2 To lastRow
wsDest.Cells(destRow, 1).Value = wsSource.Cells(i, 1).Value
wsDest.Cells(destRow, 2).Value = "データ分析"
wsDest.Cells(destRow, 3).Value = wsSource.Cells(i, 2).Value
destRow = destRow + 1
wsDest.Cells(destRow, 1).Value = wsSource.Cells(i, 1).Value
wsDest.Cells(destRow, 2).Value = "機械学習"
wsDest.Cells(destRow, 3).Value = wsSource.Cells(i, 3).Value
destRow = destRow + 1
wsDest.Cells(destRow, 1).Value = wsSource.Cells(i, 1).Value
wsDest.Cells(destRow, 2).Value = "ウェブ開発"
wsDest.Cells(destRow, 3).Value = wsSource.Cells(i, 4).Value
destRow = destRow + 1
wsDest.Cells(destRow, 1).Value = wsSource.Cells(i, 1).Value
wsDest.Cells(destRow, 2).Value = "データベース"
wsDest.Cells(destRow, 3).Value = wsSource.Cells(i, 5).Value
destRow = destRow + 1
wsDest.Cells(destRow, 1).Value = wsSource.Cells(i, 1).Value
wsDest.Cells(destRow, 2).Value = "システム設計"
wsDest.Cells(destRow, 3).Value = wsSource.Cells(i, 6).Value
destRow = destRow + 1
Next i
' 終了メッセージ
MsgBox "データの変換が完了しました。"
End Sub
2. 住所を分割するVBAコードの生成
- 続いてこちらの住所を表示されている通り各列の項目ごとに分割するVBAコードを作成します。
- まず、VBAで処理をしたい変更後のExcelデータをスクリーンショットで撮ります。
- 分割される前の状態にするため、B列以降のデータをクリアします。
- 次に、VBAで処理をしたい変更前のExcelデータをスクリーンショットで撮ります。
- 2枚のスクリーンショットをChatGPTにアップロードし、プロンプトを記述します。🪄プロンプトの内容
- 1枚目から2枚目の形式にする正規表現のVBAコードを教えてください。
日本語でお願いいたします。
📖正規表現とは?正規表現とは、文字列のパターンを表現するための記述方法です。正規表現を使用することで、文字列の検索や置換、抽出などを効率的に行うことができます。
※何も指示しない場合、英語で出力されることが多いため日本語で出力する指示をしています。
- 1枚目から2枚目の形式にする正規表現のVBAコードを教えてください。
- VBAコードが出力されました。
- VBEに貼り付けてシート名を変更します。
- F5キーでコードを実行します。
- 分割の処理が完了しました。
- 以上で、GPT-4oによるスクリーンショットの画面からVBAコード生成が完了しました。
住所を分割するVBAコード
Option Explicit
Sub SplitAddress()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim address As String
Dim pattern As String
Dim regEx As Object
Dim matches As Object
' 処理するシートを設定
Set ws = ThisWorkbook.Sheets("住所") ' シート名を適宜変更してください
' 最終行を取得
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' 正規表現パターンを設定
pattern = "^(.{2,3}都|.{2,3}道|.{2,3}府|.{2,3}県)(.{2,3}市|.{2,3}区|.{2,3}町|.{2,3}村)(.+)$"
' 正規表現オブジェクトを作成
Set regEx = CreateObject("VBScript.RegExp")
regEx.Global = False
regEx.IgnoreCase = False
regEx.Pattern = pattern
' 住所を分割してセルに書き込み
For i = 2 To lastRow
address = ws.Cells(i, 1).Value
If regEx.Test(address) Then
Set matches = regEx.Execute(address)
ws.Cells(i, 2).Value = matches(0).SubMatches(0) ' 都道府県
ws.Cells(i, 3).Value = matches(0).SubMatches(1) ' 市区町村
ws.Cells(i, 4).Value = matches(0).SubMatches(2) ' それ以降
End If
Next i
' メモリを解放
Set regEx = Nothing
Set matches = Nothing
End Sub
正規表現の参照設定についての補足
📎
以前公開したこちらの動画では、下記の手順でVBAで正規表現を利用するための設定を行いました。
- VBA エディタを開きます。
- [ツール] メニューをクリックし、[参照設定] を選択します。
- [参照設定] ダイアログボックスが表示されます。[参照] タブをクリックして、一覧から
"Microsoft VBScript Regular Expressions 5.5"
を選択します。 - ライブラリのチェックボックスをオンにして、[OK] ボタンをクリックします。
今回はCreateObject
を利用し参照設定を不要としています。
CreateObject
を使用する場合(今回のコード)
参照設定は不要です。
Set regEx = CreateObject("VBScript.RegExp")
- 参照設定をしない場合: 参照設定していないExcelブックでも利用可能ですが、開発中はコード補完が効かず、エラー検出が難しくなります。
Microsoft VBScript Regular Expressions 5.5
ライブラリを直接使用する場合
参照設定が必要です。
Set regEx = New RegExp
- 参照設定をする場合: エラー検出がしやすくなりますが、他の環境で使用する際に参照設定が必要で手間がかかります。
4️⃣ さいごに
- 最後までお読みいただきありがとうございます!
- この記事へのご質問やアドバイスがありましたら、ぜひコメントもお待ちしております。
- またX(Twitter)でもVBA、Pythonに関するアウトプットをしていますので、🔽フォローいただけますと幸いです😆