ワークシート関数を使えば良いといえば良いのですが、そのためだけに使用するセルが増えて表がごちゃごちゃするのも嫌だと言う事でしょう。半角と全角を変換するマクロは割とあちこちで目にします。
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 件のコメント:
コメントを投稿