EXCELのVBA LISTBOXに関することで質問です。

ワークシート1のA2-5セルに取引先名を入力してあります。

UF1という名前のユーザーフォームの中にリストボックスを作成し、ワークシート1のA2-5の取引先を表示するには、

Private Sub UserForm_Initialize()
Dim torihiki As String
torihiki = Worksheets(1).range("A2:A5")
UF1.ListBox1.List() = torihiki
End Sub

と打ち込んでいます。
ちなみに、ユーザーフォームは以下のようにOKボタンで閉じるようにしました。

Private Sub CommandBottan1_Click()
unload UF1
End Sub

質問したいのはここからですが、
上のユーザーフォーム内のリストボックスで選択された取引先をTRHKという変数に代入したい場合、どうしたらいいのでしょうか?

私の少ない知識を振り絞って以下のように考えてみたのですが、
TRHK = UF1.ListBox1.List()
としても代入されていないようです。

List()ではないメソッドが必要なのだと思うのですが・・・・
.Selectedとかでしょうか?

どなたか、ご教授願います!
宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

EXCEL2003ではこんな感じでいけます。





Private Sub UserForm_Initialize()
ListBox1.AddItem "aaaaa"
ListBox1.AddItem "bbbbb"
ListBox1.AddItem "ccccc"
End Sub


Private Sub CommandButton1_Click()

If ListBox1.ListIndex = -1 Then
MsgBox "値未選択です"
Else
MsgBox ListBox1.List(ListBox1.ListIndex) '<------ここかな
End If

End Sub
    • good
    • 0

下記を参考に


Private Sub UserForm_Initialize()
Dim torihiki As Variant
torihiki = Worksheets(1).Range("A2:A5")
UserForm1.ListBox1.List() = torihiki
End Sub
ヴァリアント変数の使い方に注意。
ーー
リストボックスのクリックしたアイテムを取るのは
Private Sub ListBox1_Click()
Range("B1") = UserForm1.ListBox1.List(ListBox1.ListIndex)
End Sub
ーー
こんなところへ質問しなくてもこの程度のことは、Googleででも「VBA Listbox」で照会すれば記事が出るよ。
一例
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/04/21 11:08

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccess2007のフォームウイザードでデータシートを作りたいが方法が分からない

Access2003では、フォームウイザードでデータシートを作れたが。
Access2007では、フォームウイザードでは単票のフォームしか作れない様だ。

どうやって、作るのだろうか。操作が分からない。

Aベストアンサー

どういう帳票が欲しいかわかりませんが一応例として....
まずAccess上部にある作成をクリックします。
フォームウィザードをクリックして使用するテーブルとフィールドを選択します。
次に表形式を選択すれば帳票形式でフォームが作成されます。

もう1つはその他のフォームから複数のアイテムを選択すれば帳票形式でフォームが作成されます。

QExcelのVBAについて質問なんですが。VBAに関してはまったくの素

ExcelのVBAについて質問なんですが。VBAに関してはまったくの素人です。
大学の実験でLEDの温度変化の実験をしています。実験器具はデータロガーGL800を使用しています。そのデータロガーで測定した温度をExcelにリアルタイムに書き込んでいってるのですが、その際更新されていく最高温度のみを別に表示させたいのですが、どのようなVBAのマクロを使えばいいのか教えてください。

Aベストアンサー

今のところ、解決には結びつきませんが、ちょっとアドバイスさせていただきます。
もう少し、詳しい話をしていただかないと良く分からない部分があるというか、同じような質問では、ある時間の範囲に対して、最大値を求めるものだったと思います。その場合、表示された時間から取得しなければなりません。データロガーは、OLEにしても、DDEにしても、イベントが取れるはずですから、そこから、起動するマクロを考えなくてはなりません。

せめて、データロガーが入ってきた後のExcelのシートの画面がどのようになっているか、それがあれば、多少は分かるはずです。

ですから、どのようなデータなのかとか、情報が足りませんが、いままでの例では、はっきりいって、VBAをある程度かじった程度では困難な質問だと思います。私個人は、現場なら、そのマクロを完成させる自信はありますが、掲示板では、うまくいきませんでした。掲示板であれこれ言っても、思ったように理解していただけないことが多いです。関数を使うにしても、それはコードの一部分であって、特定の範囲を取得できなければ、最大値はひとつしかありません。

