- 締切済み
Excel(VBA)での正規表現
Excel(VBA)で正規表現を使って以下のような作業をしたいと思っています。(やりたいことを簡単にして書いています。) A 1 田中 2 山田 3 佐藤 4 吉田 5 川田 上のようにA列に名前のデータがあったとします。 例えば頭1文字を取り出してその部分を「#」に置き換え、右隣のセル(B列)に置き換える前の文字を出力したいのですが、この場合どういうマクロを作ればいいのでしょうか。 (出力例) A B 1 #中 田 2 #田 山 3 #藤 佐 4 #田 吉 5 #田 川 VBAでの正規表現に関するページを色々と探しているのですが、中々理解できず、こちらで質問させていただきました。 詳しい方、教えていただければ幸いです。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 あくまでも、正規表現のご質問なので、正規表現で回答をしておきます。現在は、任意の文字(.)になっていますが、正規表現を使うということは、検索語が、漢字で以外は行わないとか、細かな条件がつくことを想定しています。漢字は、例えば「一-龠」(完全な範囲ではありません)となります。 '------------------------------------------- Sub RegTest1() Dim Matches As Object Dim c As Variant Dim buf As String Dim acSh As Worksheet Set acSh = ActiveSheet With CreateObject("VBScript.RegExp") .Pattern = "^(.).+" 'バターン .Global = False Application.ScreenUpdating = False '------------------------------------------- For Each c In acSh.Range("A1", acSh.Cells(Rows.Count, 1).End(xlUp)) If InStr(1, c.Value, "#", 1) = 0 Then Set Matches = .Execute(Trim(c.Value)) If Matches.Count > 0 Then buf = Matches(0).SubMatches(0) c.Value = Replace(c.Value, buf, "#", 1, 1, 0) c.Offset(, 1).Value = buf End If End If Next c '------------------------------------------- Application.ScreenUpdating = True End With End Sub
- mshr1962
- ベストアンサー率39% (7417/18945)
サンプルマクロ Sub Macro1() Dim RG As Range '変数RGを範囲として設定 For Each RG In Range("A:A") 'A列を1行ずつ総なめ If RG = "" Then Exit For '対象がブランクならマクロを中止 RG.Offset(0, 1) = Left(RG, 1) '対象の1文字目を右隣りの列に表示 RG = Replace(RG, RG.Offset(0, 1), "#", 1, 1) '対象の文字の中の右隣り列の文字を#に1文字だけ置換 Next RG '次の行に移る End Sub
- anmochi
- ベストアンサー率65% (1332/2045)
あなたがやりたい処理のどこで正規表現を使うのかが分からんのだが、1文字目を抜いて変えるだけなら Worksheet.Range.Item("B1").Value = Left$(Worksheet.Range.Item("A1").Value, 1) Worksheet.Range.Item("A1").Value = "#" & Mid$(Worksheet.Range.Item("A1").Value, 2) とかやればできそうな気がしますね。試してないしエラー処理は全く考えていないのでその辺りはよろしくご検討を。