• ベストアンサー

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

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

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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

  • エクセルのマクロ

    教えてください。   A     B   C 1 部品番号  ○   済印 2 111111   ○   済 3 222222   ○   済 4 333333   ○ という表があるとします。 B列にマクロのボタンを作っておき、 A列に部品番号を入力したら、マクロのボタンを押して、 C列に済、という字を表示したいのです。 1部品入力するごとに、その表示をさせたいです。 2行目、3行目・・・と一つずつマクロを登録して いく方法は、(マクロについては詳しくないので、マクロの記録、マクロの停止、という方法しかわかりません)入力するデータが100件以上あるため、それもどうかな・・と悩んでいます。超初心者なのですが、何とか完成したいと思っています。 よろしくお願い致します。

  • 保護されているシートでマクロ実行するとエラー

    Excel2010で勤務表を作っています。 A列にとある文字列(承認)と入力すると、その行が保護されるマクロを、下記URLからコピペして使わせて頂いてます。 http://questionbox.jp.msn.com/qa3277541.html 勤務表なので、土日祝日は網掛けになるよう条件付き書式を使っています。 休暇取得した場合は網掛けを付けて、休日出勤した場合には網掛けなしにしたり出来るようマクロをマクロの自動記録で作りました。 ところが、どこかの行が保護されている状態で、セルの網掛けを変更するマクロを実行すると 「実行時エラー'1004'アプリケーション定義またはオブジェクトの定義エラーです」と出てしまいます。 保護されている行ではなく、まだ保護はされていない行に実行しています。 そこで一旦保護の解除をしてから、セルの網掛けを変更するマクロを実行してみるとちゃんと動きます。 保護をかける時に、網掛け(セルの書式設定)を許可すれば動くのかな?とか思ったのですが、どこにどういう構文を入れたらいいのか、はたまたその認識すら間違っているのかも分かりません。 マクロに関してはド素人で、自動記録かWebで調べて見つけたマクロをちょっと加工して使う程度です。 どうか知恵をお貸しください。よろしくお願いします。

  • エクセルのマクロの記憶・実行について

    マクロの記憶と実行についてですが質問があります。 下記のように、1~3までの行をマクロの実行でコピーといういうか表示していきたいのです。 3行をコピーして、行の挿入をすれば済む話なのですが、これを使う人が、パソコンを触ったことがないので、 マクロの実行というボタン1つで、何回も下に同じ間隔で表示させたいのです。 お助け下さい。 ●月●日 1 あああ あああ あああ あああ 2 いいい いいい いいい いいい 3 ううう ううう ううう ううう 4 5 これより下に、上記と同じ表をコピーしたい。          ↓ 1行あけて同じ表を、マクロの実行でその下に表示させたいのです。 表の内容は、毎日変わります。その日の入力が終わったら、次の日、また、同じ事を繰り返していきます。

  • VBA(マクロ)について

    エクセルのマクロを使って下記のように実行を考えています。 A列のコード番号が一定ではないため、処理に困っています。 どなたかアドバイス頂けないでしょうか。 詳細についてです。A列にコード番号があり、B列に数値があります。 例えば、A列の1~3行目まで100とあり、4~5行目まで400と1~3行目と4~5行目の数値はおなじです。3行分だったり2行分だったりと不規則に下に続いていきます。 そのA列の同じコード番号全てに対して、B列の値を合計してC列に合計値を入力したいのです。 C列の合計値入力箇所は、A列の1~3行目までだとするとC列1行目に合計値がくるようにしたいのです。 ちなみに行数は10万桁ほどあります。

  • エクセルのマクロの実行が途中で止まってしまいます。

    エクセルで表を作る工程をマクロで記録させて、その後、マクロを実行して特定の表を作ろうと思っても、実行の途中で止まってしまいます。特に、列の幅を変更せずに、途中でとまってしまいます。マクロを使って表を作りたい理由は、エクセル以外のあるデータをエクセルに移動することがよくあって、移動させた直後はエクセルの標準の形式として表になっているので、列幅を変更したり、フォントを変更したり、列の順番を入れ替えたりすることを、自動でおこないたいのです。どなたか教えてください。パソコンのメモリか何かのもんだいですか?わからなくてほんとにこまっています。どなたか教えてください.よろしくおねがいします。

  • Excelで特定の行でキーを押したときマクロを実行したい

    Excel2003を使用しております。 特定の行(例えばB行で列番号は問わない)にアクティヴセルが あり、左矢印キーを押した時マクロを実行したいのですが 条件文になんと書いて良いか分かりません。 また、その行のときのみ左矢印キーを押しても隣の行 (B行にアクティブセルがあるなら、A行)に移動しないようにしたいのですが、どのようにすればよいのか教えていただけませんでしょうか? よろしくお願い致します。

  • エクセルマクロについて教えて

    マクロか関数かわかりませんがよく番号を入力すると(例)名前や商品名がでてきますがそれを作りたいのですがなかなかわかりません。マクロで自動記録でコピーして貼り付けでもいいかなと思い試したのですが貼り付けは列と行を指定しないと駄目?できませんでした。 アドバイスお願い致します。

  • Excelでマクロを組んで、データを繰り返し抜き出したいのですが

    Excelでマクロを組んで「データ取得→データ並び替え→データ取得・・」と繰り返す作業を自動的に行いたいと思っています。 元データ       一回目     二回目    │A│        │A│      │A│    │列│       │列│     │列│   ─┼─┼─  ──┼─┼  ──┼─┼ 1行 │k │    3行│m│   2行│d │ ──┼─┼─  ──┼─┼  ──┼─┼ 2行 │d │    5行│z │   4行│r │ ──┼─┼─  ──┼─┼  ──┼─┼ 3行 │m │    8行│e │   6行│p │ ──┼─┼─  ──┼─┼  ──┼─┼ 4行 │r │    9行│f │   7行│s │ 例えば、上記の元データのようにデータ(小文字アルファベット)を入力し、その後一回目、二回目・・・とデータの並べ替えを繰り返し、その都度上から二段目のデータのセルのデータ(この場合それぞれz、r)を取得して変数xに収めるという作業を繰り返し自動的に行うようにしたいのですが、「x=Cells(2,1)」とマクロを書くと非表示になっているセルA2のデータ(この場合d)を常に取得してしまいうまくいきません。 これはどのような方法で解決できるのでしょうか。 OSはWindows2000、ExcelはExcel2000を使っています。 よろしくお願いします。

  • 【Excel VBA】ThisWorkbook モジュールのマクロ

    Excel2003を使用しています。 39枚のシートから成るBook1のThisWorkbook モジュールに、C列に“○月計”と入力されたら、その行のE列、F列、G列へ数式を入力するコードを書いています。 現在は、それぞれのシート(39枚のシートのうち3枚を除く36枚)のC列最終行から2行下のセルへ“○月計”と手入力していますが、マクロで“○月計”と入力されるようにすれば、ThisWorkbook モジュールに書いているコードも実行されて、数式の入力までマクロで処理できるのかな?と思い、試しに、36枚それぞれシートのC列最終行から2行下のセルへ“○月計”と入力されるようコードを書いてみました。 …が、そうではないのか、それぞれのシートのC列最終行から2行下のセルへ“○月計”と入力されるものの、E列、F列、G列へ数式は入力されません。 せっかくなので、できることなら数式の入力までマクロで処理したいのですが、どのようにしたらThisWorkbook モジュールに書いているコードまで実行されるのでしょうか? よろしくお願いします。

  • EXCEL マクロ・VBA 自動で連番を振る

    EXCELのマクロ・VBAについて質問です。 例えば、B列にデータを入力すると、入力した行まで自動的にA列に連番が入力されるようにしたいのですが、どういった方法があるでしょうか。 マクロやVBAについてはこれから勉強をしようと思っている素人ですので、コードとその解説をいただけると助かります。

専門家に質問してみよう