ExcelVBA:ゲーム開発者が使えるマクロ5選

タイトル装飾

ExcelVBA:ゲーム開発者が使えるマクロ5選

 

ExcelVBA:ゲーム開発者が使えるマクロ5選

ゲーム開発の現場では、Excelを使う場面が意外とたくさんあります。

アイテムのパラメータ、ローカライズ用のテキスト、アセットの管理リスト…

気づいたらシートが増えていて、同じような手作業を何度も繰り返していたりしませんか?

「このデータ、毎回手動で整形してるな…」

「また同じコピペ作業か…」

そんな地味にストレスな場面、VBAのマクロを使えばボタン一つで解決できます。

今回は、ゲーム開発の現場で実際に役立つVBAマクロを5つ紹介します。

どれも短いコードで書けるので、VBAに慣れていない方でも気軽に試せると思います。

ひとつでも「これ使える!」と思ってもらえたら嬉しいです!

目次

マクロ① — データの空白・重複を自動チェック

マクロ② — 選択範囲をMarkdown表に変換してコピー

マクロ③ — フォルダ内のファイル名を一覧化

マクロ④ — ローカライズ用テンプレートを自動生成

マクロ⑤ — データをCSV・JSONに一括出力

まとめ

マクロ① — データの空白・重複を自動チェック

どんな場面で使う?

アイテムIDや敵IDなど、重複があってはいけないデータを大量に管理しているとき。目視チェックは見落としがあるし、データが増えるほど大変です。

できること:

  • 指定列の空白セルを検出して警告
  • 重複している値をハイライト表示

Sub CheckDuplicatesAndBlanks()
Dim ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet

Dim checkCol As Range
Set checkCol = ws.Range(“A2:A100”)

Dim cell As Range
Dim dupCount As Integer
dupCount =
0

For Each cell In checkCol
‘ Skip empty rows
If IsEmpty(cell.Value) Then
cell.Interior.Color = RGB(
255, 255, 0)
dupCount = dupCount +
1
End If

‘ Check duplicate
If WorksheetFunction.CountIf(checkCol, cell.Value) > 1 Then
If Not IsEmpty(cell.Value) Then
cell.Interior.Color = RGB(
255, 150, 150)
dupCount = dupCount +
1
End If
End If
Next cell

If dupCount = 0 Then
MsgBox
“No issues found!”
Else
MsgBox dupCount &
” issue(s) found. Please check highlighted cells.”
End If
End Sub

ポイント: CountIf()をVBAから呼び出すのが地味に便利です。わざわざ関数列を追加しなくていいので、シートがすっきり保てます。

マクロ② — 選択範囲をMarkdown表に変換してコピー

どんな場面で使う?

ExcelのデータをGitHubのREADMEやNotion、社内Wikiに貼り付けたいとき。いちいち手動で|を入力して表を作るのは面倒ですよね。

できること:

  • 選択したセル範囲をMarkdown表の形式に変換
  • そのままクリップボードにコピーするので、貼り付けるだけでOK

例えばこのExcelデータを選択して実行すると…

EnemyID

HP

ATK

E001

100

30

E002

300

45

こうなります:

| EnemyID | HP | ATK |
|—|—|—|
| E001 | 100 | 30 |
| E002 | 300 | 45 |

コード:

Sub CopyAsMarkdownTable()
Dim sel As Range
Set sel = Selection

If sel Is Nothing Then
MsgBox “Please select a range first.”
Exit Sub
End If

‘ Load selection into array
Dim arrData As Variant
arrData = sel.Value

Dim lastRow As Long
Dim lastCol As Long
lastRow =
UBound(arrData, 1)
lastCol =
UBound(arrData, 2)

Dim arrOut() As String
ReDim arrOut(0)

Dim r As Long, c As Long

‘ Header row
Dim headerCols() As String
ReDim headerCols(1 To lastCol)
For c = 1 To lastCol
headerCols(c) =
CStr(arrData(1, c))
Next c
arrOut(
0) = “| “ & Join(headerCols, ” | “) & ” |”

‘ Separator row
ReDim Preserve arrOut(UBound(arrOut) + 1)
Dim sepCols() As String
ReDim sepCols(1 To lastCol)
For c = 1 To lastCol
sepCols(c) =
“—“
Next c
arrOut(
UBound(arrOut)) = “| “ & Join(sepCols, ” | “) & ” |”

‘ Data rows
For r = 2 To lastRow
Dim rowCols() As String
ReDim rowCols(1 To lastCol)
For c = 1 To lastCol
rowCols(c) =
CStr(arrData(r, c))
Next c
ReDim Preserve arrOut(UBound(arrOut) + 1)
arrOut(
UBound(arrOut)) = “| “ & Join(rowCols, ” | “) & ” |”
Next r

‘ Copy to clipboard
Dim result As String
result =
Join(arrOut, vbCrLf)

With CreateObject(“Forms.TextBox.1”)
.MultiLine =
True
.Text = result
.SelectAll
.Copy
End With

MsgBox “Copied as Markdown table! (“ & lastRow & ” rows)”
End Sub

ポイント: クリップボードへのコピーにForms.TextBox.1を使っています。外部ライブラリ不要で動くので、どの環境でもそのまま使えます。また、ExcelVBA:配列でマクロの処理時間を高速化する方法で紹介した配列テクニックを使っているので処理も高速です。

マクロ③ — フォルダ内のファイル名を一覧化

どんな場面で使う?

