- 締切済み
エクセルでの自動入力方法
エクセル2003を使用しています。 2シートのブックを使用しており、 シート1:売上一覧(コンボボックスでシート2から品名を選択) シート2:品名と価格の表 A1 B1 品名 いちご 50円 ばなな 100円 ・ ・ となっています。 シート1のコンボボックスで いちごを選択したら、 いちごの隣のセルに価格を自動入力させたいと思っています。 どのようにしたらいいでしょうか? イメージはアクセスの Me.価格=Me.品名.Column(1)ですが、エクセルが解りません。 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- KenKen_SP
- ベストアンサー率62% (785/1258)
#4 は [表示]-[ツールバー]-[コントロール ツールボックス] から シートに配置したコンボボックスの話です。 似たようなものに、[表示]-[ツールバー]-[フォーム] からもコンボ ボックスを配置できるのですが、こちらではありません。 この前提で解説します。 #4 の前半部分のコード Private Sub Worksheet_Activate() 'シート2:品名と価格の表からデータをコンボボックスへ 'セットします。このとき品名と価格の両方のセルアドレス 'を指定しておきます。 Me.ComboBox1.ListFillRange = "Sheet2!A1:B10" End Sub はコンボボックスのリストとなるデータ範囲を定義しています。 コンボボックスが20個あるなら、20個分定義しなければなりません。 こんな感じ。 Private Sub Worksheet_Activate() Dim strDATA As String 'コンボボックスのリストとなるデータ範囲 strDATA = "Sheet2!A1:B10" Me.ComboBox1.ListFillRange = strDATA Me.ComboBox2.ListFillRange = strDATA Me.ComboBox3.ListFillRange = strDATA '以下対象となるコンボボックス全てに End Sub #4 の後半部分のコード Private Sub ComboBox1_Change() 'コンボボックスのあるセルよりひとつ横のセルに価格を表示 With Me.ComboBox1 .TopLeftCell.Offset(0, 1).Value = .Column(1) End With End Sub の ComboBox1 はコンボボックスの名前により書き換えます。 20個のコンボボックスがあるのであれば、上記コードを20個分書か なければなりません。 とまあ、コンボボックスの個数が増えると面倒臭い方法ですが こんな方法もあるよ、、ということで。 以下は余談です。 補足すると、コンボボックスに複数列のデータをセットした場合、 ColumnCount プロパティーを設定しないと最初の 1 列しか表示 されません。しかし、その他の列データも存在はしていますので、 MsgBox ComboBox1.Column(1)'<--この場合2列目のデータ のように取り出すことが可能です。このテクニックはコンボ ボックスの選択結果から Lookup系の関数などでデータを検索する 処理を省略できるため、データ件数が多い場合に有効です。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。KenKen_SP です。 こんな感じでできます。 'シート1のシートモジュール ------------------------------- Private Sub Worksheet_Activate() 'シート2:品名と価格の表からデータをコンボボックスへ 'セットします。このとき品名と価格の両方のセルアドレス 'を指定しておきます。 Me.ComboBox1.ListFillRange = "Sheet2!A1:B10" End Sub Private Sub ComboBox1_Change() 'コンボボックスのあるセルよりひとつ横のセルに価格を表示 With Me.ComboBox1 .TopLeftCell.Offset(0, 1).Value = .Column(1) End With End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
Sheet2のA1:B3に りんご 20 バナナ 30 ぶどう 15 とあるとする。 入力するシートSheet1に品名と価格のデータもあれば、エクセルでは入力規則ーリストを使いSheet1のB1に =IF(A1="","",VLOOKUP(A1,Sheet2!$A$1:$B$3,2,FALSE))と入れて、A列のデータ入力最終行まで式を複写しておけばよい。 (この場合番地に$が必要に注意。かつIF(A1="","",・・の部分も必要) しかし質問のように、別シートSheet2のテーブルを入力規則で番地参照できないため、工夫が要る。その方法は Sheet2のA列の品名の範囲を「挿入」「名前」「定義」で「果物」と名付ける。 Sheet1でA1:A30とか入力範囲を範囲指定し、データ-入力規則で 入力値の種類を「リスト」、元の値を「=果物」とする。(=が必要に注意) するとA1でクリックするとドロップダウンが現れるのでクリックして選ぶ。 するとVLOOKUPが働いてB列に単価が現れる。 B列の式はB1に =IF(A1="","",VLOOKUP(A1,Sheet2!$A$1:$B$3,2,FALSE)) をいれB2以下に式を複写する。
- meron_
- ベストアンサー率40% (51/127)
数式は#1の回答者さんのVlookup関数で実現できると思います。 質問者さんがビギナーか らエキスパートかわかりませんが、 分かりやすい説明のリンクを下記にのせときます。 http://homepage1.nifty.com/kenzo30/ex_kisotyu/ex_ks_tyukyu9_9_4.htm#検索/行列関数(VLOOKUP関数) あとはオートフィルで下方向にコピーして下さい。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/nyuryoku.htm#filsuusiki ちなみにシート2の価格に「円」がなくてもOKです。 シート1のB列の表示形式をユーザー定義で「@"円"」と入力してみて下さい。 詳しくは↓ここを参考にしてみて下さい。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/ex-q-a/q_h_kesk/
お礼
お返事が遅くなりましてすみませんでした。 ご回答どうもありがとうございました!! VLOOKUPを使用したのですが、 コンボボックスのセルの選択方法がうまくいきませんでした。。 説明が間違えておりまして、 セルA1は、A2とセルの結合をしていました・・。 結合したセルの上にコンボボックスを置いています。 VLOOKUP(B1,SHEET2!A1:B5,2,FALSE)としましたが ダメでした。。 この場合はコンボボックスをどう選択したらいいのでしょうか・・。
- hitosa
- ベストアンサー率21% (6/28)
コンボボックスのセル=A2 品名価格の範囲=A2:B5 =vloolup(A2,SHEET2!A2:B5,2,FALSE) でいかがでしょうか??
お礼
お返事が遅くなりましてすみませんでした。 教えていただいたVLOOKUPを使用したのですが、 コンボボックスのセルをうまく選択できませんでした。 説明が間違えておりまして、 セルA1は、A2とセルの結合をしていました・・。 結合したセルの上にコンボボックスを置いています。 この場合はコンボボックスをどう選択したらいいのでしょうか・・。
お礼
ご回答ありがとうございました! イメージはまったく教えていただいたものです。 モジュールをシート1に貼り付けて実行しましたが、 できませんでした。。 シート1にはコンボボックスが20行ありコンボボックス名も1~20と並んでいる訳ではありませんでした。。 モジュールは、Me.ComboBox1ですが、全てのComboBoxにあてはまるのでしょうか? どうぞ宜しくお願いいたします!!!