2010年6月8日火曜日

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

 ワードには文字列を半角から全角、全角から半角に変換する機能が標準で付いていますが、エクセルには付いていません。

 ワークシート関数を使えば良いといえば良いのですが、そのためだけに使用するセルが増えて表がごちゃごちゃするのも嫌だと言う事でしょう。半角と全角を変換するマクロは割とあちこちで目にします。
Sub xxx()
    Dim t: t = Timer
    For Each c In [a1:j1000]
        c.Value = c.Address
    Next
    [a1:j1000].Select
    Debug.Print (Timer - t & "秒")
    '1.351563秒
End Sub

Sub callSample01Wide()
    Dim t: t = Timer
    Call Sample01(vbWide)
    Debug.Print (Timer - t & "秒")
    '約16秒
End Sub

Sub callSample01Narrow()
    Dim t: t = Timer
    Call Sample01(vbNarrow)
    Debug.Print (Timer - t & "秒")
    '約3秒
End Sub

Sub callSample02Wide()
    Dim t: t = Timer
    Call Sample02(vbWide)
    Debug.Print (Timer - t & "秒")
    '約2秒
End Sub

Sub callSample02Narrow()
    Dim t: t = Timer
    Call Sample02(vbNarrow)
    Debug.Print (Timer - t & "秒")
    '約0.9秒
End Sub

Sub Sample01(a)
    For Each c In Selection
        c.Value = StrConv(c, a)
    Next
End Sub

Sub Sample02(a)
    x = Selection
    For r = 1 To Selection.Rows.Count
        For c = 1 To Selection.Columns.Count
            x(r, c) = StrConv(x(r, c), a)
        Next c
    Next r
    Selection = x
End Sub
 いろいろ書いていますが、下の方のSample01とSample02がコードの本体です。

 引数として、vbNarrowやvbWideを取れるようにして、汎用性を持たせました。

 Sample01は率直ですがやや処理に時間がかかります。

 Sample02は高速に動作しますが、セル範囲が一つだけのケースでエラーが発生します。

0 件のコメント:

コメントを投稿