ただの備忘記録

忘れないように記録を残します。忘れるから記録に残してます。そして、その記録が役立つといいかな。

【Excelのメモ】1行または1列置きに計算する方法

2018年03月26日 | IT全般

Excelを使っていると1行(1列)置きに計算をしたいときがあります。
今回は合計とカウントの方法をメモに残します。

【1行/1列置きに合計】

[B14]=SUMPRODUCT((B4:B12)*(MOD(ROW(B4:B12),2)=MOD(ROW(B4),2)))

使用する関数はSUMPRODUCTです。この関数には2つの使い方があります。
1つは範囲を2つ指定してそれぞれの積と和をえるというもの。電卓でのメモリ計算のように単価と個数の組みで積を計算し、それぞれ合計を算出します。
もう1つは、範囲指定と条件式を組み合わせたもの。条件式でTRUEは1、FALSEは0の扱いですので、これを範囲の順に適用し、また範囲の数値と組み合わせて計算します。

では、B14の計算式を例に見てみましょう。
SUMPRODUCTの範囲指定は順に数値が取り出され、1行毎に計算結果が出て、それらは和の値となります。
SUMPRODUCTの中には2つの式があります。1つ目は「(B4:B12)」の部分で表の数値をそのまま取り出しています。
2つ目は条件式の部分「(MOD(ROW(B4:B12),2)=MOD(ROW*B4),2))」です。条件式の結果は最初の行が1、次が0になり、あとはそれを繰り返します。(この詳細は後ほど)
2つの式は「*」で結ばれていますので、B4の数値と1の積、B5の数値と0の積と続いて、B12までの範囲で積を計算したらそれらの合計が算出されます。
これで1行毎に奇数行だけが合計として表示されます。

条件式の仕組みを見てみましょう。
「ROW(B4:B12)」は順に行番号を算出します。ROW(B4)は4です。1行毎に結果が欲しいので、MOD関数を使って行番号を2で割った余りを調べます。余りは0になりました。次の行は余りが1、次は0と交互に余りが変わります。
これらを条件式のもう一方と比較します。もう片方は「MOD(ROW(B4),2)」です。常に範囲の最初のセルと比較しますので、その行を起点に1行置きに同じ余りとなるのです。
これにより、B4ではTRUE、B5ではFALSE、B6ではTRUEと繰り返され、TRUEの時だけセルの「数値*1」が実行され、B4 B6 B8 B10 B12の合計が最後に計算されるという仕組みです。

B14の式はB15にそのままコピーして使えます。

【1行/1列置きにカウント】

[B14]=SUMPRODUCT((MOD(ROW(B4:B12),2)=MOD(ROW(B4),2))*(B4:B12="○"))

カウントをする場合も条件式は前述の合計の場合と同じです。
今回は2つの条件式を掛けています。

今回もB14を例に見てみましょう。
1つ目の条件式は行毎に1と0を算出しています。
2つ目の条件式は「(B4:B12="○")」ですので、セルに○が入っている場合にTRUEとなります。
これにより2つの条件式の積が算出されますので、B4は1、B6は1、B8は0、B10は1、B12は0となり、その和は3となります。

2つ目の条件式を変えると様々なパターンに対応できます。
「(B4:12<>"")」では、空欄でない場合にカウントしますので○以外の文字が混ざっていてもカウントします。
「(B4:12>0)」では、0より大きな数値が入っているセルのみ算出します。

【SUMPRODUCT関数】

条件式のない場合の使い方もメモしておきます。

「=SUMPRODUCT(B4:B16,C4:C6)」と2つの範囲を指定します。
答えは「B4*C4+B5*C5+B6*C6」の値となります。


【PS4】真・三國無双8

2018年03月04日 | 日記

今回はダウンロードで購入しました。
あれこれソフトを同時に遊んでいるとディスクの入れ替えが面倒なので、最近はほとんどダウンロードで購入しています。
ダウンロードは3日ほど前から入っていたようで、カウントダウンが始まって発売日の0時には使用することが出来ました。

いろいろとバグはありますが、その内直るでしょう。
バグ報告をすると情報提供の依頼がありましたので、動画での実態報告をしました。

【オープンワールド】

オープンワールドの試みは気に入っています。
馬であちこち走り回っています。馬が成長するのが良いですよね。
オートランの機能もとてもありがたい。あと、一度行った場所にはワープして進めます。

見張り台と道標について、道標があまり意味をなしていません。ワープ先ではありますけど、近くに見張り台があることが多く、周囲の情報を得るのはそれで十分です。役割が被っていて、道標が役立っていません。
また、地図上で地名がほとんど分からないこともあり、道標で地名が分かれば良かったかなと思います。
地名が表示されるのは城、街、景勝地ですが、景勝地も○○が見える場所という表記もあり、その○○がどこかは分からない。もちろん、一度行った場所なら表示されるのですが、道標や見張り台ではそれら情報は開示されません。

