这就是我想要做的事情:
如果J包含“被告”一词 和 如果F包含止赎一词 然后 如果G包含“V ESTATE OF” 然后将所有内容保留在“OF”的右侧 否则如果G包含“VS” 然后把一切都放在“VS”的右侧 否则如果G包含“V”(注意V之前和之后的空格) 然后将所有内容保留在“V”右侧
如果K包含“”(两个连续的空格) 然后保持它 要么 如果K包含“UNKNOWN SPOUSE OF” 然后删除单元格的最后一个字符,这将是一个逗号 如果单元格以下划线开头 然后将其删除 然后保持
将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
感谢您的回复。
答案 0 :(得分:1)
您的LValue和LValue2变量正在有条件地填充(即,不是每次都通过循环),但是您的最后一个块每次都会被执行,所以有理由认为有时候通过循环,你正在使用值。
您需要在循环开始时清除它们,否则在LValue和LValue2 ELSE
块中都有一个IF
子句来处理该场景。
根据您的评论进行修改:在此方案中,我更倾向于使用MID()
到RIGHT()
,因此我们可以更轻松地获得正确的数学计算左边(这是InStr()
返回的值):
cellText = Range("K" & i).Value
LValue = Mid(cellText, Unknown + 18, 100)
一些补充说明:
Cells(11, i).Value
用于Range("K" & i).Value
。使用相同的行或列号更容易使用。Range().Value
或{{1或者其他)而不是仅仅依靠“默认属性”来保持正确。答案 1 :(得分:1)
检查下划线时,您正在测试最后字符是否为下划线。您的问题表明您要测试值是否以下划线开始。
schr = Right(LValue, 1)
If schr = "_" Then
尝试
schr = Left(LValue, 1)
If schr = "_" Then