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年も気がついてみれば大晦日。今年も昨年までと同様の書き出しで・・・ 年末はこのサイトを運営しているサーバーが危うく死にかけたということを除けば、さほど大したネタもなかったので、のんびりとした大晦日を迎えることとなった。例年通り、残り時間を気にしてこの記...… Continue reading

zfs HDD入れ替え

Published on December 28, 2018

MacBook Pro 13inchの設定

Published on November 28, 2018