2015-02-24 92 views
0

我有一个文本文件,如下所示,我需要使用宏修改excel。 以下是它的样子(空格分隔)。然而并非所有的文本文件都是空格分隔的。使用VBA有条件地修改文本文件

"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" 

我要检查每一行,如果该行包括“锡”和“PM”等于我在我的Excel文件的列表对,改变0.7秒值0.5。

S1 P2 
S2 P1 
S5 P1 
... ... 

我试图修改this线程中的代码并且不成功。

我该如何继续?

+0

你好,我们坐在那里每个字符集之间有1个空格吗?我的意思是,例如,在“W2”和“S4”1空间之间以及在PF22和0.7 1空间之间。那是对的吗? – Dubison 2015-02-24 16:52:22

+0

并且对于Pn和Sn,n可以大于9吗?它可以是2位数字吗? – Dubison 2015-02-24 16:53:28

+0

欢迎来到SO。请查看[如何提问](http://stackoverflow.com/help/how-to-ask),并发布您修改的代码,以及您遇到的具体问题。 – guitarthrower 2015-02-24 16:58:34

回答

0

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

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 
+0

非常感谢,它效果很好! – Dave 2015-02-24 21:08:00

+0

另一个问题。有没有办法从第三个字符串开始“ – Dave 2015-02-24 21:43:35

+0

你是指字符串中的第三个字符还是工作表中的第三行? – Dubison 2015-02-25 09:00:12