2019年11月5日火曜日

可動範囲への印刷設定アドバンス

このエントリの続きです。

設定したい範囲のデータ途中に空白行があるときは、COUNT/COUNTAだとどうしても実際の最終行とズレが出てしまい特に行数が多いときに必要な範囲に設定されないケースが出てきます。これを防ぐには配列数式を使うしかないようです。もしくはVBAで設定するしかないんですが、ワークシート関数だけで完結したいじゃないですかやっぱりぃぃ。

と言うわけでその最終行の出し方。

MAX(INDEX((LEN(列)>0)*ROW(列),0))

なんですけど、これを

=OFFSET(範囲,0,0,MAX(INDEX((LEN()>0)*ROW(),0)),)

と設定して印刷プレビュー→ページをめくると…メモリ不足で落ちるんです…。

ま、うちの職場の環境ではと言うことではあるんですけど、i3・3GBメモリのマシンなので、大体どこもおんなじくらいか下手すりゃそれ以下ですよね事務系なんて。
でこれはアカンということで、印刷範囲外のセルに最初の数式を書き、そこを4番目の引数に指定しました。これでひとまず安心です。

おまけ:VBA限定ですが、最終行だけならUsedRange.Rows.Countプロパティでも取得できます。ただし書式設定していないことが条件。…事実上使えない知識ですね…。

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は側面で押しづらいじゃないですか。どうしたってこれがいいんだよね。

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

2019年5月20日月曜日

IFTTTと外部サービスの連携を考える

これ実は別名義で公開しようと思ってたんだけど、どうもしっくり来なくて、よく考えてみたら結局webサービスの使い方ノウハウじゃん、と思ったのでこちらに記載することにしました。ちょっと長いけど。

noteを使い始めた

noteを使う事にしたんです。その経緯について。別名義で絵を描いてまして。告知や宣伝が大事なのはわかってはいるんだけど、なるべく制作に専念したい!と言う絵描きさんは多いと思います。なんと言っても制作は時間がかかりますから。と言うことで「ものぐさする」ための方法を色々考えていたのだが、やはり軸はIFTTT。この機能をうまいこと活用しつつ、手軽に発信していける環境を構築するのに、noteは使えるぞと。よくできているサービスだなと思います。じゃあnoteに書けよ…とは言いたいところだけど、乗り換えはまた手間がかかるので、まあこれまで使ってきたサービスを流用してひとまず整えたと言えるんじゃないでしょうか。折角なのでその思考をここに記しておきます。
とは言えこれはあくまで「ものぐさ」環境のためのものであり、これでアクセスが増えるとかそういったことではございません。

(以下、追記とします)

2019年4月1日月曜日

Excel 2010以降での便利マクロの挙動について

いや、「便利マクロ」って何だよって話ですが。

例えばちょっとした汎用マクロだとか、CSVをLine Input&Split関数+配列で読み込むマクロなんかをファイルを開く時にショートカットキー登録しておくとすこぶる便利なわけで、そういうのを「便利マクロ」と言っているんです、個人的に(知るか!)。

※2019.4.3追記

Sub wariate()
 with Application
  .MacroOptions Macro:="Sheet1.Hoge", ShortcutKey:="j"
  .StatusBar = "[Ctrl]+[J]で「Hoge」マクロが走りますよ!"
 End With
End Sub

例えばこう言うプロシージャを標準モジュールに作成する(Sheet1には「Hoge」プロシージャがあること前提で)と、Ctrlキー使いのショートカットが登録できるわけです。


さて、仕事上、Office関係やなんやかやのファイルもなるべく共有フォルダに保存する必要があって、そういった場合にOffice2010以降ではそれらを「インターネットから保存されたファイル」=危険性のあるファイルと認識して、一旦読み取り専用で開くんです。ほら、「編集を有効にしますか?」とかいうメッセージが出ることありませんか。その場合、先述の便利マクロが使えないんです。

正確にいうと便利マクロがということではなく、ショートカットキー登録するためのコードを呼び出すWorkbook_Openイベントがブロックされてしまうということなんですが。

対策としては


  1. Excelのセキュリティレベルを下げる
  1. ファイルを安全なものとして登録する
  1. 対象のファイルを独立したインスタンスで開く


というものがあるんですが、はい、もうわかりますね。明らかに最後のが具体的すぎますね。この場合の正解です。
とは言え一応説明しておきますと、上2つは管理者権限が必要なので、設定ができないんですね。だから、個人で自宅ファイルサーバとかにブックを置いてる場合なんかはアリです。ですが、上司を介してSEに申請して、ケースによっては上長の承認が必要なんて事になると、むしろ「そのファイルは、そのコードは本当に業務に必要なのか?」みたいなことを言われる可能性まで出てきます。自分が楽するためにやってるのにそんな事言われたらたまったもんじゃありませんので、ここはMicrosoftが「仕様です」と言っている3番の方法を使うべきでしょう。独立したインスタンスってのはExcelの中で「別の宇宙を作る」みたいな感じなので、他のExcelから勝手にコードを実行したりできないので確かに安全なんです。(Ctrl+Tabで切り替えられなくて、アプリケーションを切り替えるAlt+Tabで切り替えなきゃいけない;コピペができない;わかりにくいなー)

そのためにどうしたらいいかと言いますと、コマンドラインもしくはVBScriptからShellで起動すればよい。具体的には

