- 締切済み
セルの値をリストボックスに表示させる方法
マクロ初心者です。書き方が分からないので教えてください。 会社で伝票を作っているのですが、シートが9つあります。それで、例えば、A列に3という数字が入っていて、同じシートや、他のシートにも、3があれば、その行番号と列番号と値をリストボックスに表示させたいと思っているのですが、うまくいきません。というか、書き方が分かりません。 どなたか、分かる方がいらっしゃいましたら教えて下さい。うまく説明できなくてすみません。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 それは、すみませんが、その補足の説明では、逆に全体の構成がつかめないのです。 ・1つめのリストボックスに検索の文字をいれます。 ->それは、TextBox ではありませんか? リストボックスに代入するということは通常ありえません。 ・検索結果を2つめのリストボックスに表示させたい ・検索結果の2つ目のシートに入れたい 検索結果として、二重になっていますね。 #2でお書きしたように、「どういう目的の内容なのか意味が分からない」と書きましたが、今の説明では、良く分からないのです。 「作ってください->それは違います。こういうことです。」 そういう内容、常に小出しにされるのは遠慮していただきたいのです。 前回書かれていないくて、UserForm に、これとこれがあるので作り直してください、というのでは、それは出来ないのです。こちらでは、すでにヒントになるコードは差し上げました。ある程度の力があれば、十分応用できるはずです。 具体的な位置関係、検索の種類、予想される検索結果、検索結果の出力する場所など、一切書かれていないままに、ダメ出しされても、それは不可能なのです。 ご自分で、コードを作るつもりになって、どうしたらよいのか、少し考えてみてください。まったく、VBAを知らない方でも、VBAを知っているように説明できる方もいらっしゃいますから、もう少し、論理的に手順と具体的な位置を説明をしてください。要するに、作業というものは、時系列に物事は進むわけですから、まず、自分で手作業で、どのようにしたら出来るかやってみてください。コントロールの名称やセル位置など、目でみれば確認できるはずです。 私が、#2と、ここで、いくつか質問を出しているはずですから、そういう内容を無視されたら、同じ結果に終わってしまいます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 検索した結果を出すのでしたら、ご希望とは違うかもしれませんが、以下のようなコードはいかがでしょうか? シートに コントロールツールから、 リストボックス(ListBox1) コマンドボタン(CommandButton1) で、以下のようなコードです。 以下を貼り付けた場合は、一度、VBEditor で、エディタ上部の二つの窓がありますが、 (General) となっている部分の▽ボタンを、CommandButton1 に切り替えて、再認識されてください。ListBox1 も同様です。 以下は、アドレスがListBoxに、表示され、そのアドレスをクリックすると、ジャンプするように出来ています。 'シートモジュール '----------------------------------------------------------------- Private Sub CommandButton1_Click() Dim sWord As String Dim c As Range Dim ws As Variant Dim FindWord As String Dim addFirst As String Const STARTCELL As String = "A1" If Range(STARTCELL).Value <> "" Then sWord = Range("A1").Value Me.ListBox1.Clear Else Exit Sub End If For Each ws In Worksheets With ws.UsedRange Set c = .Find( _ What:=sWord, _ LookIn:=xlValues, _ LookAt:=xlWhole) If Not c Is Nothing Then addFirst = c.Address If FindWord = "" Then If Me.Name & "!" & c.Address <> c.Parent.Name & "!" & c.Address Then FindWord = c.Parent.Name & "!" & c.Address(0, 0) End If Else FindWord = FindWord & "," & c.Parent.Name & "!" & c.Address(0, 0) End If Do Set c = .FindNext(c) If c.Address = addFirst Then Exit Do FindWord = FindWord & "," & c.Parent.Name & "!" & c.Address(0, 0) Loop Until c Is Nothing End If addFirst = "" End With Next ws Me.ListBox1.List = Split(FindWord, ",") End Sub Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Dim ar As Variant On Error Resume Next ar = Split(ListBox1.Text, "!") Application.Goto Worksheets(ar(0)).Range(ar(1)) End Sub
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 どういう目的の内容なのか意味が分からないですね。 例えば、A列に3という数字が入っていて、 同じシートや、他のシートにも、3があれば、 その行番号と列番号と値をリストボックスに表示 行番号・列番号というのは、アドレスのことではありませんか? 値は、3 を探したら、3でしかないのではないかと思います。 検索マクロとは違うのでしょうか? 検索した結果を、リストボックスに出すということでしょうか?
お礼
検索した結果をリストボックスに表示するということです。 すみません。
- imogasi
- ベストアンサー率27% (4737/17069)
リストボックスのプロパティにFillListRangeというのがあるから、そこにG1:G10のようにリストしたい、データの入っているセル範囲を入力すればよい(半角で)。エクセルのリストボックス専用のプロパティ項目で、VBにはない。
補足
説明がうまくできなくてすみません。 今、ユーザーフォームには、リストボックスが2つと、コマンドボタンが1つあります。1つめのリストボックスに検索の文字をいれます。それで、コマンドボタンを押すと検索結果を2つめのリストボックスに表示させたいと思っています。その検索結果は、アクティブシートだけでなく、9つシートがあるので、同じ文字だと、全てのシートから拾い出して、検索結果の2つ目のシートに入れたいと考えています。 全く初心者で、書き方が分からないので、教えてください。 宜しくお願いいたします。