2011-05-12 37 views
2

這就是我要做的:VBA宏複製錯誤的數據單元格

如果j包含單詞被告 而 如果F包含單詞贖 然後 如果G中 「第五村」然後保留「OF」右邊的所有內容 否則如果G包含「VS」 然後將所有內容保留在「VS」的右邊 否則如果G包含「V」(注意V之前和之後的空格) 然後保存所有內容右邊的「V」

如果k包含「」(連續兩個空格) 然後保持它 或者 如果k包含「OF」 UNKNOWN配偶然後取出電池的最後一個字符,這將是一個逗號 ,如果電池以下劃線開頭 然後將其刪除 然後保持它

G的結果分配給相應的N個單元 K的結果分配給相應的O單元

這是我做過什麼:

Sub Inspect() 

Dim RENums As Object 
Dim RENums2 As Object 
Dim LValue As String 
Dim LValue2 As String 


Set RENums = CreateObject("VBScript.RegExp") 
Set RENums2 = CreateObject("VBScript.RegExp") 


RENums.Pattern = "DEFENDANT" 
RENums2.Pattern = "FORECLOSURE" 


    Dim lngLastRow As Long 
    lngLastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row 


    Dim i 

    For i = 1 To lngLastRow 

    If RENums2.test(Range("F" & i).Value) Then 

     If RENums.test(Range("J" & i).Value) Then 

      pos = InStr(Range("G" & i), " V ") 

      pos2 = InStr(Range("G" & i), " VS ") 

      pos3 = InStr(Range("G" & i), " V ESTATE OF ") 

      dbspace = InStr(Range("K" & i), " ") 

      If pos3 <> 0 Then 
      LValue2 = Right(Range("G" & i), Len(Range("G" & i)) - pos * 2) 
      ElseIf pos <> 0 Then 
      LValue2 = Right(Range("G" & i), Len(Range("G" & i)) - pos - 2) 
      ElseIf pos2 <> 0 Then 
      LValue2 = Right(Range("G" & i), Len(Range("G" & i)) - pos - 2) 
      End If 

      If dbspace <> 0 Then 
      LValue = Range("K" & i) 
      End If 


      schr = Right(LValue, 1) 
      If schr = "_" Then 
       With WorksheetFunction 
       Range("N" & i).Value = Trim(.Substitute(LValue, "_", "")) 
       End With 
      Else 
       Range("N" & i).Value = Trim(LValue) 
      End If 
      Range("O" & i).Value = Trim(LValue2) 


     End If 
    End If 

    Next i 

End Sub 

使用上面的宏,在某些情況下,正確的值不會粘貼到N中。而從以K另一個小區中的值被粘貼到錯誤小區中N.

我附Excel電子表格的一個例子下面的鏈接到我從未收到響應:

http://www.excelforum.com/excel-programming/775695-wrong-data-copied-into-new-cell-from-macro.html

由於作出迴應。

回答

1

您的LValue和LValue2變量正在有條件地填充(即,不是每次都通過循環),但是您的最終塊每次都會執行,所以它有理由說,通過循環某些時候,您正在使用一個舊的 LValue或LValue2(或兩者)的值。

您需要在循環開始時將其清除,否則在您的LValue和LValue2 IF塊中都有一個ELSE子句來處理該場景。根據您的評論

編輯:我更喜歡在這種情況下使用MID()RIGHT(),使得它更容易獲得數學權利,因爲我們是從左邊計算(這是值InStr()回報):

cellText = Range("K" & i).Value 
LValue = Mid(cellText, Unknown + 18, 100) 

一些其他注意事項:

  • 您可以使用它很多次,把測試值到一個變量像我上面那樣。它甚至可能稍微快一點,而不是每次都返回工作表。
  • 我更喜歡使用Cells(11, i).ValueRange("K" & i).Value。工作原理相同,但使用變量行號或列號會更容易。
  • 通常工作你做的方式,但一定要使用範圍對象(Range().ValueRange().Formula或其他)的正確財產,而不是僅僅依靠「默認屬性」永遠是正確。
+0

這實際上是正確的。我添加了一個額外的if語句來解釋「未知配偶」。這是我現在的:ElseIf unknown <> 0 Then LValue = Right(Range(「K」&i),Len(Range(「K」&i)) - unknown * 2) 問題是它返回「OUSE KATARINA ASKI「,而不是」KATARINA ASKI「我試圖找出原因。有更好的解決方案。感謝您的迴應。 – JohnMerlino 2011-05-12 13:15:06

1

檢查下劃線時,您正在測試上一個字符是否爲下劃線。您的問題表明您要測試值是否以下劃線開始

schr = Right(LValue, 1) 
    If schr = "_" Then 

嘗試

schr = Left(LValue, 1) 
    If schr = "_" Then 
相關問題