Option Explicit
Dim objExcelApp, strPath
Const Bookname="C:¥hoge.xlsm"

Set objExcelApp = CreateObject("Excel.Application")

With WScript
strPath = Replace(.ScriptFullName, .ScriptName, "")
End With

With objExcelApp
.Workbooks.Open BookName, False, False
.Vidible = True
End With

Set objExcelApp = Nothing

みたいなコードを書いて”.vbs”で保存し、デスクトップなどに作成したショートカットのプロパティにそのファイルのパスを登録する、ということです。これでものぐさし放題!

て言うか毎月、毎週、なんなら毎日PC上で実行する作業を自動化するのを許可しない脳筋職場環境がおかしいんですけどね。これで国際競争力とか何とかどの口が言ってんだ、NIPPON!て感じですが。

2019年1月23日水曜日

iTunesとシステムのサウンド出力を分ける方法

もう4年近く前に書きかけにしていたエントリを発見しました。デスクトップPCにBluetooth機能をつける関係のテクニックで、もう面倒くてやめてしまったしitunesのバージョンも上がっていて色々違うかもしれないんですが、一応上げときます。

---------------------------------------------------

デスクトップマシンにBluetoothアダプタ付けた後、気付いたことがあります。うちのオーディオシステムはBluetooth接続してスマホ等から再生した音声を出力することが出来るんですが、これ有効にした時にシステムサウンドがピロ~ンと鳴ってしまうんですよ。
正直折角音楽聴いてるのに同じスピーカーから「暁の水平線に勝利を刻みましょう!」なんて言われたら興醒めしてしまいますし、健全な青年が親に隠れて自室PCで特別な動画を鑑賞するときのカムフラージュにも用をなさないなんてことは一体馬鹿げております。

ということで、サウンドデバイスをアプリケーションごとに設定する方法があるはずだという勘に基づいて色々ググってみました。

結果出来ます。割と簡単。

例えばWindows Media Playerなら「オプション」→「デバイス」の「スピーカー」で「Bluetooth」を選択する。なんか見たところこれで必ずBluetoothデバイスが選択されるっぽいです。ビデオやオーディオを扱うアプリケーションだとだいたい設定出来るようになっているようです。

しかし、しかしですよ、これがiTunesだとそうはいかないんだなあ。
見たところサウンドデバイスの設定そのものがない。しかしデバイス自体は接続されているわけで、なんかないんだろうかと必死にググり、試行錯誤して出来るようになりました。以下がその結果得た方法です。

  1. コントロールパネルで「ハードウェアとサウンド」→「サウンド」の「オーディオデバイスの管理」を選択する(「サウンド」をクリックして「再生」タブを選択してもよい)。
  2. Bluetoothスピーカーやらヘッドホンの電源を入れるなりしてペアリングを有効にした上でiTunesを起動する。
  3. 「スピーカー」を規定のデバイスに設定する。

iTunesはQuickTimeの方で指定された設定に従うらしい、と言う情報もあったんでそちらを開いてもみたんですが、そこはシステムのサウンド設定ウィンドウでした。どうやらQuickTime6以前のバージョンでは独立して設定できたのに7以降はシステムに依存することになってしまったようです。

しかもiTunesは起動時にサウンドデバイスの出力先をシステムから受け取ってるみたいで、デバイスを切り替える際は再起動しないといけない感じ。これは面倒だなぁ。

てなことで結局イマイチなんですけども、この方法しかない感じ。まあ面倒くさいけど、慣れればちょっとしたルーチンワークですよ。他に方法も思いつきませんのでこれでよしとします。

2019年1月22日火曜日

Amazonプライムビデオをテレビ画面で見たいのだ

FireTV stickを使うのが真っ当なんだろうけど、iPadからやりたい。アカウントサービスを家族に勝手にアレされたくない的な問題もありまして。

で調べたんですけど、AppleTVは高いしChromecastはAmazonプライムビデオ非対応だし、それよりAmazonで売ってくれない(笑)。あとWi-Fiの接続台数の問題もあって、有線にしようと。まああれです、パソコンのクローンモニターみたいなもんだと。

そしたらアップル純正のHDMI変換アダプタがまた高い!たまたまHDMIケーブルは自室用のモニター買ったときにオマケでもらっていたんですよね。だからそれさえあればいいんじゃね?と考えていたのですが、さすがアップル甘くねえな!みたいな気分になりました。

そこでまたググるわけです。と言うかAmazon屋さんなんですけども。もっと安いのないかなーって。
あるはあるんですが、レビューなど見ていくとどうも「無料コンテンツしか再生できない」とかいう噂。DRM保護の関係だとかなんだとか。よくわかんないんですけど。しかし本当にそうなのであれば金をドブに捨てるのに近い行為になってしまうわけで、そんなら最初から純正買っとこうということにしました。

ってんで電機屋行って買ってきました。やはり純正はっょぃですね。繋いだらすぐ見られました。なんだろこの脱力感…(笑)いやいいんですけど。古いマシンにLinuxディストリ、とか日本製の家電関係アプリとか導入時のあの芋づる式に慣らされすぎてしまって「いやこんな簡単なはずがない!」ってググりまくる癖がついているせいで、かなりググったんですけど、今回の解決策は何のことはない"カネ"であったと、そういうことでした。

そんな感じで、50年ぶり?でアニメ化された『どろろ』やビーバップハイスクールを見たりしております。便利だなあ…