fc2ブログ

Excelでボーダーブレイクのカスタマイズ計算3

 →ダウンロードはこちら
bbexcel05.jpg

 今回の壁紙はヒルダ様。
 まずはこの壁紙の設定方法。
 1、SEGAの公式サイトから、キャラクターが右に寄っている壁紙をダウンロードする。
 2、アクセサリのペイントで縮小する。私の環境は1024x768なので1600x1200の壁紙を、1024÷1600=0.64で、水平方向と垂直方向を64%にする。
 3、壁紙によってはキャラクターが片寄っていることもあるので、その場合、右に移動させる場合は%を大きくし、左側に移動させる場合は%を小さくする。
 4、Excelの「書式」→「シート」→「背景」で設定する。背景を削除する場合は、「書式」→「シート」→「背景の削除」

 データ入力。
 所持している装備と素材を入力する。
 これによって、『頭』『胴』『腕』『脚』『武器』シートで、所持しているのは黒文字、持っていないけど購入できるものは青文字、素材や勲章が足りなくて購入できないものは赤文字になる。
 そんなのは必要ない、というのなら入力する必要はない。

 『素材』シートでは、所持している数を入力。
 『頭』『胴』『腕』『脚』『武器』シートでは、[所持=0]の列に、所持していたら"0"を、所持していなければ"1"を入力する。
 前のバージョンの「カスタマイズ計算」に入力済みであれば、[番号]で昇順になっているのを確認して、コピー&ペーストで。貼り付けるときは、「形式を選択して貼り付け」→「値」で貼り付ける。

 で、思ったのだが。所持しているのは"1"のほうが分かりやすかったのではないかと、いまさら思った。まあ、いまさらなんで直すつもりはない。

 そんで、 『頭』『胴』『腕』『脚』シートで、「データ」→「並べ替え」で、並び替えてみたりとかする。
 そのときは、装甲であれば[装降順]を「最優先されるキー」にして、「降順」で並び替える。
 所持している装備だけで並び替えるときは、「最優先されるキー」を[所持=0]に、購入できる装備も含めて並び替えるときは、「最優先されるキー」を[購入=0]にして、「2番目に優先されるキー」を[装降順]などにする。
 デフォルトの順番に直したいときは[番号]で並び替える。

 使い方。
 『アセン』シートで、①や②のパーツを選択すると、各パラメータが反映される。

 ③の「強襲」などはボタンになっている。
 これを押すと『強襲脚』シートで、重さを考慮したダッシュ順で並び替えが行われる。
 その後に④の▼を押すと、そのダッシュ順のリストが表示される。
 もしダッシュが同じ値だった場合は、装甲→歩行の順番にソートされる。

 で、今回追加したのは、⑤⑥のオプションボタン。
 持っているパーツと購入できるパーツで、射撃補正順にソートしたい場合、⑥の[購入]、⑤の[射撃補正]にチェックして、⑦の妙なボタンを押す。
 そうすると①のパーツのリストが射撃補正順にソートされている。
 で、①のリストをデフォルトの順番に戻したいときは、⑧の「頭」のボタンを押す。

 こんな感じです。
 まあ、なんか処理がものすごく遅くなってしまったが。
 あと付け加えたい機能も思いつかないんで、これで一応、完成です。

↓クリックお願いします。
人気ブログランキングへにほんブログ村 哲学・思想ブログ 哲学へblogram投票ボタン

ボーダーブレイクで学ぶExcel入門2

