#やりたいこと
とある文字列から商品名とIDを入れ替えたかった。ちなみにこんな感じ。
◆元データ
ホワイトチョコレート(ID000101)
さわやかオレンジ(ID000201)
↓
◆必要データ
(ID000101)ホワイトチョコレート
(ID000201)さわやかオレンジ
※括弧は全角から半角にしている。
今まではいちいちIDの部分を切り取ってから先頭に貼り付けて、括弧を半角に修正していた。
ここでいう特定の文字は、IDをくくっている「(」にあたり、その手前の商品名とIDで括って前後を入れ替えたかった。
それなりに量があったりするので、明らかに無駄だな~っと思いながら作業をしていたので、先輩に相談してみた。
「俺なら正規表現使うかな~」というヒントを頂いた!
正規表現・・・。言葉は聞いたことがあるけどよく知らないな~と思い早速調べてみた。
##正規表現でやるなら
結論を書くとこれで解決。
置換前:(.*)(?=()((.+))
置換後:(\2)\1
##VBAでも簡単だけど組んでみた。
Sub 前後入替()
Dim str As String '取得文字
Dim kakko As String: kakko = "(" '全角括弧
Dim kakko2 As String: kakko2 = "(" '半角括弧
Dim name As String '商品名
Dim id As String 'ID
'選択しているセルの値を抽出
str = ActiveCell.Value
'括弧の全角・半角判定エラー処理
'半角括弧の場合は処理を終了
If InStr(str, kakko2) > 0 Then
MsgBox "半角括弧が含まれています。"
End
'対象外のセルを選択している場合
ElseIf InStr(str, kakko) = 0 Or Null Then
MsgBox "選択したセルを確認してください。"
End
End If
name = Left(str, InStr(str, kakko) - 1)
id = Mid(str, InStr(str, kakko) + 1, Len(str) - InStr(str, kakko) - 1)
'文字とIDを入れ替えて出力
ActiveCell.Value = "(" & id & ")" & name
End Sub
こっちは商品名に「(」が入った時点で想定外の挙動になるけど、一旦考慮から外しました。
繰り返し使うようなものだったらマクロ作っておくと、作業がはかどりますね。活用していきたいです。
備忘録的なものになってしまいました。もう少し詳しく調べられたら記事を更新しようと思います。※特に正規表現