我有一栏:U
。此列的值从U10
到U500
。
我需要得到的是该列的最后一个更改值,如果它没有改变,那么一个文本" False"或者什么,如果最后一个更改的值是一个空单元格,那么忽略它..
Column U
11
11
5
11
11
21
例如,结果应为21.
我已尝试比较两行和条件格式,但是如此大范围对每行进行所有这些操作有点太多了。
有人知道这样做的好方法吗?
答案 0 :(得分:2)
这样的事情应该做到......
Sub test()
Dim LastRow As Long, i As Long
With Worksheets("Sheet1") 'your sheet name
LastRow = .Cells(.Rows.Count, "U").End(xlUp).Row 'find last used row in column U
For i = LastRow To 2 Step -1 'loop from last row to row 2 backwards (row 1 can not be compared with row before)
If .Cells(i, "U").Value <> .Cells(i - 1, "U").Value Then 'compare row i with row before. If it changes then ...
MsgBox "Last row is: " & .Cells(i, "U").Address & vbCrLf & _
"Value is: " & .Cells(i, "U").Value
Exit For 'stop if last changing row is found
End If
Next i
End With
End Sub
它从列U中最后一次使用的行循环到第一行,并检查当前行是否与之前的行不同。如果是这样就停止了。
答案 1 :(得分:0)
我不确定你想要的输出方式。
IF(AND(RC[-1]<>R[-1]C[-1],ROW(RC[-1])>500,R[-1]C[-1]<>""),RC[-1],"")
在单元格V10:V500
中尝试此公式答案 2 :(得分:0)
试试这个宏。 首先运行AnalyseBefore sub,当您想要检查值是否已更改时,运行AfterAnalyse子。 如果您希望范围是动态的,请使用我评论过的代码并在范围计算中包含iCount
Sub AnalyseBefore()
Dim iCount
Range("U10").Select
iOvalue = Range("U500").Value
'iCount = Selection.Rows.Count
Range("Z1").Value = iOvalue
End Sub
Sub AnalyseAfter()
Dim iCount
Range("U10").Select
iNValue = Range("U500").Value
Range("Z2").Value = iNValue
iOvalue = Range("Z1").Value
If (iOvalue = iNValue) Then
Range("U500").Value = "FALSE"
End If
End Sub