
範囲全体にわたって数式のコンポーネントを追加したいと思います。特定の項目の純キャッシュフローを表示するセクションが 1 つと、複数の特定の項目があります。
たとえば、=8+9-5
複数のセルに「12」が表示されます。値がセル レベルで集計されていない場合は、数式を使用してSUMIF
正と負のセルのみを追加するのは簡単ですが、セル レベルで集計されているため、基礎となる値を詳しく調べて、基礎となるすべてのコンポーネントに対して数式と同等のものを使用しようとしていますSUMIF
。
上記の例では、範囲の集計セルに「+17」と表示し、1 つのセルに「-5」と表示するようにしています。
これどうやってするの?
答え1
最も重要な問題は、ワークシートから別のセルの数式文字列にアクセスする方法です。これを実行できる既存のワークシート関数はありません。したがって、まず次の 2 つのうちのいずれかを実行する必要があります。1) 検索と置換を使用してセルの内容を変更し、数式ではなく文字列を保持するようにするか、2) VBA を使用してセルの数式文字列にアクセスします。
(1) は、操作するセルを選択し、Ctrl+を押してH置換ダイアログを開くことで実行できます。 を検索し(関心のある数式は例のようで、後続の等号を含まないものと想定)、何も置換しません。これにより、値 12 を示す数式を含むセルが、文字列 を示すセルに=
変更されます。=8+9-5
8+9-5
(2) はセルプロパティにアクセスすることで実現できます.Formula
。たとえば、セル A1 の数式を取得するには、次のような非常に単純な UDF を使用します。
Public Function GetFormula(r as Range) as String
GetFormula = r.Formula
End Function
いずれかの方法でこれらの文字列を取得したら、必要な値を抽出するために、、、FIND
などの文字列操作関数を巧みに使用しなければなりません。これを行うと、あなたと私の両方の時間の無駄になるため、ここではこれを行いません。LEN
VALUE
答え2
ワークブックにシートを追加します。これを「セットアップ」と呼びます。
A1 に8
、A2 に9
、A3 に と入力します-5
。元のシートの列に存在する定数を含む数式と同じ数の列をコピーします。(範囲の構成によっては、セットアップ シートで A1、B1、C1 を使用して、代わりに下にコピーする必要がある場合があります。元のシートの範囲の形状と一致する範囲を作成するのが目的です。)
元のシートで、すべての数式=8+9-5
を に置き換えます=Setup!A1+Setup!A2+Setup!A3
。これは、数式を評価する検索と置換操作で実行できます。
元のシートにハードコードされた値の代わりに、セットアップ シートに条件付き数式を作成できるようになりました。
=sumif(Setup!A1:A3,">0")
=sumif(Setup!A1:A3,"<0")