• 締切済み

エクセルでの自動入力方法

エクセル2003を使用しています。 2シートのブックを使用しており、 シート1:売上一覧(コンボボックスでシート2から品名を選択) シート2:品名と価格の表       A1     B1  品名 いちご    50円      ばなな   100円        ・     ・ となっています。 シート1のコンボボックスで いちごを選択したら、 いちごの隣のセルに価格を自動入力させたいと思っています。 どのようにしたらいいでしょうか? イメージはアクセスの Me.価格=Me.品名.Column(1)ですが、エクセルが解りません。 よろしくお願いいたします。

みんなの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

#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)
回答No.4

こんにちは。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

ichigobana
質問者

お礼

ご回答ありがとうございました! イメージはまったく教えていただいたものです。 モジュールをシート1に貼り付けて実行しましたが、 できませんでした。。 シート1にはコンボボックスが20行ありコンボボックス名も1~20と並んでいる訳ではありませんでした。。 モジュールは、Me.ComboBox1ですが、全てのComboBoxにあてはまるのでしょうか? どうぞ宜しくお願いいたします!!!

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

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)
回答No.2

数式は#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/

ichigobana
質問者

お礼

お返事が遅くなりましてすみませんでした。 ご回答どうもありがとうございました!! VLOOKUPを使用したのですが、 コンボボックスのセルの選択方法がうまくいきませんでした。。 説明が間違えておりまして、 セルA1は、A2とセルの結合をしていました・・。 結合したセルの上にコンボボックスを置いています。 VLOOKUP(B1,SHEET2!A1:B5,2,FALSE)としましたが ダメでした。。 この場合はコンボボックスをどう選択したらいいのでしょうか・・。

  • hitosa
  • ベストアンサー率21% (6/28)
回答No.1

コンボボックスのセル=A2 品名価格の範囲=A2:B5 =vloolup(A2,SHEET2!A2:B5,2,FALSE) でいかがでしょうか??

ichigobana
質問者

お礼

お返事が遅くなりましてすみませんでした。 教えていただいたVLOOKUPを使用したのですが、 コンボボックスのセルをうまく選択できませんでした。 説明が間違えておりまして、 セルA1は、A2とセルの結合をしていました・・。 結合したセルの上にコンボボックスを置いています。 この場合はコンボボックスをどう選択したらいいのでしょうか・・。

関連するQ&A