こんにちは、ムラサキです
この記事は、自作カードゲームの設計段階で、テストプレイ用の簡単なカードをExcelで作って、さらに、そこに自動的にアイコンを表示させたいと思っている人に向けた、とてもニッチな内容です。
テストプレイ段階では、カードの見た目よりも作業効率を重視して、文字や数値のみを記載した簡素なものを作成する場合が多いと思います。しかし、文字のみだと視認性が悪いので、例えば、属性や種族等、何かしらのアイコンだけでも表示しておきたい、というような状況は多々あると思います。一方、カードの内容を微調整するたびにアイコンを貼りなおすのも手間なので、自動化できると便利です。
そこで、この記事では、上の画像のようにExcelでテストプレイ用カードを作成した場合に、例えばB2セルに「火」という文字を入力するとB3セルに火のアイコンが表示される処理が全てのカードに一括で適用されるように自動化する方法をご紹介します。Excelのマクロ機能(VBA言語)を使用しますが、初めての方もひとまずコピペで始められるように、手順を極力詳細に記載します。
ExcelにはMicrosoft365を使用しましたが、その他のバージョンでもおおまかな手順は変わらないと思います。
Excelでのテストプレイ用カード作成
まずはExcelでカードを作成します。自由に作成してOKなのですが、おすすめは、下の画像のように「カード」と「リスト」という2つのシートを用いる方法です。
「カード」シートは、実際に印刷するテストプレイ用のカードをデザインしたシートです。
「リスト」シートは、各カードの名前や効果等を一覧表で整理しやすくしたものです。「リスト」シートに整理した内容が「カード」シートに自動的に反映されるようにしておくと便利です。そのためには、VLOOKUP関数を使用します。
例えば上の画像のように、「リスト」シートのB列に整理したカードの「名前」を、「カード」シートのC2セルに自動的に反映したい場合、C2セルには
=VLOOKUP(D5, リスト!$A$2:$E$9, 2, TRUE)
と記入します。VLOOKUP関数の引数は、それぞれ上図の①~③のように対応させればOKです。
「カード」シートのD5セルには、「リスト」シートのA列に記載したカードの通し番号(重複の無い番号)を記入しておきます。
アイコンの準備
まずはお好みの画像を用意します。今回使用したのはSILHOUETTE ILLUSTさんのフリーイラストです。
用意した画像をexcelの適当な場所に貼ります。今回は下図のように「リスト」シート内の好きな場所に貼って下さい。
次に、下図(1)のようにアイコンをクリックで選択すると、(2)の箇所にアイコンの名前を入力できますので、それぞれのアイコンに「アイコン火」「アイコン水」というふうに「アイコン+対応させたい文字列」というルールで名前を付けて下さい。
VBAの準備
VBAを初めて利用する場合等、Excelの上部に「開発」という名前のタブが無い場合は、下記の手順でタブを表示させて下さい。
・[ファイル] タブ -[オプション] タブ - [リボンのユーザ設定] へ移動。
・画面右側の[リボンのユーザー設定] [メイン タブ] の下の一覧の中から [開発] チェック ボックスをオンにしてOKボタンを押す。
無事に「開発」が表示されるようになったら、下図のように(1)開発、(2)Visual Basic の順にクリックして下さい。そうすると「Microsoft Visual Basic for Applications」という新規ウィンドウが現れますので、(3)Sheet1(カード)をダブルクリックして下さい。
VBAコードの入力
上記の手順が完了すると、 「Microsoft Visual Basic for Applications」というウィンドウの中に、「(ファイル名) – Sheet1(コード)」というウィンドウが現れていると思いますので、下記のコードをコピペして下さい。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim mySpace As Variant
Dim myStr As String
Dim i As Integer, j As Integer
'記入済のアイコンを一旦削除
Worksheets("カード").Select
For Each myShape In Worksheets("カード").Shapes
If Left(myShape.Name, 4) = "アイコン" Then
myShape.Delete
End If
Next
'コピペ
For i = 2 To 17 Step 5
For j = 2 To 6 Step 4
If Cells(i, j).Value = "火" _
Or Cells(i, j).Value = "水" _
Or Cells(i, j).Value = "草" _
Or Cells(i, j).Value = "電気" Then
myStr = Worksheets("カード").Cells(i, j).Value
Worksheets("リスト").Shapes("アイコン" & myStr).Copy
ActiveSheet.Paste
Selection.Top = Cells(i + 1, j).Top + 3
Selection.Left = Cells(i + 1, j).Left + 16
End If
Next
Next
Range("A1").Select
End Sub
これで完成です。
アイコンが自動更新されない場合は、「カード」シートの余白に適当な文字列を打ってenterを押してみて下さい。
アイコンもVLOOKUP関数のようなもので参照できると便利なのですが困難ですし、それを愚直にVBAで実行しようとすると意外と手間がかかります。そこで今回のコードでは、シンプルに、記入済のアイコンを一旦全て削除した後、文字列に対応するアイコンを探してきてコピペする動作を繰り返すようにしました。コードの詳細は後日追記するかもしれませんが、短く単純ですので、コード内の「’コピペ」と書かれた行以降の数字や文字を適宜変更して頂ければ、おそらくカスタマイズできるかと思います。
・「火」「水」等はお好みの文字列に変更して下さい。
・コード内の「カード」は、アイコンを表示したいシート名で、「リスト」は、アイコンの画像ファイルを貼り付けたシート名です。自分のファイルのシート名に応じて変更して下さい。
・「For i = 2 To 17 Step 5 」は「カード」シートの2行目から17行目までを5行ごとに調べるという意味で、「For j = 2 To 6 Step 4」は、B列からF列までを4列ごとに調べる、という意味です。アイコンに対応する文字列(今回の例では「火」や「水」)が書かれたセルを対象にできるように変更して下さい。
コメント