• 締切済み

検索結果を別シートにコピー

こんにちは。 マクロ初心者のものですが、 (1)シート1のA1からA50までに、京都にある大学名のデータベース を作る。  シート2のA1に大学名の一部などのキーワードを入力すると、B1 に検索結果(大学名)が表示されるマクロをボタン1に登録。 (2)複数候補が出た場合に、次の候補をA2に表示してくれるマクロをボタン2に登録。 (3)シート2のA2にキーワードを入力すると、B2からB6までに5つの候補が表示されるマクロをボタン3に登録。 以上のことをfindメソッドを使ってやりたいのですが、自分でやってみると、どうしても(1)と(2)の作業が分割されません。 (1)では1度実行すると、もう一度ボタンを押しても実行されないようにしたいのですが、一度押して、検索結果が表示された後またもう一度押すと、次の候補を表示してしまいます。 次の候補の表示は(2)に移したいのですがどうしてもできません。 (3)もいろいろ試しているのですが、うまくいきません。 どんなことでも結構ですのでアドバイスお願いします。

みんなの回答

  • squip
  • ベストアンサー率16% (2/12)
回答No.2

Sheet1   |  A  |  1 |大学名 |  2 |*女子* |  3 |    |  4 |    |  5 |大学名 |    セル範囲 A6:A29 にデータがあるとします。 1. セル範囲 A5:A29 のどこかを選択して、メニューから [データ] → [フィルタ] → [フィルタオプションの設定...] と選択。 2. メッセージボックスが現れたら、[OK] をクリック。 3. [フィルタ オプションの設定] ダイアログボックス    [選択範囲内] オプションボタンを選択    [リスト範囲] テキストボックスは、$A$5:$A$29    [検索条件範囲] テキストボックスは、$A$1:$A$2    [OK] をクリック。 上記の例では、大学名に"女子"が含まれるものを選択してます。 なお、抽出先として別シートにコピーすることもできますが、その場合は抽出先とするシートを選択した上で、上記操作を実行します。 ただし、前回のフィルタ結果がある場合、先に内容をクリアしなければいけません。

回答No.1

仕様とは違うのですが、リストボックスとコマンドボタンをシート2に貼り付けて、 Private Sub CommandButton1_Click() With Sheets("Sheet1").Range("A1:A50") Dim c As Range Set c = .Find(What:=Range("A1"), LookIn:=xlValues) If c Is Nothing Then MsgBox "候補がありません" Range("A1").Select Else ListBox1.Clear ListBox1.Visible = True Dim firstAddress As String firstAddress = c.Address Do ListBox1.AddItem c.Value Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress End If End With End Sub Private Sub Worksheet_Activate() ListBox1.Visible = False End Sub Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) ListBox1.Visible = False MsgBox ListBox1.List(ListBox1.ListIndex) '何か処理 End Sub と言うのはどうでしょうか?

関連するQ&A