2010年6月13日日曜日

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

 ".Rows.Count"と".Columns.Count"を何度も呼ばずに、あらかじめ一度だけ変数に入れておけば少しは速くなる?と思って試してみました。
Option Base 1

Sub 全角に変換する()
    Call xStrConv(Selection, vbWide)
End Sub

Sub 半角に変換する()
    Call xStrConv(Selection, vbNarrow)
End Sub

Private Sub xStrConv(a1, a2)
    Max = 655360 '10列分のセル数
    
    If Not TypeName(a1) = "Range" Then
        MsgBox ("セルを選択して下さい")
        Exit Sub
    ElseIf a1.Count > Max Then
        MsgBox ("処理出来るデータの数は" & Max & "までです")
        Exit Sub
    End If
    
    rEnd = a1.Rows.Count
    cEnd = a1.Columns.Count
    
    Dim x: ReDim x(rEnd, cEnd)
    For r = 1 To rEnd
        For c = 1 To cEnd
            x(r, c) = StrConv(a1(r, c).FormulaLocal, a2)
        Next c
    Next r
    a1.Value = x
End Sub
 何もデータの入っていないシートのセルを全選択して計測。

書き換え前
全角:124.6094秒
半角:124.0938秒

書き換え後
全角:121.5秒
半角:121.3594秒

 うわ、微妙www。

0 件のコメント:

コメントを投稿