第9小惑星保管施設
各AI生成比較
最終更新:
9metisailog
-
view
簡単な条件のVBAを作ってもらった
質問
次の条件を満たすエクセルのVBAは作れる?
- 定数で指定したシートの、定数で指定したセルから文字列を取得し、メッセージボックスに表示
ChatGPTの回答
Claudeの回答
Copilotの回答
DeepSeekの回答
Geminiの回答
Grokの回答
Manusの回答
Perplexityの回答
Notionの回答
まとめPerplexity版
各AI生成比較のまとめGrokのThink版(追記)
Claudeの回答
Copilotの回答
DeepSeekの回答
Geminiの回答
Grokの回答
Manusの回答
Perplexityの回答
Notionの回答
まとめPerplexity版
各AI生成比較のまとめGrokのThink版(追記)
ChatGPTの回答
はい、その条件を満たすExcel VBAは作成可能です。以下に、具体的なコードの例を示します。
### ✅ 条件
- **定数で指定したシート名**
- **定数で指定したセル番地**
- **そのセルの文字列を取得してメッセージボックスに表示**
### 💻 VBAコード例
Sub ShowCellValue()
Const SHEET_NAME As String = "Sheet1" ' ←シート名を定数で指定
Const CELL_ADDRESS As String = "A1" ' ←セル番地を定数で指定
Dim ws As Worksheet
Dim cellValue As String
' シートが存在するか確認
On Error Resume Next
Set ws = ThisWorkbook.Sheets(SHEET_NAME)
On Error GoTo 0
If ws Is Nothing Then
MsgBox "指定されたシートが存在しません: " & SHEET_NAME, vbCritical
Exit Sub
End If
' セルの値を取得して表示
cellValue = ws.Range(CELL_ADDRESS).Value
MsgBox "セルの値は: " & cellValue, vbInformation
End Sub
### 📌 使用方法
1. Excelを開く。
2. `Alt + F11` でVBAエディタを起動。
3. `挿入` → `標準モジュール` を選択。
4. 上記コードを貼り付け。
5. `F5`で実行、またはExcelからマクロを実行。
2. `Alt + F11` でVBAエディタを起動。
3. `挿入` → `標準モジュール` を選択。
4. 上記コードを貼り付け。
5. `F5`で実行、またはExcelからマクロを実行。
ご希望があれば以下も対応できます:
- セルが空だった場合の処理追加
- ワークブック間での操作
- 値の種類に応じた処理(数値、日付など)
必要なら教えてください!
Claudeの回答
Sub DisplayCellValue()
' 定数の定義
Const SHEET_NAME As String = "Sheet1" ' 取得したいシート名
Const CELL_ADDRESS As String = "A1" ' 取得したいセルのアドレス
' 変数の宣言
Dim ws As Worksheet
Dim cellValue As String
' エラーハンドリング
On Error GoTo ErrorHandler
' 指定したシートを取得
Set ws = ThisWorkbook.Worksheets(SHEET_NAME)
' 指定したセルから文字列を取得
cellValue = ws.Range(CELL_ADDRESS).Value
' 取得した値をメッセージボックスに表示
MsgBox "セル " & CELL_ADDRESS & " の値: " & cellValue, vbInformation, "セル値表示"
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical, "エラー"
End Sub
※会話文無し
ChatGPTの回答
はい、その条件を満たすExcel VBAは簡単に作成できます。
以下に、あなたの指定した要件に基づいたサンプルコードを示します。
以下に、あなたの指定した要件に基づいたサンプルコードを示します。
### ✅ 要件
- 定数で指定した**シート名**
- 定数で指定した**セル番地**
- そのセルの文字列を**メッセージボックスに表示**
### ✅ サンプルVBAコード
Sub ShowCellValue()
Const SHEET_NAME As String = "Sheet1" ' シート名をここで指定
Const CELL_ADDRESS As String = "A1" ' セル番地をここで指定
Dim ws As Worksheet
Dim cellValue As String
On Error GoTo ErrorHandler
' 指定されたシートを取得
Set ws = ThisWorkbook.Sheets(SHEET_NAME)
' セルの値を取得してメッセージボックスに表示
cellValue = ws.Range(CELL_ADDRESS).Value
MsgBox "セル " & CELL_ADDRESS & " の値は: " & cellValue, vbInformation
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました。シート名またはセル番地を確認してください。", vbCritical
End Sub
### 🔧 使用方法
1. Excelで「Alt + F11」でVBAエディタを開きます。
2. `挿入 > モジュール` で新しいモジュールを追加します。
3. 上記コードを貼り付けてください。
4. `F5`キーで実行、またはマクロから `ShowCellValue` を選んで実行。
2. `挿入 > モジュール` で新しいモジュールを追加します。
3. 上記コードを貼り付けてください。
4. `F5`キーで実行、またはマクロから `ShowCellValue` を選んで実行。
必要に応じて、シート名やセル番地を変えるだけで再利用可能です。
他にもやりたい処理があれば、気軽に追加要望をどうぞ!
他にもやりたい処理があれば、気軽に追加要望をどうぞ!
Copilotの回答
はい、可能です!以下のVBAコードで、定数で指定したシートとセルから文字列を取得し、メッセージボックスに表示できます。
Sub ShowCellValue()
Const SHEET_NAME As String = "Sheet1" ' 取得するシート名を指定
Const CELL_ADDRESS As String = "A1" ' 取得するセルのアドレスを指定
Dim ws As Worksheet
Dim cellValue As String
' 指定したシートをセット
Set ws = ThisWorkbook.Sheets(SHEET_NAME)
' 指定したセルの値を取得
cellValue = ws.Range(CELL_ADDRESS).Value
' メッセージボックスに表示
MsgBox "セルの値: " & cellValue, vbInformation, "情報"
End Sub
このコードでは、`SHEET_NAME` と `CELL_ADDRESS` の定数を使って対象のシートとセルを指定し、そのセルの値を取得してメッセージボックスに表示します。
もし他にも細かい仕様があれば教えてください。改善点や追加機能など、何かありますか?
DeepSeekの回答
こんにちは!もちろん、お手伝いしますね。
ご希望の条件を満たすExcelのVBAコードは次のようになります。これは、定数でシート名とセルのアドレスを指定し、そのセルの文字列をメッセージボックスに表示する例です。
Sub ShowCellValue()
' 定数でシート名とセルアドレスを指定
Const targetSheet As String = "Sheet1" ' ここにシート名を入力
Const targetCell As String = "A1" ' ここにセルのアドレスを入力
Dim ws As Worksheet
Dim cellValue As String
' 指定したシートを取得
Set ws = ThisWorkbook.Sheets(targetSheet)
' セルの値を取得
cellValue = ws.Range(targetCell).Value
' メッセージボックスに表示
MsgBox cellValue, vbInformation, "セルの値"
End Sub
このコードでは、
targetSheet
と
targetCell
を定数として定義しています。必要に応じて、シート名やセルのアドレスを変更してください。
targetSheet
と
targetCell
を定数として定義しています。必要に応じて、シート名やセルのアドレスを変更してください。
何か他にご質問や調整したい点があれば、遠慮なく教えてくださいね!
※中華AI恐怖症に罹患したのでもうやらない
Geminiの回答
はい、承知いたしました。Excel VBAで、指定したシートの指定したセルから文字列を取得し、メッセージボックスに表示するコードを作成します。
以下にVBAコードとその解説を示します。
Option Explicit
Sub ShowCellValueFromConstant()
' ■ 定数定義
Const SHEET_NAME As String = "Sheet1" ' 文字列を取得するシート名を指定してください
Const CELL_ADDRESS As String = "A1" ' 文字列を取得するセルのアドレスを指定してください (例: "A1", "B5", "C10")
' ■ 変数宣言
Dim targetSheet As Worksheet
Dim cellValue As String
On Error GoTo ErrorHandler
' ■ 処理
' 指定したシートが存在するか確認
Set targetSheet = ThisWorkbook.Sheets(SHEET_NAME)
' 指定したセルの値を取得
cellValue = targetSheet.Range(CELL_ADDRESS).Value
' メッセージボックスに表示
MsgBox "シート名: " & SHEET_NAME & Chr(10) & _
"セルアドレス: " & CELL_ADDRESS & Chr(10) & _
"取得した文字列: " & cellValue, _
vbInformation, _
"セルの値の取得"
Exit Sub
' ■ エラーハンドリング
ErrorHandler:
If Err.Number = 9 Then ' サブスクリプトが範囲外です (シート名が存在しない場合)
MsgBox "エラー: 指定されたシート '" & SHEET_NAME & "' が見つかりません。", vbCritical, "エラー"
ElseIf Err.Number = 1004 Then ' アプリケーション定義またはオブジェクト定義のエラーです (セルアドレスが不正な場合など)
MsgBox "エラー: 指定されたセルアドレス '" & CELL_ADDRESS & "' が無効です。または、セルにアクセスできません。", vbCritical, "エラー"
Else
MsgBox "予期せぬエラーが発生しました。" & Chr(10) & _
"エラー番号: " & Err.Number & Chr(10) & _
"エラー内容: " & Err.Description, vbCritical, "エラー"
End If
End Sub
### コードの解説
1. **`Option Explicit`**:
この行は、変数を宣言せずに使用することを禁止します。誤りを防ぐためにVBAコードの先頭に記述することを強く推奨します。
2. **`Sub ShowCellValueFromConstant()`**:
VBAのマクロの開始を宣言します。この名前でマクロを実行できます。
3. **`' ■ 定数定義`**:
* **`Const SHEET_NAME As String = "Sheet1"`**: 文字列を取得したいシートの名前を定数として定義しています。`"Sheet1"` の部分を、実際に使用したいシートの名前に変更してください。 * **`Const CELL_ADDRESS As String = "A1"`**: 文字列を取得したいセルのアドレスを定数として定義しています。`"A1"` の部分を、実際に使用したいセルのアドレス(例: `"B5"`, `"C10"` など)に変更してください。
4. **`' ■ 変数宣言`**:
* **`Dim targetSheet As Worksheet`**: 操作するワークシートオブジェクトを格納するための変数を宣言しています。 * **`Dim cellValue As String`**: セルから取得した文字列を格納するための変数を宣言しています。
5. **`On Error GoTo ErrorHandler`**:
エラーが発生した場合に、`ErrorHandler` というラベルの付いたエラー処理ルーチンにジャンプするように指示しています。これにより、エラー発生時でもマクロが停止せず、適切なメッセージを表示できます。
6. **`' ■ 処理`**:
* **`Set targetSheet = ThisWorkbook.Sheets(SHEET_NAME)`**: `SHEET_NAME` 定数で指定された名前のシートを`targetSheet`変数にセットします。`ThisWorkbook`は、このVBAコードが書かれているExcelブック自体を指します。 * **`cellValue = targetSheet.Range(CELL_ADDRESS).Value`**: `targetSheet` の `CELL_ADDRESS` で指定されたセルの値を取得し、`cellValue` 変数に代入します。`.Value` を付けることでセルの内容(値)を取得します。 * **`MsgBox "シート名: " & SHEET_NAME & Chr(10) & _ ...`**: 取得した文字列をメッセージボックスに表示します。 * `Chr(10)` は改行コードです。 * `vbInformation` はメッセージボックスのアイコンを情報アイコンにします。 * `"セルの値の取得"` はメッセージボックスのタイトルです。
7. **`Exit Sub`**:
正常に処理が完了した場合に、エラーハンドラーにジャンプせずにマクロを終了します。
8. **`' ■ エラーハンドリング`**:
* **`ErrorHandler:`**: `On Error GoTo ErrorHandler` で指定されたエラー処理の開始点です。 * **`If Err.Number = 9 Then ...`**: エラー番号 `9` は「サブスクリプトが範囲外です」というエラーで、主に指定したシート名が存在しない場合に発生します。 * **`ElseIf Err.Number = 1004 Then ...`**: エラー番号 `1004` は「アプリケーション定義またはオブジェクト定義のエラーです」というエラーで、主に指定したセルアドレスが無効な場合や、セルへのアクセスができない場合に発生します。 * **`Else ...`**: 上記以外の予期せぬエラーが発生した場合に、一般的なエラーメッセージを表示します。 * **`Err.Number`**: 発生したエラーの番号を取得します。 * **`Err.Description`**: 発生したエラーの説明を取得します。
### VBAコードの利用方法
1. **Excelを開く**:
新しいExcelブックを開くか、既存のブックを開きます。
2. **VBAエディターを開く**:
* `Alt` + `F11` キーを押してVBAエディター(Microsoft Visual Basic for Applications)を開きます。
3. **標準モジュールを挿入**:
* VBAエディターの左側のプロジェクトエクスプローラーで、目的のブック(例: `VBAProject (あなたのブック名.xlsx)`)を右クリックします。 * `挿入` -> `標準モジュール` を選択します。
4. **コードを貼り付ける**:
* 新しく表示されたモジュールウィンドウに、上記のVBAコードをコピーして貼り付けます。
5. **定数を設定する**:
* コード内の以下の行を、実際に使用したいシート名とセルアドレスに変更してください。
Const SHEET_NAME As String = "Sheet1" ' ここを実際のシート名に変更
Const CELL_ADDRESS As String = "A1" ' ここを実際のセルアドレスに変更
6. **マクロを実行する**:
* VBAエディターのツールバーにある `実行` ボタン(緑色の再生ボタン)をクリックするか、`F5` キーを押します。 * または、Excelシートに戻り(`Alt` + `F11`)、`開発` タブ -> `マクロ` をクリックし、`ShowCellValueFromConstant` を選択して `実行` をクリックします。 (`開発` タブが表示されていない場合は、`ファイル` -> `オプション` -> `リボンのユーザー設定` から「開発」にチェックを入れてください。)
これで、指定したシートの指定したセルに入力されている文字列がメッセージボックスに表示されます。
Grokの回答
はい、指定された条件を満たすExcel VBAコードを作成できます。以下は、定数で指定したシートの指定したセルから文字列を取得し、メッセージボックスに表示するVBAコードです。
Option Explicit
Sub ShowCellValue()
' 定数の定義
Const SHEET_NAME As String = "Sheet1" ' 対象シート名
Const CELL_ADDRESS As String = "A1" ' 対象セルアドレス
' 変数の定義
Dim ws As Worksheet
Dim cellValue As String
' シートの取得
Set ws = ThisWorkbook.Worksheets(SHEET_NAME)
' セルの値を取得
cellValue = ws.Range(CELL_ADDRESS).Value
' メッセージボックスで表示
MsgBox "セル " & CELL_ADDRESS & " の値: " & cellValue, vbInformation, "セル値の表示"
End Sub
このコードの説明:
- `SHEET_NAME`定数で対象のシート名(例: "Sheet1")を指定。
- `CELL_ADDRESS`定数で対象のセルアドレス(例: "A1")を指定。
- 指定したシートの指定したセルの値を取得し、メッセージボックスで表示。
- コードを実行するには、ExcelのVBAエディタにこのコードを貼り付け、マクロを実行してください。
必要に応じて、`SHEET_NAME`や`CELL_ADDRESS`の値を変更して使用してください。
Manusの回答
※サインインに電話番号聞かれてなんか恐ろしかったので使ってない
Perplexityの回答
はい、ご指定の条件を満たすExcel VBAは作成可能です。
## 要件の整理
- **定数で指定したシート名**
- **定数で指定したセル番地**
- **そのセルから文字列を取得**
- **メッセージボックスで表示**
## サンプルVBAコード
Sub ShowCellValue()
Const SHEET_NAME As String = "Sheet1" ' シート名を定数で指定
Const CELL_ADDRESS As String = "A1" ' セル番地を定数で指定
Dim ws As Worksheet
Dim cellValue As String
Set ws = ThisWorkbook.Worksheets(SHEET_NAME)
cellValue = ws.Range(CELL_ADDRESS).Value ' セルの値を取得
MsgBox cellValue ' メッセージボックスで表示
End Sub
## ポイント解説
- `Const`でシート名とセル番地を指定し、後から変更しやすくしています。
- `Worksheets(SHEET_NAME).Range(CELL_ADDRESS).Value`で指定セルの値を取得できます[1][2]。
- `MsgBox`で取得した値を表示します[3][1][2]。
## 備考
- セルの値が数値や数式の場合も、`.Value`で取得できます[2]。
- 文字列として取得したい場合は`.Text`も使えますが、通常は`.Value`で十分です[2]。
- シート名やセル番地が間違っているとエラーになるので、定数の内容に注意してください。
このように、要件を満たすVBAは簡単に作成できます。
[1] https://excel.ojitaka-blog.com/get_cell_values/
[2] https://vba.joho.info/tutorial/cell-load-macro/
[3] https://stackoverflow.com/questions/45769481/displaying-message-box-values-in-a-cell/45769510
[4] https://stackoverflow.com/questions/26011834/read-constant-from-a-cell
[5] https://www.vbforums.com/showthread.php?866213-Read-Cell-and-store-as-STRING
[6] https://learn.microsoft.com/en-us/office/vba/api/excel.worksheet.cells
[7] http://www.vbaexpress.com/forum/showthread.php?50217-What-did-I-miss-%28get-constant-value-from-the-string-text%29
[8] https://chandoo.org/forum/threads/vba-code-is-treating-a-constant-stored-as-a-defined-name-as-a-string.32812/
[9] https://learn.microsoft.com/en-us/office/vba/api/excel.range.text
[10] https://www.extendoffice.com/documents/excel/3508-excel-message-box-if-cell-value.html
[2] https://vba.joho.info/tutorial/cell-load-macro/
[3] https://stackoverflow.com/questions/45769481/displaying-message-box-values-in-a-cell/45769510
[4] https://stackoverflow.com/questions/26011834/read-constant-from-a-cell
[5] https://www.vbforums.com/showthread.php?866213-Read-Cell-and-store-as-STRING
[6] https://learn.microsoft.com/en-us/office/vba/api/excel.worksheet.cells
[7] http://www.vbaexpress.com/forum/showthread.php?50217-What-did-I-miss-%28get-constant-value-from-the-string-text%29
[8] https://chandoo.org/forum/threads/vba-code-is-treating-a-constant-stored-as-a-defined-name-as-a-string.32812/
[9] https://learn.microsoft.com/en-us/office/vba/api/excel.range.text
[10] https://www.extendoffice.com/documents/excel/3508-excel-message-box-if-cell-value.html
Notionの回答
はい、その条件を満たすExcel VBAは簡単に作成できます。
以下のコード例を参考にしてください。
以下のコード例を参考にしてください。
Sub ShowCellValue()
Const sheetName As String = "Sheet1" ' シート名(例: "Sheet1")
Const cellAddress As String = "A1" ' セル番地(例: "A1")
Dim value As String
value = ThisWorkbook.Sheets(sheetName).Range(cellAddress).Value
MsgBox value
End Sub
- `sheetName`と`cellAddress`の定数部分を書き換えれば、他のシートやセルにも対応できます。
- 文字列でなくても、数値なども同様に取得できます(MsgBoxは自動で型変換します)。
必要に応じてご相談ください!
※NotionのAIは無料の制限が厳しいっぽいのでもうやらない
まとめ【各AIが生成したVBAコードの比較と特徴】
※このまとめはPerplexityが生成したものを少し修正して書き込んでいます
■ コード生成AIの比較表
AI名 | コードの特徴・書き方 | エラーハンドリング | コメント・説明 | 出力の親切さ |
ChatGPT | 標準的なVBA、On Error Resume NextやGoTo ErrorHandlerを使い分け | あり(バリエーションあり) | コメントが多く丁寧、使い方解説付き | 高い |
Claude | シンプルなVBA、On Error GoTo ErrorHandler | あり | コメントは少なめ、会話文なし | 普通 |
Copilot | 最小限のVBA、エラー処理なし | なし | コメント少なめ | 普通 |
DeepSeek | シンプルなVBA、エラー処理なし | なし | コメント少なめ、親しみやすい文体 | 普通 |
Gemini | Option Explicitや詳細なエラーハンドリングあり | あり(エラー番号ごとに分岐) | コメント・解説が非常に丁寧 | 非常に高い |
Grok | シンプルなVBA、エラー処理なし | なし | コメント少なめ | 普通 |
Perplexity | 標準的なVBA、エラー処理なし | なし | コメント少なめ、ポイント解説あり | 普通 |
Notion | シンプルなVBA、エラー処理なし | なし | コメント少なめ | 普通 |
■ 各AIの特徴
ChatGPT
- コード例が複数あり、On Error Resume NextやGoTo ErrorHandlerを使ったバリエーションが見られる。 - コメントや使い方解説が丁寧。初心者にも分かりやすい。 - 柔軟なカスタマイズ提案もあり。
Claude
- コードはシンプルで、エラー処理はOn Error GoTo ErrorHandlerを使用。 - コメントは少なめで、会話文もなし。
Copilot・DeepSeek・Grok・Perplexity・Notion
- 必要最小限のコードで、エラー処理は基本的に無し。 - コメントも少なめで、実装例としてはシンプル。 - DeepSeekは親しみやすい文体で案内。
Gemini
- Option Explicitを使い、変数宣言や詳細なエラーハンドリング(エラー番号ごとの分岐)を実装。 - コメントや手順解説が非常に丁寧で、初心者にも安心。
■ 総評
- 初心者向け・丁寧な説明が欲しい場合: ChatGPTやGeminiが特におすすめ。手順やエラー時の対応まで詳しく解説されている。
- シンプルなコードが欲しい場合: Copilot、DeepSeek、Grok、Perplexity、Notionが適している。最小限の実装で、すぐ使える。
- エラー処理を重視したい場合: Geminiや一部のChatGPT出力が優れている。エラー番号ごとの分岐で原因特定もしやすい。
- 同じ要件でも、AIごとに「説明の丁寧さ」「エラー処理の有無」「コードの簡潔さ」に違いが見られます。用途やスキルレベルに応じて使い分けると良いでしょう。
■ 注意点
- どのAIも基本的な要件は満たしているが、エラー処理や説明の丁寧さに差がある。
- 生成コードは必ず動作確認・内容チェックを推奨。