bbexcel04.jpg
 まず、①のソートを行うボタンの処理。
 「コントロールツールボックス」→「デザインモード」で、ボタンを作り、そのボタンを右クリックして「コードの表示」を選ぶと、
  Private Sub CommandButton1_Click()

  End Sub

 と、自動的に記述される。この間にボタンが押されたときの処理を書く。
 ソートを行うには、Sortメソッド(方式)を使います。
 シートやセルといったオブジェクト(対象物)の後ろに".Sort"と書けば、そのオブジェクトを操作する方式の指定となります。

 このメソッドのほかに、プロパティ(属性)というのもあって、たとえば、
  msgbox Range("A1").Interior.ColorIndex
 メッセージボックスにA1の背景色の色番号が表示されるが、これの"ColorIndex"がプロパティ。
 これでセルの背景の色を取得したり、指定したりする。

 メソッドとプロパティの違いって、どう理解したらいいんだろう。
 「コントロールツールボックス」→「デザインモード」で作ったボタンを右クリックして、「プロパティ」で設定できるものがプロパティ。
 だから、値の設定や参照するのがプロパティ。
 操作をするのがメソッド。
 Aさん、Bさん、Cさんの身長何cmという項目がプロパティだとしたら、これを身長順に並び替える操作がメソッド。←余計分かりにくいか。
 そういうプロパティやメソッドが、数多く用意されている。

 んじゃ、Range("A1").Interior.ColorIndexの"Interior"って何よ?という疑問が出るが、これはクラスというものらしい。さんざん「InteriorクラスのColorIndexプロパティを設定できません」というエラーが出てきたんだから、Interiorはクラスというものだろう。
 んで、セルの一つにも様々な情報があり、"Font"なら文字の情報だし、"Interior"なら背景の情報ということで、そのセルの情報を細分化しているのがクラスになるのか。
 だったら、FontColorIndexやInteriorColorIndexのように、すべてプロパティにしたほうが分かりやすいと私は思うのだが、クラスが必要であるとするのはVBAの設計思想の話なんだろう。
 まあ、VBAはこういうものらしい。

 で、「カスタマイズ計算」のボタンの解説。
 このボタンが押されたら『強襲脚』シートで、アセンの重量を考慮したダッシュ順の並び替えを行う。
 並び替えを行うのがSortメソッドで、
  Sheets("強襲脚").Range("B4:L37").Sort _
   key1:=Sheets("強襲脚").Range("C4"), order1:=xlDescending, _
   key2:=Sheets("強襲脚").Range("J4"), order2:=xlDescending, _
   key3:=Sheets("強襲脚").Range("K4"), order3:=xlDescending

 『強襲脚』シートのB4からL37の範囲のセルの並び替えを行う。
 行の最後にある"_"は、行が続いていますよ、という印。

 VBAでは、1行を1処理と判断するらしい。
 で、行が長くなると見づらくなるので、"_"を入れて行を分ける。

 Sortメソッドには、"key1"とか"order1"とか、その他にもまだ引数が用意されている。
 key1は、ソートするときに最優先されるキーの指定。key2、key3はその次に優先されるキーの指定。
 order1は、並べ替えを昇順にするか降順にするか指定する。xlDescendingは降順で、昇順ならxlAscending。
 これだけで『強襲脚』シートの並び替えが行われる。

 あ。コードを見ていて気づいたが、この並び替えの処理の前後にある、
  name = 強襲最適リスト.Value
 と、
  強襲最適リスト.Value = name
 これ、必要じゃないな。
 なんかボタンを押したら、勝手に最適リストの表示が変わったことがあって、元の表示されている名前を残しておこうとしたのだが、必要ないみたい。

 あと、全体的に前回のに比べて遅くなっている。
 それは値が変更されたときに色塗りする処理、
  Private Sub Worksheet_Change(ByVal Target As Range)
 を、
  Private Sub Worksheet_Calculate()
 にしたから。
 "Worksheet_Change"はセルの値が変更されたときに行われる処理。
 それに対して"Worksheet_Calculate"は再計算されたときに行われる処理。

 なんで変更したのかというと、「強襲」などの最適ボタンの隣にある、最適リストで脚部を選ぶのだが、それで選んでもWorksheet_Changeは値が変更されたとは判断してくれない。
 それは、最適リストで選ぶのは並び替えが行われた『強襲脚』シートのほうであって、『アセン』シートのほうの変更ではないからなのか、Worksheet_Changeは、エンターキーが押されたタイミングとかで判断しているからなのか。
 なもんで、最適リストで脚を変更しても、脚部のA+とEとかのパラメータは変更されるのに、その色塗りの処理が行われない。
 で、なんかないかな、と探したら、再計算で処理が実行されるWorksheet_Calculateがあった。A+などのパラメータは変更されるのだから、再計算のWorksheet_Calculateで処理が行われるはず。

 で、Worksheet_Changeだと変更されたセルが引数として与えられるから、頭部が変更されたのであれば頭部の色塗り、とIF文で判定していたが、Worksheet_Calculateは引数がないので、頭部の変更であっても全部の色を塗りなおすようになった。
 判定文はなくなったけど、処理が4倍になったから前より遅くなっているはず。

 で色塗りも、前は↓こんな感じだったが、
  bcolor = colorSet("F5")
  Range("F5").Interior.ColorIndex = bcolor
  Range("G5").Interior.ColorIndex = bcolor
  bcolor = colorSet("F6")
  Range("F6").Interior.ColorIndex = bcolor
  Range("G6").Interior.ColorIndex = bcolor
  bcolor = colorSet("F7")
  Range("F7").Interior.ColorIndex = bcolor
  Range("G7").Interior.ColorIndex = bcolor
  bcolor = colorSet("F8")
  Range("F8").Interior.ColorIndex = bcolor
  Range("G8").Interior.ColorIndex = bcolor

 同じような処理を何回も行っているので、これを繰り返し処理にした↓
  For i = 11 To 14
   背景色 = colorSelect("H" & i)
   Range("H" & i).Interior.ColorIndex = 背景色
   Range("J" & i).Interior.ColorIndex = 背景色
  Next

 このFor文は、最初"i"は11でその下の処理を行い、Nextまで行ったらiを1カウントアップしてi=12となり、iが14になるまで同じ処理を繰り返す。
 このカウントアップ用の変数iは、"Dim i As Integer"で整数型の変数であると宣言をしている。

 "colorSelect("H" & i)"は、iが11のときは、colorSelect("H11")を意味する。
 なんで?とも思うが、こういうものなんだろう。
 コンパイラが、「"&"来ました。その後ろはiです。iは今11です」「んじゃ、"H"は"H11"にしろ」とか処理しているんだろう。

 あ、前回のcolorSetプロシジャは、"colorSelect"に名前を変更。
 行われているのは、setじゃselectだな、ということで。

 今回のプログラムはこんなところです。

