次のような条件付き書式を追加しようとしていました。
式=($G5<>"")
でセット内部を緑にする場合は、これを $A$5:$H$25 に使用します。
これを試してみて、期待どおりにうまくいき、次にこれを次のコードでVBAコードとして適応させようとしましたが、これは機能していますが、期待どおりではありません:
With ActiveSheet.UsedRange.Offset(1)
.FormatConditions.Delete
'set used row range to green interior color, if "Erledigt Datum" is not empty
With .FormatConditions.Add(Type:=xlExpression, _
Formula1:="=($" & cstrDefaultProgressColumn & _
.row & "<>"""")")
.Interior.ColorIndex = 4
End With
End With
問題は、.row
デバッグ中に正しい行を提供していることですが、行を設定するための解決策によっては、追加した条件式が 1 行以上ずれているようです。そのため、フォーマットされているはずの行へのオフセットを持つ条件付きフォーマットになってしまいます。
ダイアログでは、=($G6<>"")
G3またはG100310またはこのようなものです。しかし、私の望むG5ではありません。
行の設定は動的にする必要があります。これは、異なる行から始まるデータを持つことができる異なるワークシートで条件付き書式を設定するために使用されるためです。
私は自分のWith
取り決めを疑っていましたが、この問題は解決しませんでした.
編集:より具体的に言うと、これはUsedRangeの問題ではなく、これと同じ問題があります:
Dim rngData As Range
Set rngData = ActiveSheet.Range("A:H") 'ActiveSheet.UsedRange.Offset(1)
rngData.FormatConditions.Delete
With rngData.FormatConditions.Add(Type:=xlExpression, _
Formula1:="=($" & cstrDefaultProgressColumn & _
1 & "<>"""")")
.Interior.ColorIndex = 4
End With
私のデータは次のようになります。
1 -> empty cells
2 -> empty cells
3 -> empty cells
4 -> TitleCols -> A;B;C;...;H
5 -> Data to TitleCols
. .
. .
. .
25
この編集されたコードを Excel 2007 で実行し、条件付きダイアログで式を検索すると、それは=($G1048571<>"")
である必要が=($G1<>"")
あり、すべて正常に動作します。
さらに奇妙なことに、これは、各行に条件付き書式を追加するために使用された、うまく機能するコードの編集バージョンです。しかし、行全体またはその一部をフォーマットする式を書くことが可能であることに気付きました.
編集: 追加のタスク情報
ここでは条件付き書式を使用します。これは、この関数がユーザー入力に反応するようにテーブルを設定するためです。したがって、適切に設定し、ユーザーがこの表の条件付き列のセルを編集すると、対応する行が使用されている行の範囲で緑色に変わります。
ここで、メインのヘッダー行の前に行があり、さまざまな数のデータ列があり、対象の列が変わる可能性があるため、もちろんいくつかの特定の情報を使用します.
それらを最小限に抑えるために、NamedRanges を使用して正しいオフセットを決定し、正しいDefaultProgessColumn
.
GetTitleRow
NamedRange または header-contents によってヘッダー行を決定するために使用されます。
With ActiveSheet.UsedRange.Offset(GetTitleRow(ActiveSheet.UsedRange) - _
ActiveSheet.UsedRange.Rows(1).row + 1)
Formula1 を修正しました。前に構成が適切に形成されていないことがわかったためです。
Formula1:="=(" & Cells(.row, _
Range(strMatchCol1).Column).Address(RowAbsolute:=False) & _
"<>"""")"
strMatchCol1
- 範囲の名前です。