【移動】

これはオープンワールドでは非常に重要です。
馬がありますし、加速もできますのでスピードに関しては十分です。ワープもありますから遊び時間が少なくても安心です。
一番難しいのは段差をどうするかだと思います。どんなに大きな段差も乗り越えられるのに、小さな段差に躓くようなゲームも多々あります。

この8では鉤縄という便利アイテムがあり、どこでも登れます。と言いたいところですが、軒の突き出た屋根や、絶壁の壁だと登れない場合があります。
最初は、鉤縄便利過ぎないか?と感じて、お城の開城は簡単にできてしまいます。消費アイテムにしてしまって良かったと思います。
見張り台の梯子は面倒なので鉤縄で登ってしまいます。
景勝地の周辺だと登れる場所に鎖が垂れているのですが、鉤縄でないと登れません。これはちょっと違和感あります。

とは言え、基本的にどこでも入れるし、斜面は角度によって登れないようになっていますので、これは視覚的に分かりやすいし、チャレンジもしてみたくなるので良いシステムだと思います。ただ、崖を降りるときに馬が斜面を綺麗に滑り落ちないのが、見た感じも良くないです。

【戦闘】

7までのコンボだとパターンが決まってしまうし、実は登場人物が多すぎて一人一人の攻撃パターンを覚える気はありませんでした。
武器も90人だから90種類(強さに6段階)ありますけど、共用でも全然構わない。むしろ、全部集めるのは段々しんどくなっている。今回は古銭を集めれば交換できるので、種類があっても問題ないですね。

敵はわらわら、でも攻城戦だと隊列を組んでいたりして、そこに馬で突撃するのは良いですね。ただ、兵隊に動きがないので仕事してるのは武将だけだったりして、数いる意味がまったくない。人数増やすよりも、一人一人がちゃんと動くようにするべきではないだろうか。
基本的に部隊長や指揮官を倒せば隊伍は崩れますし、武将だけ倒していたら戦闘は短時間で終わります。

でもね、原点である無双の爽快感は感じられません。戦国無双の神速攻撃があると動きも機敏だし、なにより移動しながら攻撃できるので爽快感が高いです。
今回はリアクト攻撃でフィニッシュできるのですが、向きやタイミングでうまく決まらないので、テンポが悪くなってしまいます。
また、防御をする敵を崩せないこともあり、武将よりしぶとい一般兵がいたりします。レベル差も関係なくしっかりガード。□でも何度か当てるとガード崩せる方が良い。そこはレベル差で変化させるとより良いかと思います。
また、奮起した武将がレベルに関係なく強すぎます。ガードは堅い、隙が無い。今回はHPがやたら高いので無駄に面倒な作業が増えます。こちらもレベル差をガードに反映させてもらえると遊びやすくなります。

【武器】

各キャラ毎に専用の武器がありますが、他の武器も使えます。特にデメリットはありません。1系統の武器に基本性能が異なる6種類あります。
上位の武器は店で購入するのではなく、作り方の竹簡と素材を手に入れて作ってもらいます。
武器には鍛錬というメニューがあり、6つの宝玉を付けることで性能を向上させます。これちょっと分かりにくい。どの数値がどう変化するかグラフィカルに表示して欲しかった。並べ替えもできないので、余計な手間がかかります。
宝玉は全員共有になっているのは良いのですが、武器毎に取り替えしないと行けないのです。どう考えても一番良いものを付けると思うのですが、上位武器を手に入れたとき、新しい武将で始めるとき、全部付け替えます。家具のようにパターンでセットできるなら良かったかな。
鍛錬は面白そうに見えて、実はそんなに突き詰めて使わない機能でした。

大型兵器類ですが、HPが見えないことがよくあります。そもそも、人が押しているのだから、兵士を攻撃したら止まるというのが一番良いかと。

【ボタン操作】

ボタンの使い方が少し変わりました。
△で一気にとどめを刺せるのは良いですね。状況によって△ボタンの使い方が変化するのも考えられているとは思いますが、逆に言うと思った行動ができないこともあるということ。
また、武将と戦闘中に周りの兵に△が点灯するとそちらに攻撃が移ります。倒れた兵に△が点灯していても、向きによっては攻撃してくれない。
複数の兵に△が点灯したとき、一人一人倒すのはテンポが悪いので、まとめて倒せるようなアクションになると良いかと。
△の長押しで優先的にフィニッシュ発動が一番テンポが良いように思います。

