0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

特定文字の手前までを一括りとして、正規表現やVBAを使って前後を入れ替える

Last updated at Posted at 2019-07-04

#やりたいこと

とある文字列から商品名と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

こっちは商品名に「(」が入った時点で想定外の挙動になるけど、一旦考慮から外しました。

繰り返し使うようなものだったらマクロ作っておくと、作業がはかどりますね。活用していきたいです。

備忘録的なものになってしまいました。もう少し詳しく調べられたら記事を更新しようと思います。※特に正規表現

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?