• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:セル値の変更でマクロを実行)

エクセルで棚卸表を作成する際のセル値の変更によるマクロ実行

このQ&Aのポイント
  • エクセルで棚卸表を作成する際、特定のセルの値の変更によってマクロを実行する方法について教えてください。
  • エクセルで棚卸表を作成するために、各種類ごとに別々のシートに品名・単価が入ったマスターが登録されています。特定のセルの値の変更によって、任意のシートを参照し表示するための方法を教えてください。
  • エクセルで棚卸表を作成する際、特定のセルの値の変更のたびにマクロが自動的に実行される方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#2,3です。 野菜、肉類、魚類等のテーブルが各種類ごとに、別シートになっている場合の例が出来ましたので、参考までに載せます。 #3のコードの部分は下記に変えます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim sh2 As Worksheet Dim sh3 As Worksheet Set sh2 = Worksheets("sheet2") Set sh3 = Worksheets("sheet3") '---- If Target.Column = 1 Then 'A列ならば Select Case Mid(Target, 1, 1) Case "Y" ' MsgBox Target x = WorksheetFunction.VLookup(Target.Value, sh2.Range("a1:b6"), 2, False) Target.Offset(0, 1) = x Case "M" x = WorksheetFunction.VLookup(Target.Value, sh3.Range("a1:b6"), 2, False) Target.Offset(0, 1) = x Case "F" MsgBox "F" End Select End If End Sub 各シート別のテーブルを指定するところは、SHEET2!RANGE("A1:B6")等で上手く行かなくて、手間取りました。 なお#3の例は商品コードは、テーブル表もA列への入力も全角文字数字で入れる例になっていますので、ご注意下さい。 また魚類F以下は、手抜きをして表引きコード行を入れていませんが、野菜の該当行をコピーして、修正して下さい。

mk00391
質問者

お礼

色々なケースを考えて頂き有難う御座います。 多分、#4の例で解決すると思いますが、私がまだVBAについて未熟なので、この例を私のファイルに当てはめてやるには少し時間が必要です。もし、そこで解決しなかったらまた質問させて頂きます。 有難うございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#2です。 もしテーブル(野菜、肉類、魚類等)が同一シートにあれば使えるVBAのVLOOKUP関数の使用例を参考までに上げます。セルの値の一部分の値によって、参照するテーブルを、別のテーブル部分に相対化しています。 (参照テーブル) テーブルを(A1:D6) Y15 たまねぎ M16 ミンチ Y14 キャベツ M11 鶏肉 Y13 なす M12 牛肉 Y12 きゅうり M13 豚肉 Y11 ごぼう M14 鴨肉 Y15 ピーマン M15 鹿肉 と、サンプルとして作ります。 (入力) A6以降に商品コードを入れます。 (A列) (B列) Y12 きゅうり Y12 きゅうり M13 豚肉 M14 鴨肉 Y12 きゅうり Y11 ごぼう M12 牛肉 Y15 ピーマン (結果) すると上記のようにB列に商品名が瞬時にセットされます。単価まで増やすのは、推測は難くありませんでしょう。 (VBA) Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Select Case Mid(Target, 1, 1) Case "Y" ' ActiveWorkbook.Names.Add Name:="table1", RefersToR1C1:="=Sheet2!R1C1:R7C2" x = WorksheetFunction.VLookup(Target.Value, Range("a1:b6"), 2, False) Target.Offset(0, 1) = x Case "M" x = WorksheetFunction.VLookup(Target.Value, Range("c1:d6"), 2, False) Target.Offset(0, 1) = x Case "F" MsgBox "F" End Select End If End Sub 別シートが指定できるよう、引き続き考えてみます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>各種類ごとに別々のシートに品名・単価が入ったマスターが登録してあります なぜ商品の大分類ごとに、別シートにしないといけないでしょうか。一本化すれば、依然としてVLOOKUP が使えると思いますが。 ●各商品のコード体系はどうなっていますか。 野菜、肉類、魚類等の判別は商品コードのどの桁とかで 判別できるのですか。 ●印刷用のシートで特定のセルの値の変更によって(穀類、野菜、肉類など)、任意のシートを参照し・・・ 「特定のセルの変更」とは「特定のセル」として、 野菜、肉類、魚類等のセルが別々に割り当てられているのでしょうか。(#1のご回答はこのタイプを想定か。) それとも「1つのセルの値を、特定の値への変更」を意味するのでしょうか。 例えば、Yを野菜を示すコードとして、Y012と言うコードを入力すると、野菜シートのY012を見に行きたい と言うことでしょうか。 この場合の対応は例えば Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Select Case Mid(Target, 1, 1) Case "Y" MsgBox "Y" Case "M" MsgBox "M" Case "F" MsgBox "F" End Select End If End Sub MsgBoxの部分に各処理のコードを書きます。 ●VLOOKUP関数の第2引数たる、表の範囲を、IF関数を使わずに、相対化する方法を、前面に出して質問されてはどうでしょう。回答がでるような気もします。 ●コマンドボタンを野菜、肉類、魚類等に別に割り当てるのはどうでしょうか。 クリックイベントがつかえます。 あるいはリストボックスのアイテムに野菜、肉類、魚類等 を設定するのもどうでしょうか。 ●ご質問者とそのグループの方の、一層の飛躍(例えばアクセスの利用やSQLの利用、アクセスVBAの利用)が必要な局面に来ているように感じます。 いよいよ、今後他の点でも、ややこしい道に迷い込みそうな予感がします。 >宜しければExcelファイルを見て頂きたいのですが これはどう言う意味ですか。どうしてみる?あり得ないのでは。

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

マクロというかVBAでワークシートの変更を見張るイベントがありますのでそれを利用するとかぐらいでしょうか。 コード的には大した量もないのでそう難しくはないんですが。多分どこにどのように書けばよいのかとかその辺から難しいですかね。 --- Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target  Case Range("A1")  <処理>  Case Range("B1")  <処理>  Case Range("C1")  <処理>  ・・・ End Select End Sub --- まぁそれよりもそれぐらいの複数のシートがからみあったリレーショナルなデータとなれば、アクセスなどで処理した方がスマートなものが出来るのではないかなと思いますけども。

関連するQ&A