2017-03-23 17 views
1

私にはカラムがあります:U。この列の値はU10からU500までです。VBA最後に変更された値のExcel検索欄

最後に変更された値がカラムの値を変更しない場合は、テキスト「False」などが変更され、最後に変更された値が空のセルの場合は無視されます。

Column U 
11 
11 
5 
11 
11 
21 

ここで例えば、結果は、私は2つの行を比較すると、条件付き書式ではなく、このような大きな範囲で行ごとにこのすべてをやってみた21

ビットが多すぎるべきです。

誰かがこれを行う良い方法を知っていますか?そのような

答えて

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で最後に使用された行から最初の行をチェックするループ。もしそうなら、それは止まる。

+0

素晴らしいですダイナミックな使用になりたいので、ありがとうございました!今私は正しい価値を得るが、私の次のステップは失敗する。あなたは助けたいのですが、それはおそらく小さなものです – EfhK

+0

あなたのケースでは 'For i = LastRow To 11 Step -1'だけ行U10にチェックすることを忘れてしまった –

+0

私は今、' = INDEX(QueryResult !$ L $ 10:$ L $ 500、MATCH(QueryResult!D2、QueryResult!$ U $ 10:$ U $ 500,0)) 'あなたのコードから出てくる値を検索します。問題は、列Uに値が何度も立つことができるということです。この例の最後の21もここで取得する必要があります。 – EfhK

0

出力方法はわかりません。

IF(AND(RC[-1]<>R[-1]C[-1],ROW(RC[-1])>500,R[-1]C[-1]<>""),RC[-1],"") 

細胞V10で、この式を試してみてください:V500

0

は、このマクロを試してみてください。 最初にAnalyseBeforeサブを実行し、値が変更されたかどうかをチェックしたいときは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 
関連する問題