• 締切済み

マクロの自動実行

教えてください。 A1のセルの内容ををドロップダウンで選択するようにしてあります。 A1の内容によってB1のセルの内容を変更させたいと思っています。 通常はvlookup関数で対応するものを呼び出せばいいのですがB1セルに手動で入力することもあるので関数を書き込んで置けません。 そこでA1セルをドロップダウンで変更したときに自動でマクロ「変更」を実行して、C1セルにvlookupで呼び出してる内容をB1セルへ貼り付けできないでしょうか? よろしくお願いいたします。

みんなの回答

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

> C1セルにvlookupで呼び出してる内容をB1セルへ貼り付けできないでしょうか? 「簡単に」できますよ。基礎の基礎で作れるマクロの一つです。 #1さんもおっしゃる通り、 「A1セルの内容が変更されたら、(別にC1セルを介さずに、)  B1セルにVLOOKUPで拾った内容を入力する」 というマクロを作れば良いだけです。 If Target.Address = "$A$1" Then Range("B1") = WorksheetFunction.VLookup(Range("A1"), Range("A2:C13"), 3, False) 処理の内容としては、この1行だけです。 こうすれば、B1セルに(あるいはC1セルに)式を「無駄に」残さなくても済みます。 ただし。 (結論は#1さん同様なのですが)#1さんの観点と別な方向から。 このマクロを実装すると、 「B1セルに正しい値(文字列含む)が入っていても、  A1を更新するとB1まで更新されてしまい、二度手間発生」 という事態に陥ります。 もちろん、コレを回避する書き方も可能ですが、 そうすると今度は「何が正しいのか」を判断するための構文も組み込まなければいけません。 上記にちょこちょこっと書き加えてやれば出来ますが、 それを判断するためのコードはおそらくそれなりにややこしいでしょう。 それならば、#1さんもおっしゃる通り、 「手入力用のセルは別の“セル”に用意(例えばB2セルなど)」して、 B1セルには「=IF(B2="",VLOOKUP(A1,範囲,列番号,FALSE),B2)」とでもしてやる方が ややこしいマクロを組むことに比べると、はるかに楽です。 管理するのも楽です。

回答No.1

セルの内容が変更された時に自動で呼ばれるマクロ関数に、マクロを書けば可能です。 変更されたセルがA1だった時だけ、C1の値をB1に代入するだけです。 でも。 >通常はvlookup関数で対応するものを呼び出せばいいのですがB1セルに手動で入力することもあるので関数を書き込んで置けません。 「どうしても、手入力はB1でやらないと駄目」ですか? 「どこか別のセルに、手入力専用のセルがあって、手入力したい時は、その手入力専用セルに入力する」じゃ、駄目なんですか? 例えば、C3セルを「手入力用セル」に出来るのであれば、B1セルにIF関数で「C3に何か入力してあればC3の値に、さもなければ、A1の内容に従ったVlookup関数の値に」なるような式を書くだけで済みますが。 「入力用のセルが邪魔」と言うなら、印刷範囲の外に置くとか、印刷時は行の高さや列の幅を0にするとか、方法は沢山あります。