↓クリックお願いします。
人気ブログランキングへにほんブログ村 哲学・思想ブログ 哲学へblogram投票ボタン

Excelでボーダーブレイクのカスタマイズ計算2

 最近、もうこれしかやっていない、Execlでカスタマイズ計算。

 えー、武器データの一覧を追加してみた。
 あと、頭胴腕と武器を選択したら、最適な脚部を表示する機能を追加。役に立つか分からんけど。

 →ダウンロードはこちら
bbexcel03.jpg
 背景画像は付いていませんので、SEGAの公式サイトからダウンロードしてください。

 背景画像の設定方法。
 1、SEGAの公式サイトから、キャラクターが右に寄っている壁紙をダウンロードする。
 2、アクセサリのペイントで縮小する。私の環境は1024x768なので1600x1200の壁紙を、1024÷1600=0.64で、水平方向と垂直方向を64%にする。
 3、壁紙によってはキャラクターが片寄っていることもあるので、その場合、右に移動させる場合は%を大きくし、左側に移動させる場合は%を小さくする。
 4、Excelの「書式」→「シート」→「背景」で設定する。背景を削除する場合は、「書式」→「シート」→「背景の削除」

 データ入力。
 自分が購入できる装備の項目を青文字で表示するために、所持している装備と素材を入力する。その必要がなければ入力はいらない。
 『素材』シートでは、所持している数を入力。
 『頭』『胴』『腕』『脚』『武器』シートでは、[所持=0]の列に、所持していたら"0"を、所持していなければ"1"を入力する。
 前のバージョンの「カスタマイズ計算」に入力済みであれば、[番号]で昇順になっているのを確認して、コピー&ペーストで。
 あ、貼り付けるときは、「形式を選択して貼り付け」→「値」で貼り付ける。
 『武器』シートは、ちょっと面倒くさくなった。

 データを入力すると、所持しているものは黒文字、持っていないけど購入できるものは青文字、素材や勲章が足りなくて購入できないものは赤文字になる。
 『頭』『胴』『腕』『脚』シートで、「データ」→「並べ替え」で、並び替えてみたりとか。

 そのときは、装甲であれば[装降順]を「最優先されるキー」にして、「降順」で並び替える。
 所持している装備だけで並び替えるときは、「最優先されるキー」を[所持=0]に、購入できる装備も含めて並び替えるときは、「最優先されるキー」を[購入=0]にして、「2番目に優先されるキー」を[装降順]などにする。

 武器データは並び替える必要はないので、こんな感じにした。

 [威力]の、たとえばヴォルペ・スコーピオは「370(x3)」となっているが、(x3)は三点射を意味する。

 また[タメ倍率]の「1.50/2.00」とは、チャージできる武器、たとえばアームパイクはチャージなしの通常攻撃だと4500ダメージ。これが1段階のチャージだと「1.50」倍され、6750ダメージ、2段階のチャージだと「2.00」倍され、9000ダメージになる。特殊攻撃も同様の倍率がかかる。

 あと、特別装備の[ミリ残し]。SPを使い切ったときにチャージにかかる時間が[チャージ]のほうで、SPをギリギリ使い切らないでフルチャージにかかる時間が[ミリ残し]。[ミリ残し]のほうが回復が早い。

 データはwikiのを使ったので、まだ分からないものは「?」になっている。

 使い方。
 『アセン』シートで、①や②のパーツを選択すると、各パラメータが反映される。

 で、③の「強襲」などはボタンになっている。
 これを押すと『強襲脚』シートで、重さを考慮したダッシュ順で並び替えが行われる。
 その後に④の▼を押すと、そのダッシュ順のリストが表示される。
 もしダッシュが同じ値だった場合は、独断と偏見で、装甲→歩行の順番にソートされている。
 だから、リストに表示されるダッシュの右は装甲で、その右が歩行になっている。

 歩行→装甲のほうがいい場合は。
 1、『強襲脚』『重火脚』『狙撃脚』『支援脚』シートのD列とE列を入れ替える。
 2、「Alt+F11」でVBEを開き、「強襲最適ボタン_Click()」プロシジャの、
  key2:=Sheets("強襲脚").Range("J4"), order2:=xlDescending, _
  key3:=Sheets("強襲脚").Range("K4"), order3:=xlDescending

   ↑これを、↓これに変更する。
  key3:=Sheets("強襲脚").Range("J4"), order2:=xlDescending, _
  key2:=Sheets("強襲脚").Range("K4"), order3:=xlDescending

 3、2と同様に「重火最適ボタン_Click()」「狙撃最適ボタン_Click()」「支援最適ボタン_Click()」プロシジャも変更する。

 で、[強襲ボタン]を押して最適な脚を選択すると、機体の脚パーツも変更される。
 機体の脚パーツと強襲・重火力・狙撃・支援の最適リストはリンクしているので、どれか一つを変更したら他のも全部同じになるのは仕様です。
 並び替えの『強襲脚』などのシートは各兵装で独立しているので、コンボボックスの値は変更されても、リストの並び順が変更することはない。

 あと、私の環境(画面が小さい)の問題でもあるが、⑤の「弾薬BOX」が見えにくくなるのは、「タスクバーをほかのウィンドウの手前に表示する」にしているから。「タスクバーを自動的に隠す」にしとけば大丈夫。
 WindowsXPは、リストが画面外に隠れる場合、リストを上に表示したり、適切な表示にしてくれるはずだが、タスクバーの幅で見えなくなっているのは考慮してくれないみたい。だからこれはしょうがないと思う。
 Excelのほうで対策するには、1行目を「非表示」にするとかでなんとか。ただし1行目を削除してしまうと、マクロ部分が動かなくなってしまうので注意。
 これと同様に、重火力と狙撃の最適リストも下2行が見えない。まあ、最適でないものが見えなくても問題ないと思っているが。

 で。データに間違いがあったり、マクロが変な動作することがあったら教えてください。

 あともう少し修正すれば、自分が考える形になりそうです。

