• ベストアンサー

EXCEL VBAでデータを更新したらマクロを実行

Excel2000を使っています。 B列に部屋番号、C列に部屋名を入力する表です。 部屋番号が入力(変更)されたら、マクロを実行して部屋名を自動的に入力したいのですが、どうしたらいいでしょうか? 例えば、部屋番号100と入力したら和室、200と入力したらリビングという具合です。 データは一件につき一行です。 宜しくお願い致します

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

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

VBAでVLOOKUPが使えます。 関数でよいのですが、あえてやれば H1:I4に 101 和室A 102 和室B 201 洋室S 301 ホールA Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ext1 If Target.Column = 1 Then If Target = "" Then r = Target.Row Cells(r, "B") = "" Else r = Target.Row Cells(r, "B") = WorksheetFunction.VLookup(Target, Range("h1:i5"), 2, False) End If End If ext1: End Sub 結果 A列に入力するとして、B列に表示 A列 B列 201 洋室S 301 ホールA 201 洋室S 311 211 Delete、オフコード値などはテスト済みですが。

terakura
質問者

お礼

ありがとうございます。 そうですか、VBAで関数を使うという手もありましたね。この方法でも試してみたいと思います。 ありがとうございました。

その他の回答 (2)

回答No.2

マクロですか・・・ 関数のVLOOKUPかHLOOKUPを使う方法が良いのではないでしょうか? (1)基本になる部屋番号・部屋名のリストを作ります。 このリストは実際に運用している表とは少し離れたところ(例えばF列に部屋番号・G列に部屋名)に作る方がよいです。 (2)部屋名を表示させたい列(B列ですね)を選択し、関数ボタンを押下。検索/行列からVLOOKUPを選択してください。 (3)検索値:検索させるデータ、つまり部屋番号を入力するA列を指定。  範囲:(1)で作っておいたリスト  列番号:(1)のリストの何列目に部屋名があるのか。今回は「2」ですね  検索の型:今回は 「0」 で良いでしょう。 こうすると、A列に部屋番号を入れたら自動的にB列に部屋名を表示するようになります。マクロの必要はないでしょう。

terakura
質問者

お礼

関数を入れてしまうと、消してしまった時に焦る人がいます(笑) ですから、できるだけワークシート上には関数を書きたくないのです。 保護をかけると、行削除等困ることもでてきますし。 ですから入力したら「あれ?もう入ってる」と感じてもらえるようにしたかったのです。 ありがとうございました。

  • jindon
  • ベストアンサー率43% (50/116)
回答No.1

>部屋番号が入力(変更)されたら、マクロを実行して部屋名を自動的に入力したいのですが、どうしたらいいでしょうか? これをわざわざマクロで? 数式だったら =if(b1=100,"和室",if(b1=200,"リビング","")) マクロで Sheet module に Private Sub Worksheet_Change(ByVal Target As Range) With Target.Cells(1, 1) If Intersect(.Cells, Range("b:b")) Is Nothing Then Exit Sub Select Case .Value Case 100 x = "和室" Case 200 x = "リビング" End Select .Offset(, 1).Value = x End With End Sub

terakura
質問者

補足

すみません。この方法でやってみたいのですが アクティブセルがA列にあります。 With Target.Cells(1, 1) If Intersect(.Cells, Range("b:b")) Is Nothing Then Exit Sub .Offset(, 1).Value = x 以上の3行を修正する必要があると思うのですが いかがでしょうか? Intersectがよく分からず困っています。 大変申し訳ありません。宜しくお願い致します。

関連するQ&A

専門家に質問してみよう