データベース風使い方の薦め(1)
エクセルをデータベース風に使うことができます。これはかなり実用的なので,お薦めです。
例えば設計を組む場合,歩掛は昨年と同じで単価だけ改正されたとき,どうしていますか?
ほんの数ヶ所だけだったら,個々に直す方が早いかも知れませんが,
変更箇所が多数あって,修正漏れをなくしたいという方に,その方法を紹介します。
まずメインとは別の場所に単価表を作ります。
その単価を複数のファイルから読む(参照する)ことがなければ,
同じファイルの別のシートに作っておくのが無難でしょう。

ここで注意するのは列A「工種」欄の名称です。
後で,この名称を目標にしますので,
アルファベットや空白を使う場合は特に
全角か半角かを覚えておいて,
後で同じ名称を使ってください。
メインのシートの例です。数量と単価をかけた金額を合計しています。
この単価の入れ替え作業を(後々)軽減するために「VLOOKUP関数」を使います。


C3セルに入っている式は左のとおりです。
「検索値」がA3「軽作業」,
「範囲」が上の単価表のシートのA2〜C4,
「列番号」が「今年の単価」だから「3」,
「検索の型」は「0」になっています。
「VLOOKUP関数」は,「範囲」に指定した行列の一番左の列から「検索値」を探し出し,
一致した場合その行の「列番号」番目の列のセルの内容を返します。
C3セルの例だと「軽作業」という単語を単価表の「工種」欄から探し,
その行の3列目のデータすなわち「15,000」が結果となります。
「検索の型」を「1」にすると,完全に一致していなくても結果を返します。
一見便利なようですが,正確性を欠くためあまりお薦めしません。
「検索の型」を「0」にした場合,一致するデータがないとエラーになりますので注意してください。
「検索値」に指定したセルが空白だった場合もエラーになってしまいます。
他の計算結果にも影響を及ぼすため,工夫が必要です。

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」キーを押します。

「検索する文字列」に
置き換えたい「範囲」を,
「置換後の文字列」に
先ほど付けた「名前」を入力し,
「すべて置換」を押せば
「引用」と同じ結果が得られます。
置換後は「閉じる」で閉じます。 次へ