データベース風使い方の薦め(1)

エクセルをデータベース風に使うことができます。これはかなり実用的なので,お薦めです。

例えば設計を組む場合,歩掛は昨年と同じで単価だけ改正されたとき,どうしていますか?
ほんの数ヶ所だけだったら,個々に直す方が早いかも知れませんが,
変更箇所が多数あって,修正漏れをなくしたいという方に,その方法を紹介します。

まずメインとは別の場所に単価表を作ります。
その単価を複数のファイルから読む(参照する)ことがなければ,
同じファイルの別のシートに作っておくのが無難でしょう。
単価表の例
 ここで注意するのは列A「工種」欄の名称です。
 後で,この名称を目標にしますので,
 アルファベットや空白を使う場合は特に
 全角か半角かを覚えておいて,
 後で同じ名称を使ってください。

メインのシートの例です。数量と単価をかけた金額を合計しています。
この単価の入れ替え作業を(後々)軽減するために「VLOOKUP関数」を使います。
                  VLOOKUP関数
設計の例
 C3セルに入っている式は左のとおりです。
 「検索値」がA3「軽作業」,
 「範囲」が上の単価表のシートのA2〜C4,
 「列番号」が「今年の単価」だから「3」,
 「検索の型」は「0」になっています。
「VLOOKUP関数」は,「範囲」に指定した行列の一番左の列から「検索値」を探し出し,
一致した場合その行の「列番号」番目の列のセルの内容を返します。
C3セルの例だと「軽作業」という単語を単価表の「工種」欄から探し,
その行の3列目のデータすなわち「15,000」が結果となります。

「検索の型」を「1」にすると,完全に一致していなくても結果を返します。
一見便利なようですが,正確性を欠くためあまりお薦めしません。
「検索の型」を「0」にした場合,一致するデータがないとエラーになりますので注意してください。

「検索値」に指定したセルが空白だった場合もエラーになってしまいます。
他の計算結果にも影響を及ぼすため,工夫が必要です。
                IF関数
エラーを回避する  A3のデータを消去して空白にすると,
 C3とD3が「#N/A」というエラーになり,
 D6は「#VALUE!」というエラーになります。

 そこで「IF関数」を用います。
 「論理式」とは「仮定の式」です。
 「もし○○だったら,こうする」
 つまり仮定が正しければ「真の場合」,
 正しくなければ「偽の場合」の結果を返します。
C3の例では「もしA3が空白だったら空白を,そうでない場合は単価表から検索した結果を」表示します。
さらにD3の「金額」では単純にB3とC3を掛けているので,C3が空白だとエラーになってしまいます。
そこで同じように「IF関数」を使い,「=IF(C3=“”,“”,B3*C3)」とすれば,
「工種」の欄が空白であれば「単価」と「金額」も空白になり,合計に影響を及ぼしません。

この方法のメリットは「工種」を入れ替えても,単価表に載っていれば正しい「単価」が表示されることです。
試しに「A3」を「特殊作業」にすると,「15,000」だった単価が「25,000」に変わります。

さて,「工種」を入れ替えてから,C3とD3をコピーして4〜5行に貼り付けると,エラーになってしまいます。
コピー〜貼り付け〜エラー
これは,「VLOOKUP関数」の「範囲」が「相対参照」になっているため,
本来「A2〜C4」でなければならない「範囲」が「A3〜C5」に変わってしまい,
単価表の「軽作業」が検索対象から外れてしまったからです。

検索対象である「範囲」は「絶対参照」にすべきなのです。
この場合,「A2:C4」を「A$2:C$4」に変えれば,コピーしても「範囲」がずれません。
挿入〜名前メニュー
 また,この「範囲」には名前を付けることもできます。
 単価表のシートで「A2〜C4」を選択した状態で,
 「メニュー」の「挿入」→「名前」→「定義」と進みます。
 適当な「名前」を入力し,「OK」で参照範囲に名前が付きます。
 名前の定義

「引用」で,既に式に入力済みの「範囲」を「名前」に置き換えることもできますが,
同一シート内でないと「置換する参照はありません」と拒絶されてしまうため,「Ctrl」+「H」キーを押します。
文字列の置換
 「検索する文字列」に
 置き換えたい「範囲」を,
 「置換後の文字列」に
 先ほど付けた「名前」を入力し,
 「すべて置換」を押せば
 「引用」と同じ結果が得られます。

 置換後は「閉じる」で閉じます。   次へ