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投票ボタン
スポンサーサイト

ソクラテス問題

 哲学者ソクラテスは一度も著作を行わなかったので、今日に伝わるソクラテスの姿は、他者の手によって記述されたものである。
 まず、アリストパネスの『雲』という作品でソクラテスが登場しているが、これはプラトンの『ソクラテスの弁明』でソクラテスが言うように、ソクラテス自身とは全く関係ない喜劇である。
 またソクラテスの弟子の一人クセノポンも『ソクラテスの思い出』で、ソクラテスについて記述しているが、これはソクラテスの思想と言うより伝記である。ソクラテスの研究家にも受けが悪いようである。
 そして何と言っても、ソクラテスの弟子プラトンの一連の著作である。これは「ソクラテス対話篇」と呼ばれている。

 そして「ソクラテス問題」とは、ソクラテス対話篇のどこがソクラテスの思想で、どこがプラトンの思想であるのか、その切り分けができないという問題である。
 昔読んだ池田晶子の本でも、「たしかに、その対話篇によって雰囲気の違いがあり、一人ではない複数の思想があるようだ」と書かれていたのを覚えている。
 個々の人が思うソクラテス像、プラトン像に違いはあるだろうが、プラトンの一連のソクラテス対話篇にはソクラテス的なものとプラトン的なものがあるように思う。
 また、ソクラテスの研究者の本を読んでも、「この切り分けをするのが(ソクラテス問題が)今後の課題である」みたいなことを何度も見た。
 もう十年以上も昔のことだが、「そんじゃ、私がエイヤッとやってしまえ」と思ったわけです。

 一般的には、プラトンが師ソクラテスの思想を忠実に後世に伝えることを企図した前期対話篇。そして自らの思想を持つようになって記した後期対話篇。
 この前期のものがソクラテス的であり、後期になるにしたがってプラトン色が強くなる、という理解であると思う。

 しかし私はそうは考えない。
 古代ギリシャでは、知者(たとえばソクラテス)が誰かと対話していたら、聞く者たちがそれを書きとめていたようである。「学校」というものがなかった当時、それが学習方法であったのだろう。

 対話篇『パルメニデス』では、
ケパロス わたしたちはクラゾメナイの家を出て、アテナイに着いてから、中央広場でアデイマントスとグラウコンに出会ったのです。
(中略)「じつはここにおつれした方がたは」とわたしは言った。「わたしと同じ国の市民で、知恵を求めること(哲学)に大へん熱心な方がたなのです。そしてこのアンティポンがゼノンの仲間の一人であるピュトドロスとたびたび落ち合っており、かつてソクラテスとゼノンとパルメニデスが問答をかわした時の、その議論内容をしばしばピュトドロスから聞かされたので、それの暗誦ができるようになっておられる、という話をきかれたのです」(『プラトン全集4』岩波書店/田中美知太郎訳P126)

 と、ソクラテスとゼノンとパルメニデスの問答を聞いていたピュトドロスから、その話を聞かされて暗誦できるようになっていたアンティポン(アデイマントスの義弟)からケパロスとその友人が聞くという形になっている。
 同様に『テアイテトス』や『饗宴』などもそうのような、ソクラテスの問答を聞いていた人から教えてもらった話という形になっている。

 岩波書店のプラトン全集4『パルメニデス』の解説では、
伝えられる対話は、われわれがこれをケパロスから聞き、ケパロスはこれをアンティポンから聞き、アンティポンはこれをピュトドロスから伝えられたというような、遠いへだたりにある。思うにこの間接性の重複は、かなり意識的なものではないかとも疑われるだろう。そしてプラトンはこの対話が事実よりもフィクションに属することを、それとなくほのめかしているのだとも考えられるだろう。(P348)
 と、プラトンの権威・田中美知太郎はおっしゃるのだが、私はプラトンがこの話を聞いたのがケパロスからだったからだと思う。
 つまり、この話はプラトンの創作ではなく、ソクラテスが行った実際の対話を、そのまま覚えている人がいて、その人からプラトンは教えてもらっただけである。

 そして「ソクラテス的な」対話篇とは、プラトンが知人から収集したソクラテスの実際の対話であり、「プラトン的な」対話篇とは、プラトン本人が行った問答や創作した著作となる。
(もしそうだとすれば、キリストや釈迦のものとは違い、ソクラテス対話篇はソクラテスその人の、生の問答であるということになる)
 なぜ、ソクラテスの対話を収集しなければならなかったのかと言えば、プラトンが著作を行うために必要だったからである。

 プラトンのソクラテス対話篇の中には、同名の著作がある。
 アルキビアデスⅠとアルキビアデスⅡ。またヒッピアス小とヒッピアス大である。
 これはどちらかがソクラテスのもので、また他方がプラトンのものとなる。
 ヒッピアスについては簡単で、ヒッピアス大に書かれている記述の中に、ソクラテスの死後に起こったことが書かれているので、ヒッピアス大はプラトンの著作となる。で、ヒッピアス小がソクラテス。
 で、アルキビアデスとなると、もう、クセノポンの『思い出』に出てくるソクラテスっぽいの、ということで、アルキビアデスⅠがソクラテスとなってしまう。あまり根拠はない。なんとなく。で、アルキビアデスⅡがプラトン。

 また『リュシス』については、『ギリシア哲学者列伝(上)』(岩波文庫/ディオゲネス・ラエルティオス著加来彰俊訳P276)で、