今のところ、解決には結びつきませんが、ちょっとアドバイスさせていただきます。
もう少し、詳しい話をしていただかないと良く分からない部分があるというか、同じような質問では、ある時間の範囲に対して、最大値を求めるものだったと思います。その場合、表示された時間から取得しなければなりません。データロガーは、OLEにしても、DDEにしても、イベントが取れるはずですから、そこから、起動するマクロを考えなくてはなりません。

せめて、データロガーが入ってきた後のExcelのシートの画面がどのようにな...続きを読む

Q【Access】複数フォームを閉じる時の、選択処理について

Access Ver. : 2003
Windows Ver.: XP

Accessフォームの「閉じる時」処理で、下記のような工夫をした
いと考えております。

・フォームがひとつしか開かれていないとき、Accessを終了する
・複数のフォームが開かれている時、そのフォームのみを閉じる

そんなVBAコードがありましたら、教えてください。
何か参考になるページでも、かまいません。
どうぞ、宜しくお願いいたします。

Aベストアンサー

forms.count で開いているフォーム数を得て分岐
Application.quit

Access VBE のヘルプで、CurrentProject オブジェクト を見てみたら?

QVBAのListBoxで複数選択してExcelの1つのセルに反映

いつもお世話になります。
出来るか教えて欲しいのですが、

UserFormに「ListBox」と「Commandbutton」があります。
「ListBox」には5つの選択肢がありますが、これを複数選択可に
して、「Commandbutton」をクリックすることにより、
Excelの1つのセルに「ListBox」で選択した項目を反映させることは
出来ますか?

出来る場合どのようにすれば宜しいでしょうか?

Aベストアンサー

ListBoxのSelectedプロパティを使えばどのアイテムが選択されているか確認出来ます

ボタンのクリックイベントで
dim n as integer, s as string
for n = 0 to ListBox1.Count-1
  if ListBox1.Selected( n ) then
    s = s & ListBox1.List( n )
  end if
Next
Range("A2").value = s
といった具合で出来るかと思います

QACCESSフォームのボタン表示

ACCESSフォームのボタン表示

ACCESS2000で作成したフォームのボタンはACCESS2007でも変わりません。
ACCESS2007で一から作成したMDBは、ボタンの表示スタイルが異なります。
※ボタンの角が丸く、マウスカーソルをボタンの上に当てるだけで色が変わる。
ACCESS2000で作成したMDBをACCESS2007で上記のように表示させる設定は
あるのでしょうか?
いろいろ見ても、見当たらないのです。
よろしくお願いします。

Aベストアンサー

[Office ボタン] - [Accessのオプション] - [カレントデータベース] で
「フォーム上のコントロールに Windows のテーマを使用する」にチェック。

QExcel VBA ListBoxのマウスホイールでエラーになる

エクセルマクロでListBoxを使ったのですが、そのListBoxにフォーカスが当たっている状態でマウスホイールを回転させるとエラーになります。VB6.5でなるようです。回避策はないものでしょうか?

Aベストアンサー

[win2000sp4/xl2000sp3/vba6.5 1024]の環境ですが
ワークシート上に配置したMSForms.ListBoxで現象が確認できました。
マウスドライバは Logitech-compatible Mouse PS/2 です。
エラーメッセージは

---------------------------
Microsoft Excel - listboxtest.xls - Safe Mode: EXCEL.EXE - アプリケーション エラー
---------------------------
例外 unknown software exception (0xc00000fd) がアプリケーションの 0x77e0a44b で発生しました。
プログラムを終了するには [OK] をクリックしてください
プログラムをデバッグするには [キャンセル] をクリックしてください
---------------------------
OK キャンセル
---------------------------

---------------------------
Microsoft Excel - listboxtest.xls - Safe Mode: EXCEL.EXE - アプリケーション エラー
---------------------------
"0x600c0af5" の命令が "0x0000004c" のメモリを参照しました。メモリが "read" になることはできませんでした。
プログラムを終了するには [OK] をクリックしてください
プログラムをデバッグするには [キャンセル] をクリックしてください
---------------------------
OK キャンセル
---------------------------

こんなです。

excel listbox scroll error

