[[20220111183251]] 『正規表現を使用しての置換』(hiro) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『正規表現を使用しての置換』(hiro)

正規表現を使用しての置換についてご質問があります。

完成前の式や類似を完成後にに変更したいのですが、以下記のようにコードを書くとうまくいくのですが

.Replace what:="2 ", replacement:="", LookAt:=xlPart ':部分一致( LookAt:=xlPart)

この2の部分には0〜9の整数が入るため以下のようにコードを書くと、
作成したコードでは演算子の間にある「2」だけが残ってしまします。

 .Replace what:="[0-9] ", replacement:="", LookAt:=xlPart ':部分一致

どのようにコードを書き直したらよいかご教示お願い致します。

変更後式
UE_PCELL_1_CONF_SCELL_DL_SA

2
UE_PCELL_2_CONF_SCELL_DL_SA

UE_PCELL_1_CONF_SCELL_DL_SA

UE_PCELL_2_CONF_SCELL_DL_SA

作成したコード

    With da.Columns("O")
        .Replace what:="~*", replacement:=vbLf, LookAt:=xlPart ':部分一致
        .Replace what:="~?", replacement:=vbLf, LookAt:=xlPart ':部分一致
        .Replace what:="+", replacement:=vbLf, LookAt:=xlPart ':部分一致
        .Replace what:="+ ", replacement:=vbLf, LookAt:=xlPart ':部分一致
        .Replace what:="-", replacement:=vbLf, LookAt:=xlPart ':部分一致
        .Replace what:="- ", replacement:=vbLf, LookAt:=xlPart ':部分一致
        .Replace what:="Sum", replacement:="", LookAt:=xlPart ':部分一致
        .Replace what:="(", replacement:="", LookAt:=xlPart ':部分一致
        .Replace what:=")", replacement:="", LookAt:=xlPart ':部分一致

	End With

変更前式

 Sum(UE_PCELL_1_CONF_SCELL_DL_SA  
+ 2 * UE_PCELL_2_CONF_SCELL_DL_SA) 
/ 
Sum(UE_PCELL_1_CONF_SCELL_DL_SA  
+ UE_PCELL_2_CONF_SCELL_DL_SA)

完成
UE_PCELL_1_CONF_SCELL_DL_SA

UE_PCELL_2_CONF_SCELL_DL_SA

UE_PCELL_1_CONF_SCELL_DL_SA

UE_PCELL_2_CONF_SCELL_DL_SA

< 使用 Excel:Office365、使用 OS:Windows10 >


>この2の部分には0〜9の整数が入るため

0を置換、1を置換、…と10回置換を繰り返せばどうですか。

(マナ) 2022/01/11(火) 21:06


https://excel-ubara.com/excelvba4/EXCEL232.html

正規表現を使う場合の参考に。
(参考) 2022/01/11(火) 21:10


これではだめですか?
 .Replace what:="~ ? ", replacement:=" "

(マナ) 2022/01/11(火) 21:24


 1桁から4桁の整数がはいるので、

.Replace what:="[0-9]{1,4}", replacement:="", LookAt:=xlPart ':

上記のようにコードを書き直ししたのですが、

2,3などの整数が残ってしまいます。

(hiro) 2022/01/11(火) 21:35


RangeのReplaceメソッドは、? * などのワイルドカードは使えますが、
いわゆる正規表現と呼ばれるものとは違います。
まずは、その誤解を修正することが必要でしょう。

(γ) 2022/01/11(火) 22:37


RangeのReplaceメソッドでは正規表現を使用することはできないのでしょうか?
(hiro) 2022/01/11(火) 23:02

    Dim arr As Variant
    For Each arr In Array("+", "-", "~*", "/", ":", "~?", "[", "]", "Sum", "(", ")")
        da.Columns("O").Replace what:=arr, replacement:="", LookAt:=xlPart
    Next
    da.Columns("O").Replace what:="*UE_PCELL", replacement:="UE_PCELL", LookAt:=xlPart
    daColumns("O").Replace what:="DL_SA*", replacement:="DL_SA", LookAt:=xlPart
    では

(ピンク) 2022/01/12(水) 00:02


 Function Sample(ByVal TargetStr As String, ByVal PatternStr As String) As Variant()
    Dim tmp() As Variant
    Dim i As Long
    With CreateObject("VBScript.RegExp")
        .Global = True
        .IgnoreCase = False
        .Pattern = PatternStr
        With .Execute(TargetStr)
            If .Count Then
                ReDim tmp(.Count - 1)
                For i = 0 To UBound(tmp)
                    tmp(i) = .Item(i)
                Next
            End If
        End With
    End With
    Sample = tmp
 End Function

 Sub Test()
    [A1] = Join(Sample([A1], [A2]), vbLf & vbLf)
 End Sub

A1に変更前式
A2にUE_PCELL_[1-2]_CONF_SCELL_DL_SA

変更後式のパターンに法則があればこういうのでも
(きまぐれおじさん) 2022/01/12(水) 02:50


お忙しい中でのご教示ありがとうございました。
(hiro) 2022/01/13(木) 19:11

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.