2011-12-06 8 views
2

私はセル2時21(エクセル)

から各列に行く値でExcelのシートを持っていますそれをマクロで処理します。その1を反復処理:しかし、私は唯一の私は範囲を与えた列の新しい範囲(「IT B」)を使用しようとした

Private Sub Worksheet_Activate() 
Dim zelle As Range 
    For Each zelle In ActiveSheet.Range("B2:B21") 
    If zelle.Value = Application.WorksheetFunction.Max(Range("B2:B21")) Then 
     zelle.Interior.ColorIndex = 6 
    Else 
     zelle.Interior.ColorIndex = xlNone 
    End If 
    Next 
End Sub 

...与えられたハードコーディングされた範囲のためにそれを行う方法を知っていますしかし、それは動作しませんでした。

たぶん2行か3行ですか?

答えて

6

これはうまくいく可能性があります。ハードコードされた範囲を使用するのではなく、使用される列をループし、異なる「長さ」の列を調整します。これは、単一のヘッダー行と列を想定しています。

Private Sub Worksheet_Activate() 
Dim zelle As Range 
Dim rng As Range 
Dim lCol As Long 
Dim lLastRow As Long 
    With ActiveSheet 
    For lCol = 2 To .UsedRange.Columns.Count 
     lLastRow = .Cells(.Rows.Count, lCol).End(xlUp).Row 
     Set rng = .Range(.Cells(2, lCol), .Cells(lLastRow, lCol)) 
     For Each zelle In rng 
     If zelle.Value = Application.WorksheetFunction.Max(rng) Then 
      zelle.Interior.ColorIndex = 6 
     Else 
      zelle.Interior.ColorIndex = xlNone 
     End If 
     Next 
    Next lCol 
    End With 
End Sub 
0

使用変数:

row_var_1col_var_1row_var_2col_var_2があなたのループで繰り返すことができる変数です
Range(Cells(row_var_1, col_var_1),Cells(row_var_2, col_var_2)) 

2

これを行うための別の方法は、VBA無しある

  1. であり、例えば、最大値を計算します(= MAX(A1:A10))と
  2. 条件付き書式を使用するには、= MAX(A1:A10)の計算結果に一致するセルを強調表示します。

私はこの質問がVBAに言及していることを知っていますが、これは動的でVBAに依存しません。

+0

これはまた素晴らしい解決策です:)しかし、多くの列にプッシュしている間は、次の列については整形を使用する必要があることを確認する必要があります。そうしないと、値が変更されることがあります – Stefan

+0

+ 1自動で更新し、時間消費ループを回避する優れた方法。 – brettdj