2005年12月07日 水曜日

Excel VBA Hacks (3)

なんでもかんでもExcel症候群」なんて言う_刺激的な_タイトルを付けるとなんだかそれだけでアクセスする人がいるのと、シリーズ化してみても良いかもしれないということで、タイトル変更。本シリーズではVBAとWindowsの標準的な環境における機能だけを使ったExcelおよびOfficeの使いこなしを深めていきたいと思う。

そんなわけで第3弾。テキストデータをさわっているといろいろ考えさせてくれるのが文字コード周辺の問題となる。通常Unixではnkfやらiconvやらを使ってコード変換をするのであるが、Windowsではどうするかというと、たいていの記事ではnkfをDLL化したフリーのライブラリnkf.dllを使うのが常道である。が、これもいちいちインストールしないと使えないので、めんどくさい。(めんどくさくないよと言う人は以下の記事を読む必要はない。ただ数十人のPCにいちいちマクロ以外のプログラムやライブラリを導入しつつ、自分がそのバージョンの管理もしなきゃならないという事態に陥れば、考えるところもあるだろう。)

いろいろWindowsのドキュメントをひもといていけば、だいたいの場合でやっぱりnkf32.dllもいらないと言う結論に落ち着いた。とりあえず文字コード変換して取り込むと言う関数も書いてみよう。方法としてはUnixのファイルをバイナリでもらってきて、以下の関数で取り込み。文字列を返すので、前回の関数を使って配列にすればよろしい。

以下ソースを示す。Microsoft Data Access Components (MDAC) のStreamオブジェクトを使うというのが処理のポイント。ソースを見れば何となく何をやっているか分かるだろう。詳しくは分かりにくいけどMDACのドキュメントをMSDNの中から探って欲しい。

```vbnet Kconv.bas Function KconvInput(Encode As String, FileName As String) As String

Dim Stream As Object

Set Stream = CreateObject("ADODB.Stream")

Stream.Open
' いろいろ設定
' Charsetはシステムで使える物でないとエラーが発生する(チェックはしてない)

With Stream
    .Type = 2                   ' adTypeText テキストデータ
    .Charset = Encode           ' 入力ファイルのエンコード
    .LineSeparator = -1         ' adCRLF 改行文字はDOS形式改行
End With
Stream.LoadFromFile FileName

KconvInput = Stream.ReadText()

Stream.Close
Set Stream = Nothing

End Function ```

次のネタは何だろう。リクエストを受け付けると大変なことになるのだけど、ネタは募集します。(あと97回くらいやればVBA Hacksとか書けるのかなあ、オライリーさん。)

軽井沢ミーティング2018に参加

軽井沢ミーティング2018に初参加! 天気良くてよかった!さすがに5月末の週末は本当に天気が良い。Roadsterのイベントは前日入り出来る場合は可能な限り前日から参加している。主催者発表による今回の参加者は1975人、車はは1,002台。内訳は、NAは37%、NBは22%...… Continue reading

2017年も今日でおしまい

Published on December 31, 2017

Profoto A1の色温度の話

Published on December 21, 2017