Zarは、ワークシートの列Aの値に条件付き形式を適用する必要がありますが、ルールが何であるかを理解できません。列Aの他に、列Bから始まるデータもあり、定期的に新しい列のデータを追加しています。 Bで始まるすべての奇数列にデータがある場合、Zarは列Aに1つの形式を適用する必要があります(Bはワークシートのデータ列1であるため、奇数と見なします)。で始まるすべての偶数列にデータがある場合C、Zarは、列Aに別の形式を適用することを望んでいます。Bで始まるすべてのデータ列にデータがある場合(いくつであっても)、3番目の形式を適用する必要があります。

Zarが間違いなく理解しているように、数式を簡単に作成して、列BとCに情報があるかどうかを判断し、それに応じて書式を適用できます。実際、次のような単純な式でうまくいきます。

=COUNTA(B1:C1)=2 =COUNTA(B1)=1 =COUNTA(C1)=1

最初の数式は、BとCの両方に情報がある場合はTrueを返し、Bに情報がある場合は2番目、Cに情報がある場合は3番目の数式を返します。各ルール/数式で[Stop If True]を選択する限り、その後、フォーマットは正常に機能します。

BとCを超える複数の列の数式を作成することは、ほんのわずかに困難です。同じ3種類の数式は、順番に次のようになります。

=COUNTA(B1:G1)=6)

=COUNTA(B1,D1,F1)=3 =COUNTA(C1,E1,G1)=3

必要に応じて、数式にセル参照を簡単に追加できます。このようなアプローチは、B1:G1の範囲のすべてのセルに何かがある場合、すべての奇数セル(B1、D1、F1)に何かがある場合、およびすべての偶数セル(C1、E1、 G1)それらの中に何かがあります。範囲内の一部のセルにのみ値が含まれている場合、Trueは返されません。たとえば、セルB1、C1、およびE1に値がある場合、Trueは返されず、フォーマットの基準はいずれも満たされません。

これらはすべて上記の制限で正常に機能しますが、Zarが探しているものとは異なります。彼は、列にデータを追加し続け、列にデータを追加し続けているため、毎週使用されている列の数を検出する数式が必要です。追加されたデータを考慮に入れるために数式を手動で編集する必要なしに、それに応じて数式。つまり、列Hにデータを追加する場合、追加された列を考慮して数式を自動的に調整する必要があります。

=COUNTA(B1:H1)=7)

=COUNTA(B1,D1,F1,H1)=4 =COUNTA(C1,E1,G1)=3

それは明らかにより複雑なニーズです。おそらく、問題に取り組む最善の方法は、セルの範囲を調べて3つの基準のいずれかが満たされているかどうかを判断できるユーザー定義関数(マクロ)を作成することです。

次のマクロについて考えてみます。

Function CellChk(crng As Range) As String     Dim iNumOdds As Integer     Dim iNumEvens As Integer     Dim iOdds As Integer     Dim iEvens As Integer     Dim iTots As Integer     Dim iTotCells As Integer     Dim rWork As Range     Dim rCell As Range     Dim iLastCol As Integer     Dim sTemp As String

iOdds = 0     iEvens = 0     iTots = 0

' Figure out the real last column in the worksheet and set range     iLastCol = ActiveSheet.Cells.Find(What:="*", _         SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, _         LookIn:=xlFormulas).Column     Set rWork = Range(Cells(crng.Row, 2), Cells(crng.Row, iLastCol))



iTotCells = rWork.Count     iNumOdds = (iTotCells + 1) \ 2    ' Number of odd columns     iNumEvens = iTotCells - iNumOdds  ' Number of even columns

For Each rCell In rWork         If rCell <> "" Then             If ((rCell.Column - 1) Mod 2) = 1 Then                 iOdds = iOdds + 1             Else                 iEvens = iEvens + 1             End If             iTots = iTots + 1         End If     Next rCell

sTemp = ""

If iTots = iTotCells Then         sTemp = "t"

ElseIf iOdds = iNumOdds Then         sTemp = "o"

ElseIf iEvens = iNumEvens Then         sTemp = "e"

End If     CellChk = sTemp End Function

マクロを使用するには、チェックする行のアドレスを渡します。

したがって、たとえば、セルA3に条件付き書式ルールを適用する場合は、マクロにB3またはC3のアドレスを渡します。A3以外は循環参照になります。マクロは、その行で使用されている最後のセルを探し、奇数セルと偶数セルの中に何かがあるかどうかを判別します。マクロは4つの値のいずれかを返します。最初の基準が満たされている場合(列Bで始まる行のすべてのセルに何かが含まれている場合)、「t」が返されます。すべての奇数列(Bが最初の奇数列)に何かが含まれている場合、「o」が返されます。すべての偶数列(Cが最初の偶数列)の場合

それらに何かがあると、「e」が返されます。 3つの基準のいずれも満たされない場合、関数は何も返しません。

数式の評価に依存する3つの条件付き書式ルールを設定する必要があります。このマクロで使用できる3つは次のとおりです。

=CellChk(B1)="t")

=CellChk(B1)="o")

=CellChk(B1)="e")

これらの例は、セルA1に条件付きフォーマットを適用するためのものです。マクロで分析する正しい行にセル参照を調整します。単一のセル(これらの例ではB1)を指定した場合でも、マクロは実際に表示する行のセル数を計算することに注意してください。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(5945)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。