ExcelVBA:JSONを出力してUnityに使用する方法の紹介
タグはありません。
掲載日: 2025/08/26
ExcelVBA:JSONを出力してUnityに使用する方法の紹介
Excel VBA で作成したデータを JSON 化し、そのまま Unity に読み込ませたい──
そんなとき「どうやって JSON を作ればいいの?」「JsonUtility で読み込める形式って?」と迷ったことはありませんか?
本記事では、Excel を使ってゲームデータを手軽に作成 → VBA で JSON 出力 → Unity で読み込んで使う方法を、サンプル付きで分かりやすく解説していきます。
目次
必要なもの
- マクロ有効のエクセルブック(.xlsm)
- JsonConverter
- Unity(6000.0.50f1を使っています)
Excel(VBA)の準備
仮データ作成
まずは、Unity に使うデータを作成しましょう。今回は簡単な敵キャラクタの攻撃パターンの情報表を作っていこうと思います。
Type – 攻撃パターンのID
Atk_Dmg – 攻撃ダメージ
Atk_Rng – 攻撃の範囲
Atk_Spd – 攻撃の速度
この形式で作成すると、1行目を Key にし、2行目以降はその行全体が1つのデータになります。列は各データの Key に入っている値にします。次は、この表をJSONのリストデータに変換して作っていきます。
JsonConverterのインポートと設定
VBAを書く前に、Dictionary を JSON に簡単に変換できるツールを紹介したいと思います。
こちらのGITHUBから「<> Code」のボタンで ZIP ファイルをダウンロードしてください。
ZIP ファイルを展開してから、準備したエクセルブックにインポートしていきます。インポートするファイルは「JsonConverter.bas」です。
インポートできたら、上のツールバーにて「ツール」>「参照設定」を選択します。「参照設定」を開いてから、「Microsoft Scripting Runtime」を有効に設定してください。
これで問題なく JsonConverter の関数を使ってマクロを作成できます。
JSON出力マクロ作成
JsonConverter は Dictionary を JSON 形式の文字列に変換してくれます。そのため、表のデータを Dictionary 化する必要があります。ただし、1行目をそのまま Key にすると、重複のエラーが発生してしまいます。解決方法は2つの Dictionary を使用して、「dataEntry」は1行ずつのデータを取得し、「dataGroup」にその行のデータを入れ込みます。
※日本語をソースコードに書くと、他のブックなどにコピーすると文字化けが起きる場合があるため、できる限り英語で書いていきましょう。
For iRow = 2 To LR ‘format dataEntry set ‘add each column of current row into dataEntry ‘add current data group into main group Next iRow |
表を全部 dataGroup に整理できたら、再度 Dictionary に入れ込む必要があります。
ここで、Unity の JsonUtility を使用してラッパークラスのメンバーを一致させる必要があります。整理したデータを Dictionary の Key に「array」の文字列を入れていきます。これで、表のデータは「array」という名前の配列の形式に変換されました。
‘Add to json dictionary ‘Set output file name ‘ Convert to JSON string |
全体的な VBA ソースコードはこうなります。
Sub TestJson() ‘Initialize json object ‘Initialize data group & entry object ‘Initialize last row of used range ‘Initialize sheet’s data range (array) ‘Initialize last row and column of data ‘For Loop: data -> dictionary ‘New dataEntry Set ‘add each column of current row into dataEntry ‘add current data group into main group Next iRow ‘Add to json dictionary ‘Set output file name ‘ Convert to JSON string ‘Print Json (utf-8) ‘Finished Notification |
出力された JSON の中身はこの形になります。
{ |
次は、出力した JSON ファイルを Unity に入れていきましょう!
Unityの準備
JsonHelperクラス
最後の準備は、Json ファイルを読み込む処理です。ゲーム開発のプロジェクトでは何回でも使いまわせるのが望ましいので、目指して作っていきましょう。
JsonUtility.FromJson() の結果を配列にするのに、ラッパークラスが必要があります。
JSON 出力のソースコードに既に「array」の文字列が準備されたので、それをここに活かしていきます。
public static class JsonHelper [System.Serializable] |
実際に出力したJsonを読み込む
それでは、SampleScene に簡単な実行用の GameObject を作成して、JsonHelper を使って出力した JSON ファイルを配列に読み込んでみましょう。
public class JsonReader : MonoBehaviour [SerializeField] private TextAsset jsonText; private EnemyData[] enemyData; void Start() |
プレイモードを実行して、ブレイクポイントで enemyData の配列を確認しましょう。
これで JSON を配列化する処理のベースの部分が出来上がりました!
最後に
お疲れさまでした!
ここまでで、
- Excel でデータを作る方法
- VBA を使った JSON 出力
- Unity で読み込むための最低限必要なクラス
をすべて作成できました。
この仕組みは、敵キャラのパラメータ・アイテム一覧・ストーリー進行フラグなど、
さまざまなゲーム用データに応用できます。
参考したサイト
https://docs.unity3d.com/ScriptReference/JsonUtility.FromJson.html
https://teratail.com/questions/247549
- カテゴリー
- Tech