↓クリックお願いします。
人気ブログランキングへにほんブログ村 哲学・思想ブログ 哲学へblogram投票ボタン

ボーダーブレイクで学ぶExcel入門

 えー。せっかくExcelを勉強したんで、メモ代わりに残しておきます。
 まずは、本当に簡単なマクロの説明から。
bbexcel02.jpg
 →ダウンロードはこちら(背景画像は付いていません。SEGAの公式サイトから入手してください)

 ①のドロップダウンリストで、パーツを選択すると②の各パラメータが変化します。
 これは、たとえば頭部の場合、ドロップダウンリストで選択された文字列を『頭』シートからVLOOKUP関数で探し、F列には『頭』シートの[装甲]、G列には[装降順]の値を持ってきます。

 で、ボーダーブレイクの装甲は、A+、A、B+、B、C+、C、D+、D、E+、Eの10種類あり、これをABCDEで色分けしたい。
 Excelには「書式」→「条件付き書式」があり、これでセルの値を判定して色を変えることができる。
 しかし。この条件付き書式では3つしか判定できない。だからデフォルトをいれて4色ということになります。
 Excel2007ならいくらでも判定できるみたいですが、Excel2003なもんで。
 で、マクロを使った。

 マクロのコードを書くときは。
 「ツール」→「マクロ」→「Visual Basic Editor」で(プロジェクトエクスプローラが表示されていなければ、「表示」→「プロジェクト エクスプローラ」で表示し)、左側に表示されているであろうプロジェクトでシートをダブルクリックする。「Alt+F11」でVBEを開いてもいいし、Excelのシートタブを右クリックして「コードの表示」でもいい。Excel2007はちょっと違うみたい。

 で、「(General)▼」の▼を押して「Worksheet」を選択。すると勝手に、
  Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  End Sub

 と記述されるが、これは無視。
 次に「SelectionChange▼」の▼を押して「Change」を選択する。すると、
  Private Sub Worksheet_Change(ByVal Target As Range)

  End Sub

 と記述される。こっちのほうを使う。

 じゃあ、Worksheet_SelectionChangeってなんだ?ということだが、これはセルを選択したときに実行されるプロシジャ(手続き)みたい。
  Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   MsgBox Target.Address(False, False)
  End Sub

 と記述して、シート上でセルをクリックするとメッセージボックスに選択したセルが表示される。
 まあ、"SelectionChange"なんだから、その言葉そのまま。

 それはさておき、Private Sub Worksheet_Change(ByVal Target As Range)のほう。
 「Private Sub」ってなんじゃ?とも思うが、「Worksheet」を選択すると勝手に出てくるんだから、これはこういうものなんだろう。VBAでは"Public"と"Private"があるみたいで、Privateはそのモジュールでのみ呼び出し可能となる、みたい。こう書いていても自分でもよく分からない。まあ私は、必要としていないことには全く関心がないから。必要になったら調べよう。

 で、Worksheet_Change。
 これはシート上のセルの値が変更されたときに発生するプロシジャ。
 C2のドロップダウンで、頭部パーツの文字列が変更されたときとかに。

  Private Sub Worksheet_Change(ByVal Target As Range)
   MsgBox Target.Address(False, False)
  End Sub

 と記述して、シート上で任意のセルに値を入力すると、メッセージボックスが出る。

 セルに、普通に"1"と入力すると、もちろんメッセージが出る。じゃあ、そこにまた"1"を上書きしたらどうなるのか?
 またメッセージが出た。なんか決定(エンターキー)で判定しているような感じ。
 入力している文字をデリートキーで消した場合も反応する。

 "ByVal"は「値渡し」ということらしい。
 これのほかに"ByRef"もあるらしいが、これは「参照渡し」らしい。こっちはポインタとかいうヤツか?

 "Target"はプロシジャ内で使う変数。値が変更されたセルの情報がセットされるのだろう。
 この"Target"に".Address"を付けて、"Target.Address"にすれば、値が変更されたセルのアドレスを取得できる。
 "Target.Row"は行数、"Target.Column"は列数、"Target.Value"はその値が取得できる。

 "As"で、データの型を指定する。たとえば、
  Dim bcolor As Integer
 だと(Dimは変数の宣言で、プロシジャ内で"bcolor"を変数として使うと宣言し)、"bcolor"という変数はInteger(整数型)だと指定する。これが、"Integer"ではなく"String"だと文字列。
 そして、"Target As Range"の場合は、Targetはセル(Range)です、ということ。

 で、カスタマイズ計算の次の行は変数の宣言。
  Dim bcolor As Integer
 この変数は漢字でもいい、というのを今知った。あとで意味の分かりやすいものに変えておくか。

 次の行は、
  If Target.address(False,False) = "C2" Then
 "If"は条件文で、Targetのaddressが"C2"だったら(つまり頭部が変更されていたら)次の処理を行う。

 で、この"Target.address"。
  MsgBox Target.address
 で、どういう値が入っているか見てみると、表示されるのは"$C$2"となる。これは、
  MsgBox Target.address(True,True)
 の場合と同じ。引数を省略したときはTrueで処理されるということ。
 $Cの"$"は絶対参照を意味し、$Cは列のほうで$2は行のほう。
 で、Target.address(False,False)だったら、相対参照になる。

 いまいち、相対参照と絶対参照のどっちがいいのか、分からない。
 シート上で、コピー&ペーストするなら、相対参照と絶対参照を使い分けたほうが便利だが、この場合はどっちでもいいような気がするのだが、プログラマさんならどう考えるのだろう?
 絶対参照にする場合は、
  If Target.address = "$C$2" Then
 に変更する。

 次の行は、
  bcolor = colorSet("F5")
 "colorSet"というプロシジャ(関数)を作って、それに"F5"を引数として渡す。
 [装甲]や[射撃補正]や[索敵]や[ロックオン]ごとに色を指定しなければいけないのだが、色を指定するのは共通する処理だから、それ用のプロシジャを作って行う。そうじゃないとコードが妙に長くなってしまうから。

 "F5"というのはただの文字列。
 Rangeにこの文字列を渡せば"Range("F5")"となり、F5のセルに何が入っているか分かる。F5のセルにはA+とかEとかが入っていて、colorSetではそれを見て「A+なら赤」と設定する。

 もし頭部が変更されていたら、F5の[装甲]の色を設定→F6の[射撃補正]の色を設定→F7の[索敵]の色を設定→F8の[ロックオン]の色を設定となる。
 そしてcolorSetに"F5","F6","F7","F8"を渡して、それぞれ色を設定する。

 で、colorSetの解説。
  bcolor = colorSet("F5")
 このように値を返すプロシジャの場合、"Function"と指定する。値を返さない場合は"Sub"。

  Function colorSet(ByVal address As String) As Integer
 プロシジャ名の後の"(ByVal address As String)"は、colorSet("F5")の引数"F5"は、このプロシジャではaddressと呼び、それは文字列ですよ、ということ。
 その後の"As Integer"は、colorSetから返す値は整数型ですよ、といこと。
 "bcolor = colorSet("F5")"のbcolorには色の数字が入る。Excelでは標準の色として56種類用意されていて、その色番号。
 
 次に変数宣言。
  Dim bcolor As Integer
 メインと同じ"bcolor"ではなく、なんか別の名前のほうがいいと思うのだが、面倒くさくて。

  Select Case Range(address)
  Case "A+"
   bcolor = 38

 これのRange(address)は、Range("F5")のこと。
 シート上のF5が"A+"だったら、bcolorに38が入れられる。38は赤っぽい色。

 F5が"A+"じゃなかったら、次の
  Case "A"
   bcolor = 38

 で、「んじゃ"A"かよ」と判定する。"A"だったら同様に、bcolorに38が入れられる。
 それを"E"まで判定する。

 Select条件文の終わりには、
  End Select
 と書く。
 で、
  colorSet = bcolor
 と、colorSetが返す値をセットして、
  End Function
 で、このプロシジャは終了。

 んで、戻ってきて、
  Range("F5").Interior.ColorIndex = bcolor
 F5のセルをcolorSetの結果の色で塗りつぶす。
 塗りつぶす場合は、Range("F5")とセルを指定して、そのあとに".Interior.ColorIndex"と付ける。
 ".Interior"ってなによ?とも思うが、たとえば、".Font.ColorIndex"なら文字の色が変わるし、".Interior.Pattern = xlChecker"なら網掛けになる。そんな感じ。

 で、F5の隣の"100%"とか、数値の部分も同じ色で塗りつぶす。
  Range("G5").Interior.ColorIndex = bcolor
 これで、頭部を変えた場合の、[装甲]の色づけが終了。
 頭部のパラメータは、ほかに[射撃補正][索敵][ロックオン]があるので、[装甲]と同じように判定し、色を付ける。
 で、これは変更されたのが頭部だった場合の処理。

 変更されたのが頭部でなければ、
  ElseIf Target.address(False, False) = "C3" Then
 次の、C3の胴部か?という判定文。胴部だったら、頭部と同じように色の設定を行う。

 で、腕と脚も同じように判定し、If条件文の終わりには、
  End if
 と書く。

 これだけのマクロ。
 
