2010年6月12日土曜日

【Excel】半角と全角の変換マクロ④【VBA】

 文字列変換のマクロを更に改良。
 2010年6月10日木曜日のコードでも、とりあえずは完成だと思うのだけれど、せっかく名称を"xStrConv"としたのならば、"StrConv"関数と同じような呼び方が出来た方が分かりやすいです。つまり…、
    Selection.Value = xStrConv(Selection, vbWide)
みたいな呼び方が出来ればスマートかと。
 もちろん、"StrConv"関数を
    Selection.Value = StrConv(Selection, vbWide)
みたいに書くと「型が一致しません」と言うエラーが出ます。
 以下がコード。
Option Base 1

Sub 全角に変換する()
    Selection.Value = xStrConv(Selection, vbWide)
End Sub

Sub 半角に変換する()
    Selection.Value = xStrConv(Selection, vbNarrow)
End Sub

Private Function xStrConv(a1, a2)
    Dim x: ReDim x(a1.Rows.Count, a1.Columns.Count)
    For r = 1 To a1.Rows.Count
        For c = 1 To a1.Columns.Count
            x(r, c) = StrConv(a1(r, c).FormulaLocal, a2)
        Next c
    Next r
    xStrConv = x
End Function
 データを配列に格納して処理する仕様へ変更したので処理が高速です。
 処理が高速なので、たくさんのセルを選択したときにエラーを出すコードを思い切って削除しました。
 ちなみに僕の環境では、セルを全選択して実行しようとすると、「メモリが不足しています」と言うエラーが出ます。
 データを読み込む際に、値で読み込むのではなく、"FormulaLocal"を使う事により、結果として数式の入力されたセルをスキップしているかのように動作します。
 ここで、"Formula"ではなく"FormulaLocal"を使っているのがミソで、最初は"JIS"関数が"=DBCS(A1)"のようなワケの分からない文字列に化けて、ハマッてしまいました。
 救ってくれたのがこのサイト。多謝!

0 件のコメント:

コメントを投稿