2019年6月15日土曜日

【EXCEL】フリガナ設定されてないセルにだけフリガナを振る

フリガナ設定についてはちょっとググると

SetPhonetic

と言うメソッドがヒットして、For〜NextとかLoopを使えば全レコードに自動でフリガナ設定出来ることはわかります。

でもそこから一歩進んで、タイトルのようなフリガナ設定されてないセルにだけフリガナを設定したいときにどうすればいいのか、と言うことについて書いてある記事というのは見当たりませんでした。

…まあ、Phoneticプロパティを参照して仕様を確認したらあとは自分で考えろや(仕様を確認しに来るくらいだからそのくらいのアタマはあんだろがよ?)と言うことなのかもしれませんが。一応記載しておくと、以下の構文で取得できます。

Range. Phonetic. Text = “文字列”

=(イコール)の左が取得、右が設定です。

これで自由自在に設定出るだろう、と思うところなんですけど、ここに落とし穴がありまして、「フリガナが設定されていないセル」のPhonetic.Textを取得したときの結果は「""」(長さ0の文字列)ではないのです。なんとこれがOfficeのサイトにも載っていないと言う。

実際自分でも仕様を確認して試してみて分かったんですが、上記処理の結果は「セルの値」を返します。つまり


この画像の状態の場合返ってくる値は「"不可説不可説転"」であるという訳。マジか。

さて、これを踏まえた上で、セルにフリガナが設定されているか判定するには

If Cells(行, 列).Phonetic.Text = Cells(行, 列) Then

と言う構文にしないといけないということです。

以下、「3列目にあるレコードの内、フリガナの設定されていないセルにだけ設定する/レコードのある分だけ繰り返す」処理のサンプルコードです。

Sub phoneticX()
 Dim i As long, x As Long
 Dim phone As String, WSphone As String
 x = Cells(65536, 1). End(xlUp). Row

 For i = 2 to x
    phone = Application. GetPhonetic(Cells(i, 3))
    WSphone = Cells(i, 3). Phonetic. Text

 If WSphone = Cells(i, 3). Text Then Cells (i, 3). SetPhonetic
 Next i
End Sub

構造としてはIf節で➀フリガナ設定されているか判定、➁設定されている場合はスルー〜If節脱出、➂設定されていない場合はSetPhoneticする、これだけですね。

因みに、セルに入力された文字列の特定の部分のフリガナだけ取得/編集したいとお嘆きのあなたに朗報!その場合は

Range. Characters(開始位置, 設定する文字数). PhoneticCharacters = “文字列”

の構文で可能です。ミソは設定する文字数が、セルに入力されている文字数であることでしょうか。よく考えれば当たり前の話ですが、フリガナを扱っているのでフリガナの文字数だと勘違いしてしまいがちなので注意しましょう。あとはLenとかMidとか何ならStrConvとか駆使すればどうとでもなると思います。

2019年6月9日日曜日

【Android】縦画面アプリを横画面にしてみる

あまりこういう例は多くないとは思うんですけど、たまに横画面強制なのに入力フォームにソフトウェアキーボードが出てきて画面が全部隠れてしまう、ということがあります。最近は激横長比率ディスプレイも増えてきてるので(自分もそういう端末使ってる)、イライラした経験のある方もわりといるんではないでしょうか。

とは言え今回のきっかけは縦位置強制のアプリ。『アリス・ギア・アイギス』というゲームアプリですが、攻略記事をググっていると横位置の画像が結構出てくるんですよ。で、なんだろうって思っていました。

アリス・ギア・アイギス(Google playストア)

iPadでプレイすると縦横比率がスクエアに近いので、バトル画面のボタンカスタム配置とかも結構いい感じではあるんですが、それでも横長ではない。なんだこれ?どうやって撮ったんだ?と思っておりました。

