• ベストアンサー

excelでリストボックスで選択した値に定められた値を返す

excel2000で計算シートを作っています リストボックスで会社名をえらぶと 例:A社 B社 C社 ・セルC2に、A社なら1000 B社なら1200 C社なら800 とあらかじめ定められた値を返す 関数で、値を返すことはできるのですが リストボックスを範囲として指定できないのでしょうか? また、上記をVBAを使わずに、設定することは可能でしょうか? 宜しくお願いいたします

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。#3 で回答した者です。 >>リストボックス(フォームツールバーよりドラッグ) >この部分がわかりません。リストボックスを作るということですか? リストボックスが出来ていればよいです。ただ、それが何かが分からないので、フォームと確認させるために書きました。他にコントロールツールというものもあります。 >社名と数値を別表作成しました >入力範囲に社名部分を選択 >リンク範囲に数値部分を選択 >まで行ないました その内容からすると、フォームのリストボックスだと信じます。 リストボックスの中を選択すると、数字が「リンク範囲(正しくは、リンクするセル)」に出力されますね。そこで、違っていませんか? 社名と数値を別表作成 それが、以下だと思ってください。(場所は、シートが違うのでしたら、シートの違う場所を指定することになります)  H  I A社 1000 B社 1200 C社 800 そのリストの社名の列を、リストボックスの[コントロールの書式設定]の[コントロール(タブ)]の中で、 「入力範囲」に指定します。 「リンクするセル」は、任意の場所、私の例では、G1 にしましたが、どこでもよいです。 >=INDEX($H$1:$I$3,G1,2) はどことどこを選択しているのでしょうか ですから、C2 = INDEX(社名と数値を別表,リンクするセル,2) という式を入れてあげれば、出るはずです。

siozakiyuk
質問者

お礼

有難うございます 無事できました リストボックスっていろいろあるんですね また、何かありましたら宜しくお願いいたします

その他の回答 (5)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.6

#01、02です >フォームのリストボックスはセルに反映されないと思うのですが・・・ →リストボックスであれば当然VBAでセルに書き込むのを前提にしています。わざわざ「フォームのリストボックス」と書いたのはsiozakiyukさんの言われる「リストボックス」が何か分からないので、可能性がある「リスト」がつくものを列挙しただけです。 おそらく「リストボックス」は質問の本質ではないと思いますが、siozakiyukさんは「リストボックス」という言葉をどのような意味で使用していますか? この言葉のせいで回答者は混乱してしまっていますよ。 それはさておいて、質問の意図はA1に入力された会社名によって、C2の関数式が参照する範囲を変更したいということではありませんか? 例えば、A社ならC2セルの式は =SUM(A10:A20)、B社なら =SUM(B10:B20)、C社なら =SUM(C10:C20) という具合にです。 もしそうであれば#02で回答した「挿入」→「名前」→「定義」で、A10:A20の範囲に「A社」、B10:B20の範囲に「B社」、C10:C20の範囲に「C社」という名前をつければ良いのです。C2の式は =SUM(INDIRECT(A1)) で良いです。 そうすればA1にA社が入力されたら、C2は=SUM(A10:A20)と同じ答えになります。(A1がB社なら=SUM(B10:B20)と同じになる) #02でもそのつもりで回答したのですが、意図が伝えきれなかったのならごめんなさい。なお、文言にこだわるような補足回答ならもう不要です。

siozakiyuk
質問者

お礼

回答ありがとうございます 別のやり方ですが、何とかできました また、何かありましたら宜しくお願いいたします

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

A列へ会社名A社など入れるとき、A列に1000を返すことは、VBAを使わないと、絶対できません。 ーーー 別列B列に出すとします。 ^^^ 会社ー数字の対応表を D1:E3に A社 1000 B社 2000 C社 3000 とつくり ーー A列を範囲指定して データー入力規則ーリストーD1:D3 ーー B1に=IF(A1="","",VLOOKUP(A1,$D$1:$E$3,2,FALSE)) と入れて、下方向に(リストボックスで会社命を入力するセル範囲)式を複写する。 結果 A列  B列 A社 1000 B社 2000 C社 3000 会社はリストボックスで選ぶ限り、該当なしは無いと思うので その手当ては不要か。

siozakiyuk
質問者

お礼

回答ありがとうございます 別のやり方ですが、何とかできました また、何か借りましたら宜しくお願いいたします

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >リストボックスを範囲として指定できないのでしょうか? この意味が分かりません。どうするというのでしょうか? リストボックスは、オブジェクトで、オブジェクト自体を、関数などの引数に出来るはずもありません。 VBAを使わない方法では、リストボックス(フォーム側に限ります)の「リンクするセル」を、どこかひとつ設けて、そのセルを、INDEX関数などで出力するかと思います。 例: リストボックス(フォームツールバーよりドラッグ) 入力範囲:$H$1:$H$3  H  I A社 1000 B社 1200 C社 800 リンクするセル $G$1 C2: =INDEX($H$1:$I$3,G1,2) ただし、Excel2007 では、保証しません。

siozakiyuk
質問者

お礼

こんにちは。 リストボックスの値を範囲として設定できれば らくだと思ったのですが、できないようですね(T-T) >リストボックス(フォームツールバーよりドラッグ) この部分がわかりません。リストボックスを作るということですか? それとも、作ったものをどこかにドラッグすると言うことでしょうか? 社名と数値を別表作成しました 入力範囲に社名部分を選択 リンク範囲に数値部分を選択 まで行ないました >リンクするセル $G$1 Gはどこに当たるのでしょうか? >=INDEX($H$1:$I$3,G1,2) はどことどこを選択しているのでしょうか EXCEL操作は、特に勉強したわけではなく、業務中に覚えたものですか ら 根本がわかっていないのかも知れませんね。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

#01です。 >リストボックスで会社名をえらぶと フォームのリストボックスであれ、入力規則のリストであれA1セルにいずれの会社名が選択されたとします 予め1000、1200、800と入力したセルを「挿入」→「名前」→「定義」でそれぞれ「A社」「B社」「C社」という名前で定義しておきます。 C2セルに =INDIRECT(A1) と入力すると、A1に入力された会社名によってC2には1000、1200、800のいずれかが表示されるようになります。 でも会社が3つくらいならまだ良いのですが、会社数が増えるといちいち名前定義するのが大変になります。変更があった時のメンテナンスも大変になります。個人的には、後々のメンテを考えると関数式の方が楽だと思います。

siozakiyuk
質問者

お礼

>フォームのリストボックスであれ、入力規則のリストであれA1セルにいずれの会社名が選択されたとします フォームのリストボックスはセルに反映されないと思うのですが・・・ リストボックスで選択された値を、セルに反映させる手段があるのでしょうか・・・ それなら、事は簡単なのですが・・・

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

同じような質問が続きますね http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=3151932 >リストボックスを範囲として指定できないのでしょうか? できないと思いますよ。関数式を入れておくか、VBAでワークシートのChangeイベントを利用するかのいずれかの方法になります なぜ関数式ではダメなのでしょうか?

siozakiyuk
質問者

補足

>なぜ関数式ではダメなのでしょうか? 関数では「だめ」ではなく 「値を返す関数はわかっている」 が 論理式なり、数式なりを入れるときに範囲を選択しますよね? その際に、セル ではなく リストボックスの値を選択できるのか? ということです