↓クリックお願いします。
人気ブログランキングへにほんブログ村 哲学・思想ブログ 哲学へblogram投票ボタン

Excelでボーダーブレイクのカスタマイズ計算を作ってみた

 ここ数日、満足に睡眠も取らず何をやっていたかというと、タイトルにあるとおり。
 もちろんカスタマイズは「Budget's Border Break」で十分なのですが、パーツの性能でソートできたらいいんじゃね?とか思って、だったらExcelで作ってみようと思ったわけです。Excelなんて、本当に簡単な機能しか使ったことがない私が。
 で。やっと完成し、「BORDER BREAKアップローダ」を見てみたら、「素材&パーツ管理(BB-Data)」なんてファイルがあって、落としてみたら、これがExcelによるカスタマイズ計算ができるものだった。

 あるじゃん。
 しかも更新履歴を見たら、1年以上も前に作られたものだった。
 でも、ソートはできないみたいなんで、まあ、公開してもいいだろうと。せっかく作ったんだし。
 で、こんなの↓
bbexcel01.jpg

 これってアレと同じじゃん。
 いやいや。使い慣れているのと同じほうがいいでしょ。
 で、アップロードしてみました。→ダウンロードはこちら
 実は今までアップロードなんてしたこともなく、どうなんでしょう?
 Excelは2003です。2007ならマクロを使わなくても済んだのに。
 なんで2003は条件付き書式が3つしかないんだ。ABCDEの5色が必要なのに4色しか判定できない。
 まあ、勉強ということでVBAを使ってみました。

 で。何よりも大切な背景画像が入っていません。
 SEGAのオフィシャルにある画像を配布するのもアレかな、と思って。

 そういうことで、まずは背景画像の設定。
 SEGAの公式サイトの「ダウンロード」→「壁紙」からダウンロードする。キャラクターが右側に寄っている「フィオナ01~03」「チヒロ」「ヒルダ」「チェスカ」「グラント」がいいだろう。私は1600×1200のをダウンロード。
 その画像を、アクセサリに入っているペイントで開き、「変形」→「伸縮と傾き」で縮小する。 私の環境だと1024×768なんで、1024÷1600=0.64で、水平方向と垂直方向を64%にする。
 で、加工した画像を保存して、Excelの「書式」→「シート」→「背景」で設定する。背景を削除する場合は、「書式」→「シート」→「背景の削除」。
 画像によってはキャラが寄っていることもあるのでペイントの加工をやり直す。右に移動させる場合は%を大きくし、左に移動させる場合は%を小さくする。
 これでもう満足してしまってもいいが、一応、使い方の説明↓

 準備。
 『素材』シートで、所持している素材と勲章を入力する。手作業で。