ボタンの使い方で少し困っているのが、×ボタン。これは以前からですが、×は元々ジャンプボタンで、馬がいると乗り降りすることができます。馬に乗ってジャンプするとき、思わず×を押してしまったり、敵と戦っている最中に馬に乗ってしまうという事故があります。
L2でも馬を呼んで乗ることができますので、×で馬に乗る機能はなしにして、馬ジャンプも×にすると分かりやすい。L2が馬の呼び出し、乗り降りにするのが良いと思ってます。今回、オートランがあるので、L2長押しでオートランにすると良いのではないでしょうか。

□ボタンについても少々問題があります。任務を受ける時に□で話しかけます。そこまでは良いのですが、返答は○ボタン、その後の会話はまた□と切り替わります。これがややこしい。会話の最初は□で良いと思いますが、後はどっちでも良いのではないかな。○でも□でも会話が進めばそれで良い。
また、△と同じように攻撃時に離れた敵に突進する動作が□ボタンにもあります。△は狙い時に点灯してくれるのに、□にはそのようなお知らせがありません。これも同様に表示するべきではないでしょうか。

一般兵でも簡単にこちらの攻撃を防御して1対1だと面倒です。そもそも△での防御崩しがうまく機能しないし、次の攻撃が遅すぎて防御されてしまいます。これが武将になると相当手強くなります。
R1で攻撃に変化を持たせられるのですが、属性攻撃をデフォルトにして、R1を使って防御崩し攻撃にして、その場合は気力を消費するようにすればどうだろうか。武器ごと叩き切るくらいの無双ぶりで良いのではないかな。

このようにUIの統一感がなかったり、直感的に操作できない扱いがあるので、ユーザーフレンドリーな設計にして欲しいです。

【船】

船には単なる移動のための船と、船上で戦闘をするための船があります。
戦闘の任務があるときだけ、馬と一緒に乗れる大きな船が出てきます。
どちらの船も航路が地図上には表示されないので移動先が分かりにくい。
大型船については、戦闘場所までの移動にとても時間がかかりますし、戦闘後、港まで動く船がどれか分からないので、泳いで帰らないといけないこともあります。また、船上での戦闘は狭くて単調、しかも敵が落ちると戻ってこない場合があります。自分も移動時に落ちたり、戻るのも手間だしテンポが悪くなるだけで、面白味がない。

【城・街】

街の住民はもっと居ても良いかな。
馬で近づくとさっと避けて欲しい。住民に引っかかるとか止めて欲しい。馬もあちこちひっかかるけど。

【その他】

キャラのステータスで一番良く分からないのが「気力」。確かに回避行動をすると減るんだけど、ほぼ使い道がない。
隠れ家やたき火で休憩すると時間が進むだけなので、戦闘や走り続けると減って、休憩で回復とかでも良かったのではないだろうか。

フリーモードで、ストーリーは無視して、ひたすら国取りをして全国制覇ができると面白そう。リアルタイムEmpireです。

概ね満足しています。
ストーリー展開はもちろん、任務のこなし方などもテンポ良く遊べます。
全体のバランスは良く出来ていると感じます。特に移動に不便を感じないし、戦闘もレベル上げに時間を費やすこともないし、かといって自分が強すぎる訳でもない。
何よりオープンワールドになって、街や戦場(地図上に記載はない)の位置関係が分かるので、方角や距離感によってリアルな感覚を得られるところが堪らない。最高の無双になると思います。


【Photoshop JSX Script】ファイル名の文字化け対策

2018年03月03日 | JavaScript

Photoshopで、開いているファイルの名前を、新規レイヤーの名前にするスクリプト

~~~~~ここから~~~~~
//ファイル名取得
var doc = activeDocument;
var docName = doc.name;
docName = docName.substring(0,docName.lastIndexOf(".")); //拡張子除去
docName = decodeURIComponent(docName); //文字化け対策

//レイヤー構成の取得
var layerObj = doc.artLayers;

// レイヤーの追加
var newLayer = layerObj.add();
layerObj[0].name = docName; //ファイル名をレイヤー名に
~~~~~ここまで~~~~~

ファイル名の文字化けに悩んでいたところ
パス名に日本語が含まれている場合、ファイル名が文字化けするので文字化け対策が必要だと分かった。

★レイヤー名の変更について

var newLayer = layerObj.add(); // 新規レイヤーを追加
newLayer.kind = LayerKind.TEXT; // レイヤー種別をテキストレイヤーに設定
newLayer.name = docName;

だとエラーが出ない。

var newLayer = layerObj.add(); // 新規レイヤーを追加
newLayer.kind = LayerKind.NORMAL;
newLayer.name = docName;

だとエラーが発生。