条件がFalseの場合にセル値を変更しないままにする(Microsoft Excel)
IF関数を使用している間、Vineetは、条件がfalseの場合、セルに古い値を保持したいと考えています。つまり、IF関数が使用されているセルの値は、IF関数によってテストされている条件が真である場合にのみ変更する必要があります。ただし、デフォルトでは、条件がFalseの場合、IF関数は値を0にします。
IF関数は、最大3つのパラメーターを取ることができます。最初のパラメーターは行われる比較であり、2番目のパラメーターは比較が真の場合に返されるものであり、3番目のパラメーターは比較が偽の場合に返されるものです。最後のパラメータを省略してもかまいませんが、省略した場合、比較がfalseの場合、Excelは値0を返します。 (これは、VineetがIF関数の使用によって返されるものです。)
したがって、明らかな解決策は、比較がfalseの場合に返される必要があるものをIF関数に提供することを確認することです。たとえば、数式がセルB1にあり、セルA1の何かを比較しているとします。使用する式は次のようになります。
=IF(A1<10,"under ten",B1)
A1の値が10未満の場合、「10未満」という単語が返されることに注意してください。この条件が満たされない場合、B1の値が返されます。
この数式はセルB1にあるため、条件がfalseの場合、セルの前の値が返されることを意味します。
また、数式に循環参照が含まれていることも意味します。循環参照が正常に機能するためには、ワークシートで循環参照が発生しても問題がないことをExcelに通知する必要があります。ツール|を選択しますオプション| [計算]タブで、[反復]チェックボックスが選択されていることを確認します。 Excelは、文句なしに循環参照を許可するようになりました。
ワークシートで循環参照を許可したくない場合、唯一の手段は、セルA1への変更に基づいてセルB1の値を更新するマクロを作成することです。
Private Sub Workbook_SheetChange(ByVal Sh As Object, _ ByVal Target As Range) ' See if the change is related to our cell If Not (Application.Intersect(Target, Range("A1")) _ Is Nothing) Then If Range("A1") < 10 Then Range("B1") = "under ten" End If End If End Sub
この単純なマクロは、ThisWorkbookモジュールに追加されると、ワークブックに変更が加えられるたびに実行されます。値がセルA1が変更された場合(およびそのセルのみ)、値が10未満であるかどうかがチェックされます。そうである場合、セルB1の値が変更されます。そうでない場合は、セルB1の値はそのままになります。
これまでに説明したアプローチのいずれか、数式またはマクロについて覚えておく必要のある「落とし穴」が1つあります。セルA1の値が(たとえば)15の場合、セルB1には、以前にあったものが何であれ、含まれます。セルA1の値を(たとえば)7に変更すると、B1は「10未満」に変更されます。それは問題ありませんが、その時点からセルB1は変更されていないように見えます。どうして?次に、セルA1を10より大きい値に変更すると、セルB1には(今説明したように)以前にあったものが含まれるためです。そして、あなたが今理解しているように、以前にあった値は、「10未満」であった以前の真の結果の結果です。したがって、trueまたはfalseの場合、この時点以降の数式またはマクロには「10未満」というテキストが表示されます。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(8260)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。