Excel 使用VBA有条件地修改文本文件

Excel 使用VBA有条件地修改文本文件,excel,vba,Excel,Vba,我有一个文本文件,如下所示,需要使用excel宏进行修改。 下面是它的外观(以空格分隔)。但是,并非所有文本文件都以空格分隔 "W2" "S4" SEC "W1" PF22 0.7 PRM22 0.7 PI "P2" "W2" "S3" SEC "W1" PF22 0.7 PM22 0.7 PI "P2" "W2" "S2" SEC "W1" PF22 0.7 PM22 0.7 PI "P2" "W2" "S1" SEC "W1" PF22 0.7 PM

我有一个文本文件,如下所示,需要使用
excel
宏进行修改。 下面是它的外观(以空格分隔)。但是,并非所有文本文件都以空格分隔

"W2"  "S4"  SEC "W1"  PF22 0.7 PRM22 0.7 PI  "P2"  
"W2"  "S3"  SEC "W1"  PF22 0.7 PM22 0.7 PI  "P2"  
"W2"  "S2"  SEC "W1"  PF22 0.7 PM22 0.7 PI  "P2"  
"W2"  "S1"  SEC "W1"  PF22 0.7 PM22 0.7 PI  "P2"  
我想检查每一行,如果该行包含的“Sn”和“Pm”等于excel文件中的列表对,请将0.7s值更改为0.5

S1  P2
S2  P1
S5  P1
... ...
我试图修改线程中的代码,但未成功


我应该如何继续?

请参阅下面的代码。它可能并不完美,但它基于OP中的数据样本工作。它基于
chr(34)
,这是
的代码

Sub RepStr()
最后一排一样长
Dim srchList As工作表
将主列表设置为工作表
变暗,开始一样长
暗淡的sStop与长的sStop相同
作为字符串的Dim sValue
暗淡的pStart尽可能长
将顶部调暗为长
将pValue设置为字符串

Set srchList=Sheets(“Sheet8”)'您好,我们可以坐在每个字符集之间有一个空格吗?我的意思是,例如,在“W2”和“S4”之间“1个空间,介于PF22和0.7之间1个空间。这是正确的吗?对于Pn和Sn,n bi能大于9吗?可以是两位数吗?欢迎使用SO。请查看,并发布您修改的代码,以及您遇到的具体问题。谢谢。它在PF22和0.7之间有1个空间。是的,n可以大于9。另一个问题。有没有办法从字符串中的第三个“开始。您是指字符串中的第三个字符还是工作表中的第三行?
Sub RepStr()
Dim lastrow As Long
Dim srchList As Worksheet
Dim mainList As Worksheet
Dim sStart As Long
Dim sStop As Long
Dim sValue As String
Dim pStart As Long
Dim pSttop As Long
Dim pValue As String

Set srchList = Sheets("Sheet8") '<- Sn Pn list
Set mainList = Sheets("Sheet7") '<- String List

lastrowMain = mainList.Range("A" & Rows.Count).End(xlUp).Row
lastrowsrch = srchList.Range("A" & Rows.Count).End(xlUp).Row

i = 1
While i <= lastrowMain
    'Code based on your string is located at Column A of mainList
    sStart = InStr(5, mainList.Range("A" & i).Value, Chr(34)) + 1
    sStop = InStr(sStart + 1, mainList.Range("A" & i).Value, Chr(34))
    sValue = Mid(mainList.Range("A" & i).Value, sStart, sStop - sStart)

    pStart = InStr(InStr(1, mainList.Range("A" & i).Value, "PI"), mainList.Range("A" & i).Value, Chr(34)) + 1
    pStop = InStr(pStart + 1, mainList.Range("A" & i).Value, Chr(34))
    pValue = Mid(mainList.Range("A" & i).Value, pStart, pStop - pStart)

    'Code based on your matching values are located at srchList Column A (S values), Column B (P values)
    For j = 1 To lastrowsrch
        If srchList.Range("A" & j).Value = sValue And srchList.Range("B" & j).Value = pValue Then
            mainList.Range("A" & i).Value = Replace(mainList.Range("A" & i).Value, 0.7, 0.5)
        End If
    Next j
i = i + 1
Wend
End Sub