
こんばんは。
Excel2013VBAで質問があります。
以下の正規表現で1桁と2桁の両方の数字(9と10)を取得したいのですが、1桁は取得しますが、2桁の時は数字の後ろの1桁しか取得しません。
Dim reg As New RegExp
Dim result As String
reg.Pattern = "(.*)([0-90-9]{1,2})(.*)"
reg.Global = True '文字列全てを抽出
result = reg.Replace("実験9月", "$2")
Debug.Print result
result = reg.Replace("実験10月", "$2")
Debug.Print result
頭と後ろの文字を後で使用したいので上のやり方の方が便利なのですが、この方法では1桁と2桁の混在に柔軟に対応させることは無理なのでしょうか?
やりたいのは、数字を取得し、1を追加して翌月に変えて、最後に全部足して戻す、みたいなことをしたいです。
reg.Replace(my_Experiment, "$1") & result & reg.Replace(my_month, "$3")
変数result をオブジェクトにしてExecuteで取得すれば一応1桁と2桁の取得できるのですが、
Dim result As MatchCollection
Set result = reg.Execute("実験9月")
reg.Pattern = "[0-90-9]{1,2}"
これでは、数字は取得しても、最後に戻すのが難しいです。
実験9月 → 実験10月 に変更する、など。
最初のやり方が無理なら、簡単にできるよい方法があるでしょうか?
申し訳ございませんが、文字数が変化しても変更なしで対応できる正規表現で行うやり方でお願いします。
No.1ベストアンサー
- 回答日時:
正規表現を以下の様に変更してください。
"(.*)([0-90-9]{1,2})(.*)"
↓
"(.*?)([0-90-9]{1,2})(.*)"
正規表現の「*」は貪欲マッチといって、対象文字列をできるだけ多くをマッチさせようとする性質があります。
「[0-90-9]{1,2}」は数字1字にもマッチするので、その左の「.*」は「実験1」(数字の最初の1桁)までマッチさせても全体として「(.*)([0-90-9]{1,2})(.*)」のパターンにマッチすることが可能です。
「.*」 → 「実験1」
「[0-90-9]{1,2}」 → 「0」
「.*」 → 「月」
これを避けるためには貪欲な「*」の代わりに抑制マッチである「*?」を使用します。この場合は可能な限り少なくマッチしようとするので数字の最初の1桁は、「[0-90-9]{1,2}」の方にマッチすることになります。
「.*?」 → 「実験」
「[0-90-9]{1,2}」 → 「10」
「.*」 → 「月」
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) 【VBA】先月分の取得ができない理由が分かりません。 2 2022/04/24 11:16
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
こいつやお前と呼ぶ男性心理は?
-
女性に質問です、相手のおちん...
-
マッチとライター。どちらがコ...
-
【至急】エクセルで複数のファ...
-
ExcelでRegExpのFunctionの作成
-
お似合いに見える男女ってどん...
-
タバコの味ってライターで変わ...
-
デートの誘いに対する曖昧な返...
-
気になる人と初デートで嘔吐し...
-
ログファイルを後ろから検索し...
-
マッチングアプリで再マッチし...
-
お見合いでオナラをしてしまっ...
-
なよなよした男性に嫌悪感
-
マッチングアプリで医学部の人...
-
Tinderでアカウントを変えたら...
-
マッチングアプリで再マッチし...
-
西枕はダメ?墓参りの線香は捨て...
-
結婚相談所のお見合いで一回で...
-
お見合いで結婚して幸せになる...
-
私は男で女の人に声がかっこい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
恋愛感情がない相手にも自宅住...
-
初デートのあと返信が極端に遅...
-
マッチングアプリで知り合った...
-
ログファイルを後ろから検索し...
-
タバコの味ってライターで変わ...
-
マッチングアプリでマッチした...
-
気になる人と初デートで嘔吐し...
-
なよなよした男性に嫌悪感
-
【至急】エクセルで複数のファ...
-
マッチングアプリで再マッチし...
-
デートの誘いに対する曖昧な返...
-
こいつやお前と呼ぶ男性心理は?
-
周りから
-
未成年はzippo購入不可ですか?
-
創価学会などの新興宗教信者の...
-
マッチとライター。どちらがコ...
-
女性に質問です、相手のおちん...
-
結婚相談所のお見合いで一回で...
-
お似合いに見える男女ってどん...
-
マッチングアプリで再マッチし...
おすすめ情報