2014-10-03

http://anond.hatelabo.jp/20141002222733

Sub test()
    Dim re      As New RegExp
    Dim ws      As Worksheet
    Dim buff    As Variant
    Dim i       As Long
    
    'initialize
    Set ws = ActiveSheet
    buff = ws.UsedRange
    ReDim Preserve buff(1 To ws.UsedRange.Rows.Count, 1 To 2)
    
    'setting RegularExpression
    re.Pattern = ".*\((.*)\).*"
    re.IgnoreCase = True
    re.Global = True

    'Get Information
    For i = LBound(buff, 1) To UBound(buff, 1)
        buff(i, 2) = re.Replace(buff(i, 1), "$1")
        buff(i, 2) = Replace(buff(i, 2), buff(i, 1), "")
    Next

    'Paste
    ws.Range(Cells(1, 1), Cells(UBound(buff, 1), 2)) = buff
    
End Sub

やや冗長かもしれないけど俺だったらこう書くなあ。(RegExpクラスを利用するための参照設定は忘れずに!)

ループでワークシートのセルアクセスすると行数増えた時に使い物にならなくなるから、シートの値は必ず二次元配列に移して処理してるわ。

久々にプログラミングしたけどやっぱおもしれぇ!

求める答えが同じでもプログラミングする人のソースコードに対する思想の違いが顕著に表れるもんなー。

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん