「NoCodeVBA」にようこそ!
「NoCodeVBA」はエクセルVBAマクロを作成できる無料アプリです。
「NoCodeVBA」は制御の都合で、空白行やインデントのズレが生じます。
そこて、ChatGPTを使いコードを整理(リファクタリング)してみます。
ChatGPTは無料で使えるブラウザのMicrosoft EdgeにあるGPT-4を搭載の「BingのAIチャット」利用します。
事例
下記の内容でリファクタリングをします。
- 使用していない変数の宣言を削除
- 空白行を削除
- インデントを揃える
- Callする側にScreenUpdatingとDisplayAlertsを入れ、Callされる側を削除
- 不要なSelectやOffsetを省略
赤字が修正する部分で、青字がリファクタリングした結果です
Sub 連続実行()
Call マクロA
Call マクロB
Call マクロC
End Sub
Sub マクロA() '文字入力
Application.ScreenUpdating = False ' 画面描画を停止
Application.DisplayAlerts = False ' 警告表示を停止
Dim セル範囲 As String, セル As Range, 右下セル As String
Sheets("Sheet1").Select
セル範囲 = "a1:a1"
Range(セル範囲).Select
Selection.Offset(0, 0).Formula = "りんご"
Application.DisplayAlerts = True ' 警告表示を再開
Application.ScreenUpdating = True ' 画面描画を再開
End Sub
Sub マクロB() '書式
Application.ScreenUpdating = False ' 画面描画を停止
Application.DisplayAlerts = False ' 警告表示を停止Dim セル範囲 As String, セル As Range, 右下セル As String
Sheets("Sheet1").Select
セル範囲 = "a1:a1"
Range(セル範囲).Select
Selection.Offset(0, 0).Font.Bold = True
Application.DisplayAlerts = True ' 警告表示を再開
Application.ScreenUpdating = True ' 画面描画を再開
End Sub
Sub マクロC() '色変更
Application.ScreenUpdating = False ' 画面描画を停止
Application.DisplayAlerts = False ' 警告表示を停止
Dim セル範囲 As String, セル As Range, 右下セル As String
Sheets("Sheet1").Select
セル範囲 = "a1:a1"
'◆条件分岐
For Each セル In Range(セル範囲).Cells
If セル.Interior.Color = RGB(255, 255, 0) Then
セル.Select
Selection.Offset(0, 0).Font.Color = RGB(255, 0, 0)End If
Next
Application.DisplayAlerts = True ' 警告表示を再開
Application.ScreenUpdating = True ' 画面描画を再開
End Sub
Sub 連続実行()
'画面描画と警告表示を停止
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'各マクロを呼び出す
マクロA
マクロB
マクロC
'画面描画と警告表示を再開
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Sub マクロA() '文字入力
Dim セル範囲 As String '使用していない変数の宣言を削除
Sheets("Sheet1").Select
セル範囲 = "a1:a1"
Range(セル範囲).Formula = "りんご" 'SelectとOffsetを省略
End Sub
Sub マクロB() '書式
Dim セル範囲 As String '使用していない変数の宣言を削除
Sheets("Sheet1").Select
セル範囲 = "a1:a1"
Range(セル範囲).Font.Bold = True 'SelectとOffsetを省略
End Sub
Sub マクロC() '色変更
Dim セル範囲 As String, セル As Range '使用していない変数の宣言を削除
Sheets("Sheet1").Select
セル範囲 = "a1:a1"
'◆条件分岐
For Each セル In Range(セル範囲).Cells
If セル.Interior.Color = RGB(255, 255, 0) Then
セル.Font.Color = RGB(255, 0, 0) 'SelectとOffsetを省略
End If
Next
End Sub
きれいになりました!
Bingの「チャット モード」に入力したプロンプトです
```で囲んだVBAコードを次の内容でリファクタリングしてください。
・連続する空白を削除
・改行文字'/n'のみの行を削除
・インデントを揃える
・使用していない変数の宣言を削除
・Callする側にScreenUpdatingとDisplayAlertsを入れ、Callされる側を削除する
・不要なSelectやOffsetを省略
```
Sub 連続実行()
Call マクロA
Call マクロB
Call マクロC
End Sub
Sub マクロA() '文字入力
Application.ScreenUpdating = False ' 画面描画を停止
Application.DisplayAlerts = False ' 警告表示を停止
Dim セル範囲 As String, セル As Range, 右下セル As String
Sheets("Sheet1").Select
セル範囲 = "a1:a1"
Range(セル範囲).Select
Selection.Offset(0, 0).Formula = "りんご"
Application.DisplayAlerts = True ' 警告表示を再開
Application.ScreenUpdating = True ' 画面描画を再開
End Sub
Sub マクロB() '書式
Application.ScreenUpdating = False ' 画面描画を停止
Application.DisplayAlerts = False ' 警告表示を停止
Sheets("Sheet1").Select
セル範囲 = "a1:a1"
Range(セル範囲).Select
Selection.Offset(0, 0).Font.Bold = True
Application.DisplayAlerts = True ' 警告表示を再開
Application.ScreenUpdating = True ' 画面描画を再開
End Sub
Sub マクロC() '色変更
Application.ScreenUpdating = False ' 画面描画を停止
Application.DisplayAlerts = False ' 警告表示を停止
Dim セル範囲 As String, セル As Range, 右下セル As String
Sheets("Sheet1").Select
セル範囲 = "a1:a1"
'◆条件分岐
For Each セル In Range(セル範囲).Cells
If セル.Interior.Color = RGB(255, 255, 0) Then
セル.Select
Selection.Offset(0, 0).Font.Color = RGB(255, 0, 0)End If
Next
Application.DisplayAlerts = True ' 警告表示を再開
Application.ScreenUpdating = True ' 画面描画を再開
End Sub
```
上に指示を書き、下にコードを```で囲って添付しています。
(‘‘‘で囲むとコードを意味します。```は半角英数モードでShiftキーと@のキーを同時に押します)
Bingのチャット モードの使い方
※初めて利用するときは、登録が必要です。
ブラウザのMicrosoft Edgeで「BingのAIチャット」を立ち上げます
上記のような指示とコードを入力して実行します。
例えば、
- 変数を英語表記にしたり、
- Callの使用をやめて一つのプロシージャにまとめたり、
- 3か所にあるSheets("Sheet1").Selectとセル範囲 = "a1:a1"を、1つにまとめる
こともできます。
なおChatGPTの改行は、ShiftキーとEnterキーを同時に押します。
「BingのAIチャット」に文章(プロンプト)を入力した画面です
下記の回答を、コピーしてエクセルのVBE画面に貼り付けます。
ぜひ、「BingのAIチャット」でVBAコードをリファクタリングしてみてください。😊