でGoogle検索すると
http://groups.google.com/group/microsoft.public.excel.programming/browse_thread/thread/421cd54879f5545d/88bb2afe2bd60009?lnk=raot
ここがヒットします。
参考になるかもしれません。

もし、私の環境と同じくワークシート上に配置したMSForms.ListBoxで発生していて、クラッシュを回避したい場合は
[フォーム]のExcel.ListBoxを使うか、
ワークシート上にまずMSForms.Frameを配置して、その中にMSForms.ListBoxを置くと回避できるようです。
#ただし、マウススクロールは効きませんが。

[win2000sp4/xl2000sp3/vba6.5 1024]の環境ですが
ワークシート上に配置したMSForms.ListBoxで現象が確認できました。
マウスドライバは Logitech-compatible Mouse PS/2 です。
エラーメッセージは

---------------------------
Microsoft Excel - listboxtest.xls - Safe Mode: EXCEL.EXE - アプリケーション エラー
---------------------------
例外 unknown software exception (0xc00000fd) がアプリケーションの 0x77e0a44b で発生しました。
プログラムを終了するには [OK] をクリックしてくだ...続きを読む

QExcelで作成されたフォームをAccessにコンバージョンしたいので

Excelで作成されたフォームをAccessにコンバージョンしたいのですが、フォームのインポートはできないのでしょうか?
Accessのフォーム作成画面から、インポートを選択していって、Excelファイルを開くのですが、シートしか選択できません。
コントロールのコピペもできないみたいですが。。。
Excelで作成されたフォームはAccessにはインポートできないのですか?
コーディングをそっくり使用することはできなくても、せめてフォームのデザインはコピーしたいのですが。。。(> <)
よろしくお願いします。m(_ _)m

Aベストアンサー

質問者はプロかプロ経験者ですか。でないならこんな勉強は試みないほうが良いでしょう。
市販の書物や初心者向けの講習で説明される話題ではない。プロで会社にその辺の経験者がいたりすれば聞けるでしょうが。原理的には最熟練者の人は変換プログラムは組めるかもしれませんが、そのレベルの人は、この質問コーナーを読んでないでしょうし、無料で教えるスキルではないと思います。
WEBの記事も多分少ないでしょう。
Googleででも「エクセル フォーム アクセス 移行」で出てくる記事を参考にしてはどうでしょう。
http://www.accessclub.jp/bbs2/0080/beginter24987.html
同じ発想の人はいることはいるが。
ーー
VBAとVBのフォームはコードで扱う上で微妙に違うし、アクセスVBAとエクセルVBAでは違う点も多い。
またコントロールの生成もコードで行う方法は隠して、易しいD&Dやマウスによる移動、プロパティボックスでの入力にして易しくしています。
エクセルのUserForm1のフォームも本格的なものではないサービスのような気がする。エクセルで第3者を巻き込んだ業務の開発までは予定して無いように推測する(何でもエクセル的な過大期待が横行している)。
それにエクセルでのセルとの連携をつけた機能LinkedCell、FillいstRangweなどはエクセル特有で、RecordSourceのSQL指定やフォーム指定はアクセス特有と思います。
外観を決めるサイズや書式関係は(エクセルでフォームやコントロールの)プロパティーメモー(アクセスでのフォームやコントロールの)プロパティ設定でやや似せて移せるかもしれない。
エクセルバージョン内の相違、エクセル・アクセルで使えるコントロールの種類の相違などもあります。

質問者はプロかプロ経験者ですか。でないならこんな勉強は試みないほうが良いでしょう。
市販の書物や初心者向けの講習で説明される話題ではない。プロで会社にその辺の経験者がいたりすれば聞けるでしょうが。原理的には最熟練者の人は変換プログラムは組めるかもしれませんが、そのレベルの人は、この質問コーナーを読んでないでしょうし、無料で教えるスキルではないと思います。
WEBの記事も多分少ないでしょう。
Googleででも「エクセル フォーム アクセス 移行」で出てくる記事を参考にしてはど...続きを読む

QExcelのVBA ListBox.RowSourceの範囲について教えてください。

下記のように範囲を変数で検索指定したいのですが、うまくいきません。VBAは初心者です。誰か助けて。

内容は・・・五十音順にあるリストを作り、ウ音のみをListBoxに表示したいのですが。