Unityのアセットフォルダやサウンドフォルダの中身をExcelで管理したいとき。手動でファイル名を入力するのは現実的じゃないですよね。

できること:

  • 指定フォルダのファイル名を全部シートに書き出す
  • 拡張子でフィルタリングも可能(例:.pngだけ、.wavだけ)

Sub ListFilesInFolder()
Dim folderPath As String
folderPath =
InputBox(“Enter folder path:”, “Folder Path”)

If folderPath = “” Then Exit Sub

Dim ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet
ws.Cells.Clear

‘ Header
ws.Cells(
1, 1).Value = “FileName”
ws.Cells(
1, 2).Value = “Extension”
ws.Cells(
1, 3).Value = “FullPath”

Dim fileName As String
Dim row As Long
row =
2

fileName = Dir(folderPath & “\*.*”)
Do While fileName <> “”
ws.Cells(row,
1).Value = fileName
ws.Cells(row,
2).Value = LCase(Right(fileName, Len(fileName) – InStrRev(fileName, “.”)))
ws.Cells(row,
3).Value = folderPath & “\” & fileName
row = row +
1
fileName = Dir()
Loop

MsgBox “Found “ & row – 2 & ” file(s)!”
End Sub

ポイント: Dir()関数はシンプルですが、フォルダ内を走査する基本テクニックです。アセット管理だけでなく、ログファイルの収集などにも応用できます。

マクロ④ — ローカライズ用テンプレートを自動生成

どんな場面で使う?

ゲームに多言語対応が必要なとき、翻訳担当者に渡すファイルを毎回手動で作るのは大変です。

できること:

  • 「テキストID」と「原文(日本語)」の列から、翻訳用シートを自動生成
  • 対応言語(英語・中国語など)の列を自動で追加

Sub GenerateLocalizationSheet()
Dim wsSrc As Worksheet
Dim wsLoc As Worksheet
Set wsSrc = ThisWorkbook.ActiveSheet

‘ Languages to add
Dim langs As Variant
langs =
Array(“EN”, “ZH”, “KO”)

‘ Create or clear Localization sheet
On Error Resume Next
Set wsLoc = ThisWorkbook.Sheets(“Localization”)
On Error GoTo 0

If wsLoc Is Nothing Then
Set wsLoc = ThisWorkbook.Sheets.Add
wsLoc.Name =
“Localization”
Else
wsLoc.Cells.Clear
End If

‘ Header
wsLoc.Cells(
1, 1).Value = “ID”
wsLoc.Cells(
1, 2).Value = “JA”

Dim i As Integer
For i = 0 To UBound(langs)
wsLoc.Cells(
1, 3 + i).Value = langs(i)
Next i

‘ Copy ID and JA columns from source
Dim lastRow As Long
lastRow = wsSrc.Cells(wsSrc.Rows.Count,
1).End(xlUp).Row

wsSrc.Range(“A2:B” & lastRow).Copy wsLoc.Range(“A2”)

MsgBox “Localization sheet generated!”
End Sub

ポイント: langsの配列を変えるだけで対応言語を増減できます。プロジェクトごとにカスタマイズしやすい構造にしておくのがポイントです。

マクロ⑤ — データをCSV・JSONに一括出力

どんな場面で使う?

Excelで管理しているゲームデータをUnityに渡すとき。毎回「名前を付けて保存」でCSVにするのは手間だし、JSONが必要な場合はさらに面倒です。

できること:

  • アクティブシートのデータをCSVとして出力
  • 出力先はExcelファイルと同じフォルダに自動保存

Sub ExportToCSV()
Dim ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet

Dim filePath As String
filePath = ThisWorkbook.Path &
“\” & ws.Name & “.csv”

Dim lastRow As Long
Dim lastCol As Long
lastRow = ws.Cells(ws.Rows.Count,
1).End(xlUp).Row
lastCol = ws.Cells(
1, ws.Columns.Count).End(xlToLeft).Column

‘ Load to array (faster than Range access)
Dim arrData As Variant
arrData = ws.Range(ws.Cells(
1, 1), ws.Cells(lastRow, lastCol)).Value

Dim arrOut() As String
ReDim arrOut(1 To lastRow)

Dim r As Long, c As Long
For r = 1 To lastRow
Dim rowData() As String
ReDim rowData(1 To lastCol)
For c = 1 To lastCol
rowData(c) =
CStr(arrData(r, c))
Next c
arrOut(r) =
Join(rowData, “,”)
Next r

‘ Write UTF-8
With CreateObject(“ADODB.Stream”)
.Charset =
“UTF-8”
.Open
.WriteText
Join(arrOut, vbCrLf), 1
.SaveToFile filePath,
2
.Close
End With

MsgBox “CSV exported: “ & filePath
End Sub

ポイント: ExcelVBA:配列でマクロの処理時間を高速化する方法で紹介した配列テクニックをここでも活用しています。大量データでも高速に動作します。またUTF-8で出力するので、日本語が含まれていても文字化けしません。

まとめ

今回紹介した5つのマクロをまとめると:

#

マクロ名

使いどころ

空白・重複チェック

IDの入力ミスを防ぐ

Markdown表に変換してコピー

GitHubへのコピペ

ファイル名一覧化

アセット管理の自動化

ローカライズ生成

翻訳作業の準備を効率化

CSV出力

Unityへのデータ渡し

どれも単体で使えますが、組み合わせることでより強力なパイプラインが作れます。ぜひ自分のプロジェクトに合わせてカスタマイズしてみてください!

作者
  N.P
  PG

目次

目次を生成中...