(「BB-Data」だとBB.net for PCからデータを持ってこれるみたい。すげぇと思った。でも私はBB.net for PCを使っていないんで)
 入力する素材と勲章は、パーツの購入で必要となるものだけ。

 次は、『頭』『胴』『腕』『脚』『強襲』『重火力』『狙撃』『支援』の各シートで、[所持=0]の列に、持っていれば"0"を、持っていなければ"1"を入力する。手作業で。
 ドロップダウンになっているが、それは無視して直接"0"か"1"を入力したほうが速い。一応、入力が必要です、ということでドロップダウンにしただけ。
 デフォルトで"0"(所持している)にしたが、持っているパーツが少なければ、たとえばB2に"1"を入力してB2をコピー。それをB3~B34の範囲に貼り付けしてから、持っているパーツに"0"を入力したほうが速い。
 [番号](昇順)でソートするとBB.netと同じ並び順になると思う。かなり買っていないパーツがあるので、合っているかどうかは自信がない。

 で、これが完了すると、『頭』『胴』『腕』『脚』『強襲』『重火力』『狙撃』『支援』のシートで、青や赤になる行が出るはず。
 まず黒文字は、所持している装備。
 青文字が、所持していないけど購入できる装備。
 赤文字が、素材や勲章が足りなくて買えない装備。

 で、『頭』シートで説明すると、[重量昇順]は、そのパーツの重量。
 「並び替え」を行うときは「昇順」で行うと、軽いほうから、つまり性能がいいほうから並び替えられる。
 [装甲]なんかは、A+~Eなんで、並び替えがうまくいかない。A+とAでは、Aのほうが優先されてしまうから。だからその隣の列の[装降順]で並び替える。装甲で並び替えたいときは降順で、という意味。まあ、昇順で並び替えるのは、重量とエリア移動だけだが。

 で、すべてのパーツで並び替えるときは、「データ」→「並び替え」で、最優先されるキーを[装降順]で並び替えればいい。
 所持しているパーツの中で並び替えるときは、最優先されるキーに[所持=0](昇順)、2番目に優先されるキーに[装降順](降順)で並び替える。所持していないものは"1"が設定されているから、行の後ろのほうになる。
 持っていないけど、購入できるパーツも含めて並び替えるときは、最優先されるキーを[購入=0](昇順)にして並び替える。
 ↑これ。これだけがやりたかったんです。
 並び替えをリセットするときは、[番号](昇順)で並び替える。

 で、『アセン』シートの説明。
 ほぼ「Budget's Border Break」と同じ。パーツ(黄色の部分)をドロップダウンリストで選択すると数値が反映されます。

 【機体重量】は、頭胴腕脚の重量を合計した数値。その下の【積載猶予】は、重量耐性から機体重量を引いた数値。この数値を目安に、各兵装の武器を選択する。スペースが余っていたのでこんなのを表示してみた。

 【強襲】の横の数値が、武器の重量込みの積載猶予。黒字だと、まだその数値分、余裕があるということ。赤字だと重量が超過しているということで、移動が遅くなる。その横のパーセント分、遅くなる。
 たとえば、超過なしのダッシュが21.0m/sで、超過が20%だと、21.0-(21.0×0.2)で16.8m/sになる。

 【走】がその数値。ダッシュボタンを押したときの初速。
 その下の数値は、ダッシュボタンを押し続けたときの巡航速度。初速の6割程度の速度になる。フルヤクシャだとセットボーナスで0.6m/s速くなるが、巡航速度もそのまま0.6m/sプラスされるのか、それとも6割の0.36m/sのプラスになるのか、分からない。とりあえずそのままの0.6m/sプラスしている。

 【装備重量】は、装備の合計。意味のない数字だが、スペースがあったので。

 【装甲平均】は、頭胴腕脚の装甲を足して4で割った数値。爆発と近接のダメージにはこれが適用される。射撃のダメージへは、各部位の装甲で判定する。

 頭胴腕脚のすべてが同じ機体だとセットボーナスが発生し、それの表示が【セットボーナス】。

 各パーツの性能は、エリア移動以外、数値が高いほうが優れている。
 【巡航】(速度)のパラメータはいらんかも知れないが、各兵装のほうの巡航速度の表示が面倒くさくなるので、ここに入れといた。

 【斬撃耐性】は、このアセンブルでどの程度の攻撃まで耐えられるかという数値。
 「ピ槍1→D」とは、ピアッシングスピアの通常攻撃を当て、それでひるんだ敵にダッシュ攻撃がつながるというもの。
 「Budget's Border Break」では、【斬撃耐性】はダメージを表示しているが、耐久値MAXのときに食らった場合の、残り耐久値にしてみた。

 「Budget's Border Break」と同じほうがいいという場合、たとえばI3は、「=IF(INT(12500*((200-$G$2)/100))<10000,10000-INT(12500*((200-$G$2)/100)),"即死")」という式が入っているが、これを「=IF(INT(12500*((200-$G$2)/100))<10000,INT(12500*((200-$G$2)/100)),"即死")」にする。IFの真の場合にある「10000-」をなくす。
 これをその下の項目すべてで行う。式で使っている「12500」などは、その武器固有のダメージなんで、「コピー→貼り付け」で編集してはいけません。

 で。たとえば頭がクーガーⅠだとする。これより射撃補正が高いパーツを探したい。
 その場合、『頭』シートで[射降順](降順)で並び替える。
 んで、また『アセン』シートに戻って、頭のドロップダウンを開いてみると、『頭』シートでの並び替えが反映されていて、ドロップダウンのリストが射撃補正順になっている。
 まあ、こういうカスタマイズ計算です。

 で、各データは手作業で入力したので、どこか間違いがあると思う。
 間違いがあったら、コメントやメールや掲示板で報告してもらえるとありがたい。

↓クリックお願いします。
人気ブログランキングへにほんブログ村 哲学・思想ブログ 哲学へblogram投票ボタン