VBAのループ構文にnext(Perl)やらcontinue(C)やらの機能がない件

ループの中味全部をIFで囲むか、GOTO使うんだそうです・・・

for my $i (1 .. 10){
	next if $i % 2;
	print $i, "\n";
}

これをVBAで書くと下のようになります。(GoToの場合)
とりあえずループを次に進めるためのラベルをNextの直前に一行追加すれば、perlのnextやCのcontenueと同じ感覚でコーディングできそうです。

Sub test()
    
    For i = 1 To 10
        If i Mod 2 Then
            GoTo TestContenueLabel
        End If
        
        MsgBox i

TestContenueLabel: '←ここにラベル追加
    Next i
    
End Sub

Excelマクロのショートカットを統一的に管理

とりあえず上の方法でショートカットキーをバインドできるけど、数が増えたら絶対破綻します。衝突しないキーを涙目で探し回る羽目になります。
というわけでショートカットの設定もマクロ側からやるようにしましょう。
(後で混乱するから上で付けたショートカットキーは外しておく)

1. Alt+F11でVisual Basic Editorを起動
2. 左のツリーからVBA Project(Personal〜)を選択。Microsoft Extra Object→ThisWorkBookを開く
3. 以下を貼り付け

Private Sub Workbook_Open()
    Application.OnKey "+^{v}", "pasteValue"
End Sub

4. 保存しつつ終了。エクセル再起動後に有効になります。

あとで追加したくなったら、Application.Onkey云々を増やしてやればOK。「+」はShift, 「^」はCtrlの意味。

Workbook_Openというのはエクセル起動時に実行される関数です。他にもデフォルトでやっておきたいことがあれば、ここに書いておけばいいんじゃないでしょうか。

形式を選択して貼り付けをショートカットキーで

色々計算して、その結果を 「形式を選択して貼り付け」→値を貼り付け とやる事が多いんですが、デフォルトではそのショートカットがありません。
キーボードでメニューを辿ることもできますが、数ステップかかります。毎回そんなにキー押したくないよね。ましてやキーボードから手を離してマウスを手にとって、右クリックして・・・なんて面倒でやってられません。
幸いエクセルにはマクロにショートカットキーを設定する事ができるので、Ctrl+Shift+Vでできるようにしてみました。

(以下エクセル2007用。たぶん他も同じ。)

0. (マクロを初設定する場合) Excelのオプション→開発タブをリボンに表示にチェックを入れてOK。開発→マクロの記録→記録終了(保存先は個人用マクロブック)で適当なマクロを記録。名前もデフォでOK
1. Alt+F11でVisual Basic Editorを起動
2. 左のツリーからVBA Project(Personal〜)を選択。標準モジュール→Module1をひらいて、さっき記録した奴を消す。
3. かわりに以下を貼り付け。

Sub pasteValue()
    On Error Resume Next
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

4. マクロから、pasteValueを選択→オプション→ショートカットキーの所にShift押しながらV→OK
5. 保存しつつ終了

ちなみにPersonal〜ってのはエクセル起動時に自動的に非表示で開かれるファイルです。(Personal〜というかXLSTARTフォルダに入ってる奴みんな)
ここにマクロを書いておくと、どのファイルからでも使えます。

制限環境でのプログラミング

普通の会社では社有へPCに好き勝手にソフトを入れることができず、何かあるとすぐにコマンドプロンプトからPerl立ち上げてた人間にはキツイ環境です。
スクリプトの一つも使えないとlazyに生きられないという一心で、とりうる手段を考えてみました。

ワード・エクセルのマクロ

オフィスはまず確実にPCに入っていますからインストールの問題もなく、そもそも扱う対象のデータも大体オフィス絡み。
マクロウイルスなんて物があるくらいだから、案外色々できそうです。

雑用としてワード文章中の200個の画像のリサイズという単純作業を任されたわけですが、これのおかげで発狂を免れました。(といってもこんな単純作業で金くれるならそれはそれで)

Windows PowerShell

Linuxのシェル+αみたいな感じでしょうか。Windows UpdateだかMicrosoft UpdateだかからOSのアップデートと一緒にインストールできるのがミソです。それなら文句言われないでしょ。
エクセルなんかのファイルを扱うこともできるみたいなので、複数のファイルを一気に処理するときにはマクロより役立ちそうです。
もちろん細かい条件を付けてファイルを削除したりと、普段Perlで何気なくやってる作業を代替することもできます。
lsでもdirでもGet-ChildItemでもgciでも動くAliasの張りっぷりがいい感じ。

WSHが熱いと某鳥さんに教えてもらいましたが、その理由が分かった気がします。

REDUINO-GHOST買った

PCでソフトだけ弄っててもPCの画面の上でしか遊べないので、ハードのお勉強もしてみたいと思います。
ということで、arduino互換のREDUINO-GHOSTを買ってみました。
PICは弄ったことがありましたが、現代人の触る物ではないと感じました。これならやって行けそうです。

とりあえず組み立てないと・・・

今どきのSEOではホストドメインの力 > 外部リンクらしい

グーグルの検索順位を決定する4要素――重要度が増えたのは? 減ったのは? | Web担当者Forum
によると、最近では
ホストドメインの信用度/オーソリティ > 外部リンクのアンカーテキスト
なのだそうだ。
私がSEOを学んだ(というかSEOで遊んでた)時代は、キーワード詰め込みやPageRankは同様に余り影響がなかったが、「外部リンクのアンカーテキスト」の力は支配的だった。
マイブームの頃はかなり勉強して、某大会を荒らしたりもしたが、それが終わってから全くその手の情報を仕入れていなかった。
そのせいで、未だに外部リンクの力だけでSEOできるもんだと思ってたし、ホストの信用力なんて考えてもいなかった。


「カタギ」ははてなキーワードにもないので、全く外部リンク(被リンク)をうけていない。
それなのにカタギになるわけですがGoogleで上位に出るのはおかしいと思っていたが、これが理由だったらしい。
そりゃ天下のはてな様のドメインは信用力抜群ですよね。


確かに、外部リンクは(自分含め)スパマーに荒らし回られるよ。
大量にドメインの違うサイト作ってさ、そいつらを相互にリンクしつつ、メインのサイトに希望のテキストのリンク大量に送ったりね。
どっかの有名なクソITベンチャーもこれやってスパム認定されてたよね。名前忘れたけど。
でもさ、ドメインの信用度優先じゃ、個人サイトや無名サイトが拾われづらくなるんじゃないかなあ・・・
被リンクであれば何かのきっかけに沢山リンクされれば、サイトが無名でもそのページは検索に出てきたわけだけど、ホストの信用度はそう簡単には上がらない気がする。
上手く言えないけど、ネットの世界も大手指向の世界になってしまいそうとか、色々考えてしまう。


ほんの一端とはいえ、こうなる原因を作った人間の一人がこんなこと言っても仕方ないんですが・・・