2016年1月26日火曜日

Excelで非表示のシートを表示する

とある、他人が作ったマクロ入りのExcelを修正する作業が舞い込んで来ました。

1つだけシートがあり、そのシート上のボタンを押すと、必要な処理をしてくれる、そんなファイルです。

で、マクロの編集メニューからVBA編集画面に飛んで見てみました。ボタンを押した際の実行関数はモジュールにまとまっていたので、こちらを拝見。

で、ソースコードを読んでいくと、「いろんなシート」をリフレッシュして、最新データを取りこんでいるようです。

いろんなシート???

先に書いたように、ファイルには1シートしかありません。他のシートはどうやって隠されているのか。何かパスワードロックがかかっているのではないか。。。

と疑いましたが、以下の手順で簡単にハッキング成功。
見せたくないシートを非表示にしたい

あまりに簡単な方法でしたが、すっかり騙されたので、備忘のため描いておきます。

2016年1月22日金曜日

NFCの規格

AndroidでNFC通信によりデバイスからデータを読取ることをしていました。
で、結構、

機種同士により、相性がある
という話をよく耳にしました。
1つは、読取り位置というか、機種によりスウィートポイントが異なるようです。これは何となく理解できます。もう1つは、機器により通信できない、というもの。そんなものかな、と思いつつ、気にはしていなかったのですが、自分のやっているケースで見事に発生。
FelicaだとOKだけど、RFIDだと駄目、みたいな。

そんなこんなで、規格自体を調べてみることに。

【国際標準規格】NFCの規格と採用例
NFCについてのまとめ
NFCの定義

要するに、NFCと一口にいっても、IP-1(ISO/IEC 18092)とIP-2(ISO/IEC 21481)という種類があるようです。Felicaとは、デバイス的にはどちらでも通信できるが、RFIDとは、IP-2でないとデバイスレベルですら通信できない。

あと、Felicaのみ対応のNFC、なんてのもあるようで、『NFC』という言葉だけでは、どのISO規格に対応しているのか、分からない状況です。
近距離無線通信
NFC phones: The definitive list

いくつかの製品情報で検索してみたのですが、メーカーのページにも、『NFC対応』とだけ記載しているだけで、IP-1(ISO/IEC 18092)なのかIP-2(ISO/IEC 21481)なのか、はたまたFelica(ISO/IEC 18092)だけなのか、記載はないようでした。


まあ、日本のスマートフォンは、Felica対応(のみ)から始まっているようですが、徐々に、少なくともIP-1(ISO/IEC 18092)、続いてIP-2(ISO/IEC 21481)対応の方向に向かっているような気がします。あくまでも希望的観測ですが。

ちなみに、iPhone6/6sの「NFC」はMIFARE(ISO/IEC 14443)である模様。

2016年1月2日土曜日

Excel VBAで行の挿入に失敗する

年が明けました。
とはいっても、残念ながら、昨年し残した仕事がなくなった訳ではありません。
という訳で、正月早々から、プログラミングをしています。

今回はExcel VBA。Excelの資料を自動作成する、というのに取り組んでいます。
これまで、Excel VBAは結構使ってきましたが、どちらかというとデータ処理結果を残すのにExcelという表形式が適していただけで、主にVisual Basic同様の感覚で使っていました。相違点といえば、WorksheetとCellsを指定するくらい。
ただ、今回は、Excelファイルを雛形からコピーして、セル書式を定義し、データ量に応じて表の行数を制御する、といった、Excel寄りの内容で、正直、あまり経験はありません。

ということで、いつもの如く、先達たちの知見をGoogle先生から学びます。

ファイルコピーとかは難なく正常に動作。が、行の追加で

Application.ActiveWorkbook.Sheets("Sheet1")..Rows.Insert

とすると、1004エラーが発生してしまいました。


エラーメッセージを読んでも訳が分からないため、以下のそれぞれの記事を参照。
エクセルのVBAでの行の挿入について
エクセル VBA で「実行時エラー '1004': Range クラスの Select メソッドが失敗しました。」
Office TANAKA - Excel VBAの実行時エラー
Error message: To prevent possible loss of data, Microsoft Excel cannot shift nonblank cells off the worksheetRuntime error 1004 when inserting rows via VBA


上記を読んでいて分かったのは、1004エラーにはいろいろな種類があるということ、行の追加を行う際にはいろいろと内部的な処理があるということでしょうか。

・行挿入前にファイルを保存する
・xlDownを指定する

等、試みたのですが、いずれも成功せず。

正月早々、これは縁起が悪い、と、ちょっと諦め気味だったのですが、初歩の初歩に戻って1つの実験をしました。それは

『マクロを記録してみて、どんなコードが生成されるか確認する』

です。 これを試してみたところ、こんな感じでコードが生成されることを確認。

    Rows("8:8").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

で、結局、これに倣って修正するとうまく動きました。
一応、今年の初仕事(初内職)は無事完了。