セルの数式の計算結果が「1」になったら隣接セルに「2.3」とセットするには?
Question 71.2 Previous Next
はじめまして。 インターネットで「マクロ」で検索し、こちらを拝見しました。マクロどころかPCに弱いのですが、どうしてもマクロを組みたく、質問させていただきました。 (掲載されているのかもしれませんが、わからないもので)
ある表があって
  1・・・・2.3
  2・・・・3.1
  3・・・・7.2
  4・・・・5.9  とあったとします。
別のシートの計算式で、最終的に「1」となったら、その隣のセルに自動的に、最初の表(別シート)の「2.3」を挿入する、というマクロを組みたいのですが、どうしたらいいでしょうか?
ホームページのどの部分を見ればよいか、また、どの言葉がヒントになるかだけでもお教えいただけないでしょうか。
こんな風に質問していいのかもわかりませんでしたが、メールをださせていただきました。 失礼がありましたら申し訳ありません。 どうぞよろしくお願いします。
Answer   Copyright (C) 2005.1.8 永井善王
誠に申し訳ございませんが、こちらのページ でご案内していますとおりEメールでのご質問はお断りしています。 私宛に毎日たくさんのEメールが送られてきますが、このところ物騒な世の中になってしまってウィルス付きEメールが頻繁に混ざっています。 そのため、知らない人からのEメールは開かない場合があります。
そのかわり、そのページの左側でもご覧いただけますが、ご質問用のページを数々設けています。今後は各ページのルールに則ってご利用いただくようご協力願います。

ですが、ちょうど今、第71回 期間限定質問 の受付中ですし、「どうしてもマクロを組みたく」 とのことですので、以下に回答を作成しました。

 ある表 ・ Sheet1

「ある表」とは左図のようなものでしょうか?


「別のシート」 のイメージがご質問文だけでは掴みかねるので、ここでは、下図を使って説明します。

 別のシート ・ Sheet2
C列のセルには計算式が入っています。
  C2セル … =A2/B2
  C3セル … =A3/B2
  C4セル … =A4/B2、以下同様

あなたがしたいことは、C列の各々のセルの計算結果が
「1」 になった場合だけ、隣のセル(左図ではD列の各々のセル)に 「2.3」 とセットするだけでよいのでしょうか?
もし、それで良いのであれば数式で処理可能です。
左図では D2セルの数式だけしか見えませんが、これをコピーして D3:D7セルに貼り付けてあります。

回答は以上で終わりになりますが、ちょっと疑問に思うことがあります。 わざわざ 「ある表」 を用意した目的は何でしょうか? 「ある表」 の 2~4行は何のためにあるのでしょうか?

もしも、C列の商が「ある表」のA列に羅列された値と一致した場合に、対応するB列の値をセットしたいということであれば VLOOKUP関数で処理可能で、「別の表」の E2セルに下記のとおり数式をセットし、それをコピーして E3:E7セルに貼り付ければ出来上がりです。

=IF(ISNA(VLOOKUP(C2,Sheet1!A$1:B$4,2,FALSE)),
"",VLOOKUP(C2,Sheet1!A$1:B$4,2,FALSE))

少々数式がややこしいのは、商が「ある表」で見つからなかった場合、VLOOKUP関数はエラー値(#N/A)を返すので、IF関数と ISNA関数を組み合わせて "" をセットするようにしてあるからです。 くわしい解説が必要でしたら、下記のページを参考にしてください。
参考ページ
指定された値から別表を検索して目的の値を取り出すには?
VLOOKUPで検索可能にするには?
VLOOKUP関数で出たエラー値#N/Aを0にするには?
「どうしてもマクロを組みたく」ということですが、このテーマは数式だけでも処理できそうですね。マクロが必要だとすれば、「別の表」の行数が増減するのでコピー貼り付けを自動化する、または、VLOOKUP関数式をマクロでセットする(上記参考ページの中に解説あり)くらいでしょうか。
では、ご検討ください。

 

Excel VBA Macro