2017-06-29 20 views
0

我創建了一個在我的工作表中尋找部分字符串的宏。如果找到該字符串,它將在另一個冒號中將值更改爲0。是否有可能讓此宏在Instr值所在的同一行中更改一個值?

Sub Contain_Copy() 
    Dim ranger        As Long 
    Dim lastrow        As Long 
    Dim FromSheet As Worksheet, ToSheet  As Worksheet 
    Dim a         As Long 

    Set FromSheet = Sheets("C") 
    Set ToSheet = Sheets("D") 
    lastrow = FromSheet.Cells(Rows.Count, "N").End(xlUp).Row 

    For ranger = 2 To lastrow 
     If InStr(1, FromSheet.Cells(ranger, "N"), "ET7", vbTextCompare) > 0 Then 
      a = a + 1 
      Worksheets("C").Cells(a, 3) = 0 
     End If 
    Next ranger 
End Sub 

在這種情況下在我的工作表「E3A02ET7」的字符串是在列「N」和行9. 由於它包含「ET7」,在列「C」的值將變爲0。

的問題是,它改變1.

我希望它改變列9中的值行中的值,由於這是在同一行與部分串的值ET7。

你能幫我找到解決辦法嗎?

非常感激,
B.麪包車Starkenburg

回答

0

你只需要改變FromSheet.Cells(a, 3) = 0FromSheet.Cells(ranger, 3) = 0

所以,你的代碼就變成了:

Sub Contain_Copy() 
    Dim ranger        As Long 
    Dim lastrow        As Long 
    Dim FromSheet As Worksheet, ToSheet  As Worksheet 

    Set FromSheet = Sheets("C") 
    lastrow = FromSheet.Cells(Rows.Count, "N").End(xlUp).Row 

    For ranger = 2 To lastrow 
     If InStr(1, FromSheet.Cells(ranger, "N"), "ET7", vbTextCompare) > 0 Then 
      FromSheet.Cells(ranger, 3) = 0 
     End If 
    Next ranger 
End Sub 
+0

謝謝,如此定義「a」甚至沒有必要? –

+0

@BerendStarkenburg - 對,不需要'a'。 – Mrig

0

的代碼會是這樣。

Sub Contain_Copy() 
Dim ranger        As Long 
Dim lastrow        As Long 
Dim FromSheet As Worksheet, ToSheet  As Worksheet 
Dim a         As Long 

Set FromSheet = Sheets("C") 
Set ToSheet = Sheets("D") 
lastrow = FromSheet.Cells(Rows.Count, "N").End(xlUp).Row 
With FromSheet 
    For ranger = 2 To lastrow 
     If InStr(.Cells(ranger, "N"), "ET7") Then 
      .Cells(ranger, 3) = 0 
     End If 
    Next ranger 
End With 
End Sub 
相關問題