Private Sub ToggleButton3_Click()

Dim A As Range
Dim BBB As String
Dim C As Range
Dim DDD As String

Set A = Cells.Find(what:="ウ", lookat:=xlWhole)
BBB = Cells(A.row, A.Column + 1).Address

Set C = Cells.Find(what:="エ", lookat:=xlWhole)
DDD = Cells(C.row - 1, C.Column + 1).Address

ListBox商品名.RowSource = "BBB:DDD"

End Sub

PS 違う方法でもいいのでどなたか教えてください。

下記のように範囲を変数で検索指定したいのですが、うまくいきません。VBAは初心者です。誰か助けて。

内容は・・・五十音順にあるリストを作り、ウ音のみをListBoxに表示したいのですが。


Private Sub ToggleButton3_Click()

Dim A As Range
Dim BBB As String
Dim C As Range
Dim DDD As String

Set A = Cells.Find(what:="ウ", lookat:=xlWhole)
BBB = Cells(A.row, A.Column + 1).Address

Set C = Cells.Find(what:="エ", lookat:=xlWhole)
...続きを読む

Aベストアンサー

ListBox 及び ToggleButton はユーザーフォーム上ではなく、シート上に配置されているのでしょうか?
もしそうでしたら下記の記述に変更すれば大丈夫なハズですよ。
シート上に配置されている場合、ListBoxの範囲指定は、RowSource ではなく ListFillRangeを使用します。また範囲は、変数と文字を連結した文字列を代入すれば大丈夫です。

ListBox商品名.ListFillRange = BBB & ":" & DDD

もし、ユーザーフォーム上でのご質問でしたら、全く内容が異なりますので補足願います。

QVBからmdbファイル(Access2000)の特定のフォームを開きたい?

VisualBasicのフォームに配置したコマンドボタンをクリックすることで、特定のmdbファイルをAccess2000で開き、開くと同時に特定のフォームが表示されるようにしたいのですが、こんなことできますか?できるとすればどのようにすればよいのですか?

例えば、C:\商品管理\在庫一覧.mdbにフォーム商品があるとしたとき、
Form1のcommand1をクリックすると、C:\商品管理\在庫一覧.mdbがAccess2000で開き、フォーム商品が最初に表示されるようにしたいのですが・・・
ちなみに、Access2000の起動時の設定では他のフォームが最初に開くようになっています。
よろしくお願いします。

Aベストアンサー

オートメーションを使ってAccessを制御しましょう。
で、他のフォームが最初に開くようになっていることなので、最初に開くフォームを閉じてからAccessを表示するようにすればいいと思います。

Dim acs as Object

'AccessのApplicationオブジェクトを取得する。
Set acs = CreateObject("Access.Application")

'c:\test.mdbを開くacs.OpenCurrentDatabase "c:\test.mdb"

'起動時に開かれたフォームを閉じる
'2はacForm定数のこと
acs.Close 2,"フォーム名"

'Accessを表示させる
acs.Visible = True

'表示させたいフォームを開く
acs.OpenForm "フォーム名"


こんな感じで。

最後に、Accessを終わらせるときは

'オブジェクトの開放
Set acs = Nothing

で、オブジェクトを開放してください。

オートメーションを使ってAccessを制御しましょう。
で、他のフォームが最初に開くようになっていることなので、最初に開くフォームを閉じてからAccessを表示するようにすればいいと思います。

Dim acs as Object

'AccessのApplicationオブジェクトを取得する。
Set acs = CreateObject("Access.Application")

'c:\test.mdbを開くacs.OpenCurrentDatabase "c:\test.mdb"

'起動時に開かれたフォームを閉じる
'2はacForm定数のこと
acs.Close 2,"フォーム名"

'Accessを表示させる
acs.Visibl...続きを読む

QエクセルVBA ListBoxの並び替え:VBA初心者です

Listbox.additemで、追加していったListを並び替えてListboxに表示したいのですが、可能ですか?
並び替えは、エクセルのユーザー設定リストの順番にしたいです。

Aベストアンサー

こんにちは。

リストを直接並び替えるのは無理だと思います。
シートの空いているところにコピーして並び替えて追加するのはどうでしょうか。


人気Q&Aランキング

おすすめ情報