Jeffreyの会社には、多数のCSE(Ctrl + Shift + Enter)配列数式を使用するレポートが多数あります。誰かがEnterキーを押したときにCtrlキーとShiftキーを押したままにするのを忘れると、結果の数式は正解と等しくなりません。各セルを監査し、\ {}括弧を探すのは、面倒で時間のかかる作業です。ジェフリーは、Ctrl + Shift + Enterが必要なときに押されていない場合に、「角かっこがない」をすばやく見つける方法やエラーフラグを立てる方法があるかどうか疑問に思います。

Excelでこれを行うための本質的または定型的な方法はありません。これは、マクロに基づくソリューションに目を向ける必要があることを意味します。

幸い、VBAには、この問題に取り組むためのさまざまな方法が用意されています。 1つのアプローチは、単に数式を使用して、選択範囲内の各数式が実際に配列数式であることを確認することです。

Sub MakeCSE1()

Dim rCell As Range

For Each rCell In Selection         rCell.FormulaArray = rCell.Formula     Next rCell End Sub

このマクロは、実際にマクロを実行する前に、「変換」するセルを選択することを前提としています。必要に応じて、セルの範囲を定義し(範囲に名前を付ける)、その範囲で常に機能する同様のマクロを実行できます。

Sub MakeCSE2()

Dim rng As Range     Dim rCell As Range     Dim rArea As Range

Set rng = Range("CSERange")

For Each rArea In rng.Areas         For Each rCell In rArea.Cells             If rCell.HasArray = False Then                 rCell.FormulaArray = rCell.Formula             End If         Next rCell     Next rArea End Sub

このマクロは、CSERangeという名前の範囲を探し、その範囲内のすべてのセルをチェックします。配列数式が含まれていない場合、数式は配列数式に変換されます。

HasArrayプロパティを使用して、セルに配列数式が含まれているかどうかを確認することに注意してください。このプロパティは、実際には他の方法で役立ちます。たとえば、次のような単純なユーザー定義関数を作成できます。

Function NoCellArray1(rng As Range) As Boolean     NoCellArray1 = Not rng.HasArray End Function

この関数は、ポイントされているセルに配列数式が含まれていない場合にTrueを返します。含まれている場合は、Falseが返されます。次に、この関数を条件付きフォーマットの基礎として使用できます。あなたがする必要があるのはこのようにそれを使用するフォーマットを作成することです:

=NoCellArray1(A5)

セルに配列数式が含まれていない場合、NoCellArrayはTrueを返すため、条件付き形式では、セルの色を赤に設定したり、セルに必要な配列数式がないことを示すその他の表示を設定したりできます。次の関数を使用して同じタスクを実行することもできます。

Function NoCellArray2(rng As Range) As Boolean     NoCellArray2 = (Evaluate(rng.FormulaArray) <> rng.Value)

End Function

まったく異なるアプローチは、数式に何かを追加して、配列数式として簡単に認識できるようにすることです。たとえば、配列数式の最後に次を追加できます。

+N("{")

これは計算にはまったく影響しませんが、計算に影響があるかどうかを簡単に確認できます。チェックは、次のようなイベントハンドラーによって実行できます。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Right(Selection.FormulaArray, 5) = "(""{"")" Then         ActiveCell.Select         Selection.FormulaArray = ActiveCell.Formula     End If End Sub

ハンドラーは、数式が( “\ {“)で終わっているかどうかを確認し、そうである場合は、数式が配列数式として扱われるように強制することに注意してください。このアプローチの優れている点は、ワークシートでCtrl + Shift + Enterを押す必要がないことです。イベントハンドラーが自動的に処理します。ある時点で、数式を通常の(配列以外の)バージョンに戻したい場合は、+ N( “\ {“)が含まれないように数式を変更するだけです。

注:

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

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

このヒント(473)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。