またソクラテスは、プラトンが『リュシス』を読み上げるのを聞いて、「おやおや、この若者は何と多くの嘘偽りをわたしについて語っていることだろう」と言った、ということである。
 とあり、『リュシス』はプラトンの著作となる。
 プラトンは、ソクラテスの生前からソクラテスを主人公にした著作を行っており、ソクラテスにとってはアリストパネスと同様のものに思えただろう。
 もっとも、『ギリシア哲学者列伝』は、それまでに伝えられてきたものをまとめた形になっており、その伝えられてきたものに間違いもあり、これも研究者に受けが悪いものとなっている。

 だが、これが事実だとすると、プラトンはソクラテスの思想を理解していなかったことになる。
 だからこそ、ソクラテス的なものとプラトン的なものに分かれているように感じるのである。
 その「なんとなく」感じるものを「エイヤッ」とやってしまえば、以下のようになる。

ソクラテス:エウテュプロン、弁明、クリトン、パイドン、クラテュロス、テアイテトス、パルメニデス、ピレボス、饗宴、アルキビアデスⅠ、テアゲス、ラケス、エウテュデモス、メノン、ヒッピアス小、イオン
プラトン:ソピステス、ポリティコス、パイドロス、アルキビアデスⅡ、恋がたき、カルミデス、リュシス、プロタゴラス、ゴルギアス、ヒッピアス大、メネクセノス、国家、法律
ソクラテス/プラトン:ヒッパルコス、ミノス
クレイトポン:クレイトポン
ティマイオス:ティマイオス
クリティアス:クリティアス

 「ソクラテス/プラトン」とは、ソクラテスとプラトンの対話に思えるもの。
 クレイトポン・ティマイオス・クリティアスは、プラトンの著作ではなく、ソクラテス的なものと同様、それぞれの人たちによるもの。
 『カルミデス』は、プラトンがソクラテスをどのように見ていたかがよく分かる対話篇である。それがプラトンの目に映っていたソクラテスである。しかし、『リュシス』同様、ソクラテスは、そうではない、と言うだろう。

 『カルミデス』では、美少年カルミデスにドキドキするソクラテスの心情が告白されているのだが、しかしそれを書いたのはプラトンである。
 そして『饗宴』においても、クセノポンの『思い出』においても、ソクラテスは少年に興味はなかったと記述されている。
 そして、ディオゲネス・ラエルティオスが伝えるところでは、プラトンこそが少年好きだったらしい。

 プラトンの著作では、前期・中期・後期対話篇と、執筆順序を想定するのが常であるが、ソクラテスが実際に問答を行ったのが、ソクラテスの若い頃『パルメニデス』→刑死の直前『パイドン』という順番でも、プラトンが入手した順番は、『パイドン』→『パルメニデス』というケースもある。
 文献学によって、『パイドン』→『パルメニデス』という順番が推定されても、もちろんプラトンは『パルメニデス』の入手によって、ソクラテスの思想を捨てたというのは正しいが、しかし、ソクラテスの思想の形成に文献学は役に立たない。
 ソクラテスの思想は、『パルメニデス』から深化して、刑死直前の『パイドン』に至ったのであり、それに対しプラトンは、『パイドン』→『パルメニデス』と、ソクラテスがはるか昔に捨て去った『パルメニデス』に囚われることになった。

 また、『テアイテトス』では、
エウクレイデス 書物というのは、テルプシオン、ほかでもない、これなんですがね、ただ中身の話の書き方を僕はこういう風にしたんです。つまり実際のとおりだと、ソクラテスが僕を相手に一部始終を語っておられるところを書くことになるんですが、僕はそうしないで、ソクラテスがその問答相手だと言っておられた、幾何学者のテオドロスとわがテアイテトスとを相手に問答をされることにして書いてみたんです。とにかく実際の話と話の間に入る説明というものは、それがソクラテスの自分自身について言われるいちいちの場合のもの、たとえば「そこで僕は言った」とか「そして僕は言った」とかいうようなものにしても、あるいは他方また応答する者についての、承認したとか、同意しなかったとかいうのにしても、それは書き物にすると厄介なものなんですが、この書き物ではまさにそういう面倒のないようにと思って、そのために僕はその種のものを抜き去って、ソクラテスが直接相手の人々と問答される体に書いたのです。(『プラトン全集2』岩波書店/田中美知太郎訳P143)
 とあり、それまでは、
「…ではないのかね」とソクラテスは言った。
「そうですね」と相手は同意した。

 とするのが普通であったものを、エウクレイデスが、
ソクラテス …ではないのかね。
相手 そうですね。

 と、書き表すように改めたという。
 この『テアイテトス』を入手したプラトンは、それまでに収集していたものも、書き換えられるものはエウクレイデス風に改めただろう。
 そういうことでも、文献学者には悪いが、文献学は役に立たない。

 とは言え、私の分類も確かな根拠はなく、クセノポンが描く『思い出』のソクラテスっぽいものとそうでないもの。
 またソクラテスは『エウテュプロン』で、「親を訴えることは不敬虔である」とするが、それはソクラテスは「神とは親である」と考えていたということ。だから一般とは違う神概念であるものがソクラテスのもので、一般的な神を想定しているのがプラトンのもの。
 そしてまた「イデア」についても、ソクラテスとプラトンでは考えるものが違う。
 そういう微妙な違いによって切り分けたものであるから、説得力がないと言われればそれまでだが。

↓クリックお願いします。
人気ブログランキングへにほんブログ村 哲学・思想ブログ 哲学へ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投票ボタン