はじめに
多くの企業や学校では、長年にわたってExcelVBAを使用してきました。
しかし、クラウドサービスの台頭により、GoogleのG Suiteなどへの移行を検討する組織が増えています。
この記事では、ExcelVBAからGoogle Apps Script(GAS)への移行について、AIを活用したアプローチを紹介します。
なぜExcelVBAからGASへの移行が難しいのか
- 既存のコードベースが大きい
- VBAとGASの文法の違い
- Excelとスプレッドシートの機能の違い
- プログラミングスキルを持つ人材の不足
特に学校現場では、プログラミングの専門家ではない教職員がVBAスクリプトを作成していることが多く、コメント無しにアルゴリズムがめちゃくちゃで、いるのかいらないのか不明な行が点在してたりで、コードの理解自体困難な場合が多々あります。
これはVBA↔GASだけでなく、あらゆる言語間で言えることだと思います。
AIによるコード変換の可能性
AIを活用することで、これらの課題を克服し、効率的にコードを変換できる可能性があります。試しに、自作のExcelVBAコードをAIに変換してもらった例を見てみましょう。
元のExcelVBAコード
Sub 印刷領収書(印刷モード As Boolean)
Dim wsData As Worksheet
Dim wsReceipt As Worksheet
Dim startNo As Long
Dim endNo As Long
Dim i As Long
Dim dataRow As Long
Dim col As Integer
Dim fileName As String
Dim schoolName As String
' エラーハンドリングを設定
On Error GoTo ErrHandler
' データシートと領収書シートを設定
Set wsData = ThisWorkbook.Sheets("データシート")
Set wsReceipt = ThisWorkbook.Sheets("領収書")
' 開始Noと終了Noを取得
startNo = wsData.Range("V2").Value
endNo = wsData.Range("X2").Value
' データをループして領収書シートに転記し、印刷またはPDF保存
For i = startNo To endNo
' データ行を計算
dataRow = i + 2 ' No1が3行目に対応するため、2を加算
' 学校名をB列から取得して領収書シートのB5セルに入力
schoolName = wsData.Cells(dataRow, 2).Value
wsReceipt.Range("B5").Value = schoolName
' 支払い代金をS列から取得して領収書シートのG7セルに入力
wsReceipt.Range("G7").Value = wsData.Cells(dataRow, 19).Value
' 学校名をA22セルに入力
wsReceipt.Range("A22").Value = schoolName
' C列からS列の値をB25からR25に入力
For col = 3 To 19
wsReceipt.Cells(25, col - 1).Value = wsData.Cells(dataRow, col).Value
Next col
' PDFとして保存または印刷
If 印刷モード Then
' 印刷
wsReceipt.PrintOut
Else
' PDFとして保存
fileName = "C:\PDFs\" & schoolName & "領収書.pdf"
wsReceipt.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=True, OpenAfterPublish:=False
Debug.Print "Saving PDF: " & fileName
End If
Next i
' 処理完了のメッセージ
MsgBox "処理が完了しました。", vbInformation
Exit Sub
ErrHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
Debug.Print "エラーが発生しました: " & Err.Description
End Sub
Sub 印刷ボタン用()
Call 印刷領収書(True)
End Sub
Sub PDF保存ボタン用()
Call 印刷領収書(False)
End Sub
自分で言うのも何ですが結構綺麗に書いていると思います。コメントも主要な部分に入れて誰に渡しても「まぁまぁいいんじゃない!」って言って貰えるレベル!と勝手に思ってます。
AIによって変換されたGASコード
function printOrSaveReceipts(printMode) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var wsData = ss.getSheetByName("データシート");
var wsReceipt = ss.getSheetByName("領収書");
var startNo = wsData.getRange("V2").getValue();
var endNo = wsData.getRange("X2").getValue();
for (var i = startNo; i <= endNo; i++) {
var dataRow = i + 2;
var schoolName = wsData.getRange(dataRow, 2).getValue();
wsReceipt.getRange("B5").setValue(schoolName);
wsReceipt.getRange("G7").setValue(wsData.getRange(dataRow, 19).getValue());
wsReceipt.getRange("A22").setValue(schoolName);
for (var col = 3; col <= 19; col++) {
wsReceipt.getRange(25, col - 1).setValue(wsData.getRange(dataRow, col).getValue());
}
if (printMode) {
// 印刷機能はGASでは直接的にはサポートされていないため、代替案としてPDFを作成して手動で印刷
saveAsPDF(wsReceipt, schoolName);
} else {
saveAsPDF(wsReceipt, schoolName);
}
}
SpreadsheetApp.getUi().alert("処理が完了しました。");
}
function saveAsPDF(sheet, schoolName) {
var folderId = "YOUR_FOLDER_ID_HERE"; // PDFを保存するGoogleドライブフォルダのID
var ss = sheet.getParent();
var pdfFile = DriveApp.getFolderById(folderId).createFile(ss.getBlob());
pdfFile.setName(schoolName + "領収書.pdf");
Logger.log("Saving PDF: " + pdfFile.getName());
}
function printButton() {
printOrSaveReceipts(true);
}
function savePDFButton() {
printOrSaveReceipts(false);
}
これを自分でやってたら、数時間はかかる気がします。
まずGASにそれほど慣れていないのでドキュメントを読みながらコードを書くのとエラー対処に時間を要する気がします。
まだ自分でコードの動作はイメージ出来ているので短時間で終わりそうですが、これが人のコードだとそうは行きません。
数日かかって、「もう自分で1から書いた方が早くね?」になってもおかしくないかも。
AIによるコード変換の利点
- 迅速な変換: AIは瞬時にコードを解析し、適切な変換を行います。
- 文法の自動調整: VBAとGASの文法の違いを自動的に調整します。
- 機能の置き換え: ExcelとGoogle Spreadsheetsの機能の違いを考慮し、適切な代替手段を提案します。
- コメントの追加: 必要に応じて、コードの動作を説明するコメントを追加できます。
- リファクタリングの提案: より効率的なコード構造や最新のプログラミング手法を提案することがあります。
- エラーハンドリングの改善: 適切なエラーハンドリング方法を提案し、コードの堅牢性を向上させます。
注意点
AIによるコード変換は非常に便利ですが、以下の点に注意が必要です:
- 出力されたコードの検証: AIが生成したコードは、必ず人間が確認し、テストする必要があります。
- ビジネスロジックの理解: 元のコードのビジネスロジックを理解していないと、変換後のコードが正しく動作しているか判断が難しい場合があります。
- APIの制限: GASには一部のExcel機能に相当するAPIがない場合があります。そのような場合は、代替手段を検討する必要があります。
- セキュリティとプライバシー: 機密性の高いコードをAIに入力する際は、セキュリティとプライバシーに十分注意してください。
まとめ
AIを活用したExcelVBAからGoogle Apps Scriptへのコード変換は、多くの組織にとって魅力的な選択肢となります。迅速かつ効率的なコード変換が可能になり、クラウドへの移行の障壁を下げることができます。
ただし、AIはあくまでもツールであり、最終的な判断と検証は人間が行う必要があります。プログラミングの基本的な知識を持ち、両方の環境(ExcelとGoogle Spreadsheet)を理解している人材が変換作業を進めることで、より確実で効果的な移行が可能になります。
AIを活用したコード変換は、今後さらに進化し、より精度の高い変換が可能になると予想されます。組織のデジタルトランスフォーメーションを進める上で、このようなツールを効果的に活用することが重要になってくるでしょう。