ハマっている「お菓子」を教えて!

お世話になります。

やりたいことはとても一般的なことです。
以下のような名前と、IDが対になったデータがあります
名前  ID
----------
りんご 1
ばなな 2
いちご 3

コンボボックスには名前だけを表示し、りんごを選択したら「1」を取得したいのです。

普通に
ComboBox.AddItem "りんご"
ComboBox.AddItem "ばなな"
ComboBox.AddItem "いちご"

とやるとIDとの関連がなくなってしまい、りんごを選択しても「1」と判断することができません。

お知恵をお貸しください。

A 回答 (6件)

#5です。


その「お礼」部分のご質問に関し
http://www.seraphyware.jp/dev/tips/vb.tips.array …
をご覧になれば参考になりませんか。

参考URL:http://www.seraphyware.jp/dev/tips/vb.tips.array …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます、Dimで定義した配列の初期化を動的に行うことは出来そうですね、しかしPublicで宣言したものを後で動的に器の大きさを変更する方法は無のかも知れません。

私のような問題にぶちあたっている人は多そうな気がするのですが。。。

何度も回答していただきありがとうございます。

お礼日時:2003/10/31 14:40

#3です。


易しすぎると思いました。
「これらの情報はDB(Access)より取得するのです」をxとして、
t(1)=x:Sheet1.ComboBox1.AddItem "りんご"
MsgBox t(ComboBox1.ListIndex)
でxを出せばどうですか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

この方法で出来ました! ただ t()をPublic 宣言
して、さらに、配列の個数をレコードカウントで指定したいのです。

とりあえず今は Public t(30) As Integer
というように「30」固定でコーディングしているのですが
やはり「30」固定ではなく変数を入れたいのですが、これについてのアドバイスがありましたらよろしくお願いします。

お礼日時:2003/10/30 10:47

もっと簡単にできませんか?



「コントロールツールボックス」のコンボボックスではなく、「フォーム」のコンボボックスを使えば、リストの上からの順番を返してきますから、その数値でIDをオフセットすれば簡単に取得できます。

ぜんぜん外していたらすみません。
    • good
    • 0

下記でどうでしょうか。


(1)シート1にコンボボックスを貼りつける。
(2)標準モジュールに
Sub test01()
Dim t(10)
t(1) = "りんご": Sheet1.ComboBox1.AddItem t(1)
t(2) = "みかん": Sheet1.ComboBox1.AddItem t(2)
t(3) = "なし": Sheet1.ComboBox1.AddItem t(3)
End Sub
を作り、実行する。
(3)ComboBox1のChangeイベントに
Private Sub ComboBox1_Change()
MsgBox ComboBox1.ListIndex + 1
End Sub
を作ります。
(4)シートのコンボボックスのアイテムをクリックすると対応した数字が表示できます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

りんご = 1というのは固定情報ではありません。

これらの情報はDB(Access)より取得するのです。
説明が不足しており申し訳ありませんでした。

お礼日時:2003/10/29 10:17

#1です。

修正版です。
A1~A3に名前、B1~B3に取得する番号が入力されているとして。
以下のコードをVBAに記述してください。
「ThisWordbook」に
Public Sub Choice()
Select Case Sheet1.ComboBox1.Text
Case Sheet1.Range("A1")
Sheet1.Range("C1") = Sheet1.Range("B1")
Case Sheet1.Range("A2")
Sheet1.Range("C1") = Sheet1.Range("B2")
Case Sheet1.Range("A3")
Sheet1.Range("C1") = Sheet1.Range("B3")
End Select
End Sub

「Sheet1」に
Private Sub ComboBox1_Change()
Choice
End Sub

「Module1」に
Public Sub Choice()
Select Case Sheet1.ComboBox1.Text
Case Sheet1.Range("A1")
Sheet1.Range("C1") = Sheet1.Range("B1")
Case Sheet1.Range("A2")
Sheet1.Range("C1") = Sheet1.Range("B2")
Case Sheet1.Range("A3")
Sheet1.Range("C1") = Sheet1.Range("B3")
End Select
End Sub

これでいかがでしょうか?
    • good
    • 0

結果を表示するセルを「B1」として、


以下のコードをVBAに記述してください。
「ThisWordbook」に
Private Sub Workbook_Open()
Sheet1.ComboBox1.AddItem "りんご"
Sheet1.ComboBox1.AddItem "バナナ"
Sheet1.ComboBox1.AddItem "イチゴ"
End Sub

「Sheet1」に
Private Sub ComboBox1_Change()
Choice
End Sub

「Module1」に
Public Sub Choice()
Select Case Sheet1.ComboBox1.Text
Case "りんご"
Sheet1.Range("B1") = 1
Case "バナナ"
Sheet1.Range("B1") = 2
Case "イチゴ"
Sheet1.Range("B1") = 3
End Select
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

文字列比較をするのは、最悪の場合にしたいのです。
あと、りんご,1というのは決め打ちにはできません、

これらの情報はDB(Access)より取得するのです。
説明が不足しており申し訳ありませんでした。

お礼日時:2003/10/29 10:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報