新・闘わないプログラマ No.361

Excel Hacks


先日、10年使っていた冷蔵庫が壊れて、泣く泣く新しい冷蔵庫を買ったりとか、そのほかにもいろいろと買ったせいか、最近、ヨドバシカメラのポイントが10万ポイントに迫る勢いで溜まっていました。
この手のポイント制度は、ポイント還元率の高い商品は現金で買って、ポイント還元率の低い商品はポイントで交換するというのが鉄則、と言う話は以前にもしたような記憶がありますが、そんなわけで、ポイント還元率の低い(3%)本を買うのにポイントを使っている今日この頃。とは言え、ヨドバシで売っている本と言うとコンピュータ関係が主なわけで、なんでもかんでも買えるわけじゃないところが残念ですが。
そんなわけで、週末にも本を買ってきたのですが、その中の1冊がこれ。
「Excel Hacks―プロが教える究極のテクニック100選」
オライリーらしからぬテーマと言うか、オライリーならこういう本でも期待できそうと言うか、少し前に「おお、こんな本出たんだ」と思ったまま、チェックし忘れていた本です。それはそうと、オライリーのHacksシリーズは結構面白そうなのがありますね。あちらのサイトを見ると、まだ和訳の出てないのもたくさんあります。「Word Hacks」なんてのも出てますし。これでも読んでMS Wordの使い方のテクニックを身に着けたほうがいいのか、それとも、そこまでしてあの面倒くさいソフトを使いたくない、とでも言うか……。

MS Officeのアプリケーションの中では、私はExcelが一番使えるかな、と思っている……というか、皆そう言いますよね。仕事でもプライベートでも、最もよく使っているオフィスアプリケーションです。
私がExcelを初めてまともに触ったのは、今から10年以上前にMac上ででした。そもそもExcelというアプリケーション自体、最初はMac用のアプリケーションとして作られたそうです(Microsoftは、DOS用にはMultiplanという表計算ソフトの製品を出してましたっけ)。
確か、4万くらいで買ったような記憶がありますが、正確な値段はもう忘却の彼方です。私が買う少し前までは10万くらいしていたような記憶もあります。当時はまだオフィススイートという形での販売はしていませんでしたので、Excel単体で買ったわけですが、その後のバージョンアップでWordやPowerPoint付きのMS Officeにしました。その後Macをほとんど使わなくなってしまったため、結局は宝の持ち腐れ状態に……いやまあ、そもそもMS Office自体が「宝」かいな、という話もあったりするかも知れませんが。

余談はともかくとして、話を元に戻します。そんなわけで、私はExcelを長いこと使っていることは使っているのですが、その割にはあまり高度な使い方を知らなかったりするわけで、「へ〜、そんな機能あったのね〜」ということも年に一度や二度はあります。そんなこともあってこの本を買ったわけです。
週末に買ったばかりなので、実はまだほとんど目を通していないのですが、パラパラとめくってみたら「Windows APIを使ってウィンドウを半透明にする」という項目が目に付きました。「ウィンドウを半透明にする」という部分にはあまり興味は無いのですが、「Windows APIを使って」という部分は興味を持ちました。「へぇ、ExcelのマクロからWindows APIを呼べるのか。どれどれ、どうやるんだ? ああ、そうか、これはVisual BasicからAPIを呼ぶときと同じやり方だな。なるほど」
ちょうどそのとき、Excelマクロから「PCの識別情報を取得できないか」というような相談を受けていた私は、「そうか、Windows APIを呼べるなら、それでコンピュータ名(NetBIOS名)を取得すればいいじゃん」と気付きました。
「NetBIOS名を取得するAPIは確か“GetComputerName”だったような……」というわけで、試しに作ってみたのがコレ。

    'GetComputerName APIの宣言
    Private Declare Function GetComputerName Lib "kernel32" _
    Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

    'この関数を呼び出すとコンピュータ名が返る
    Function computer_name()
        Dim buf As String * 256
        Dim size As Long
        Dim r As Long
        size = 256
        r = GetComputerName(buf, size)
        computer_name = Left$(buf, size)
    End Function

Windows APIはCの関数の形になっているので、VBA等で引数を指定するのが面倒な場合があったりしますが、このGetComputerNameはあまり複雑な引数指定が不要なので、楽です。エラーチェックとか全然やっていませんが。
って、実はもっといい方法があったりしたらショックだなあ。

[前へ] [次へ]

[Home] [戻る]


mailto:lepton@amy.hi-ho.ne.jp