で、最近このゲームがPC版をリリースしたんです。PC版と言っても蓋開けてみればBlue Stacks(androidエミュレータ)のカスタムだそうで… DMMゲームプレイヤーってヤツなんですけども。自分は既にデスクトップPCにブルスタを入れていたので、競合する…というかそんなもん2つも入れて容量圧迫するのが怖かった(しかもゲームパッド対応はまだだとか)のでアンインストールしましたが、なにやら公式で横画面表示ができる設定になっているんだそうです。カスタムとは言えエミュレータなので、つまりandroidの画面制御を行えるなら、じゃあスマホだってできるんじゃね?と思い調べると…

ありました。「RotationControl」というアプリです。

RotationControl (Google Playストア)

これを入れるだけで基本画面位置の強制設定ができるらしいですが、きれいに表示できるものできないもの、またできるものでもそのアプリ毎に色々設定が必要なようです。

まずRotationControlの方で横画面、あとシールドマークをタップして画面固定を強制しておきます。で、アリスギアの方で、画面設定から解像度やフレームレートを最高にし、さらに「実験的機能」として「デバイスの解像度を利用」をONにします。これがないと比率がびろーんてただ伸ばしただけになってしまいます。

(ここです)

(表示されました。事務所が広い!)

さてこの状態はこれで良いんですが、バトル画面は注意が必要です。上の画像で「表示領域を16:9にする」をONにしているとその後の比率がおかしくなります。


(これが)

(こうなって)

(縦画面に戻しても治らないw)


と言ったところですね。ネットでの意見を見ているとOSがカスタムされているとこう言った不具合は起こりやすい…ようです。ただ最近のandroidスマホ/タブレットで素のOSのものなんて激安の中国製とかしかなく、その辺はスペック的に高解像度で動作させるのに不安があります。実際これやるならスマホじゃ小さいので8インチ以上のタブレットが欲しいところだけど…うーん。

せめてカメラ距離設定は近くしたほうがいいですね。

(距離:近でもこのくらいの距離感になります)

2019年6月3日月曜日

steamでファイティングコマンダーを使う

ストリートファイターVをやっていますが、あまりにもたまにしかやらないもんだから、起動するたびにアプデがかかる、みたいな様子です。そんな様子だもんだからDirectInput仕様のコントローラー(ゲームパッド)が使用できなくなったのを知らずにいました。いや、正確にはTwitterなんかで見てたんだけど、すっかり忘れていました。

それまではXboxコントローラとしてエミュレート…というか偽装?した上でJoyToKeyを使って動かしていました。詳しくは以下の記事を。
PCゲームでXbox以外のコントローラーを使う!「x360ce」の使い方
そう、していましたんですけど、なんだかそちらの設定も消えたのか、ストVを起動してもなぜか十字ボタン以外反応しなくなっていました。で、またキーボードの割り当て見てJoyToKey設定すんのもだりーし、それよりXboxの仕様であるXInputは対応してるわけだし、じゃあsteamの仕様ってどうなってんだっけと。いや、それまで分かってなかったってのも相当なアレだよ?

それはそれとしまして、カプコンのサイトにちゃんと書いてありました。
【重要/Steam版】DirectInput対象のコントローラ設定について
つまり、XInput化してあれば親アプリ(プラットフォーム)であるsteamの設定で認識させることができると。以下、画像を御覧ください。

 (すいません、タスクバーは横置派です)

(カーソルがなくてすいません、一番上「一般のコントローラ設定」です)

(「Xbox設定サポート」にチェックを入れて戻ればOK)

(認識されてます)

これで問題なく動きました。

さて、タイトルですけどHORIファイティングコマンダーは前面右側6つボタンです。セガサターン世代としてはこの仕様が安心しますよね!ていうかPSコンとか4つボタンだと大P大Kは側面で押しづらいじゃないですか。どうしたってこれがいいんだよね。

というわけでした。わりとここまで流れで載ってるサイトないので書きました。参考にどうぞ。