VBA Excel搜索列,用于上次更改值

时间:2017-03-23 08:16:34

标签: excel vba excel-vba compare

我有一栏:U。此列的值从U10U500

我需要得到的是该列的最后一个更改值,如果它没有改变,那么一个文本" False"或者什么,如果最后一个更改的值是一个空单元格,那么忽略它..

Column U  
11  
11   
5  
11  
11  
21  

例如,结果应为21.

我已尝试比较两行和条件格式,但是如此大范围对每行进行所有这些操作有点太多了。

有人知道这样做的好方法吗?

3 个答案:

答案 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