Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6641 / 13646 ツリー ←次へ | 前へ→

【44076】オートフィルタで抽出したデータをUserForm上のListBoxに表示 たかし 06/11/2(木) 18:27 質問[未読]
【44079】Re:オートフィルタで抽出したデータをUser... ToShiYo 06/11/3(金) 7:27 発言[未読]
【44080】Re:オートフィルタで抽出したデータをUser... kobasan 06/11/3(金) 8:19 回答[未読]
【44081】Re:オートフィルタで抽出したデータをUser... kobasan 06/11/3(金) 8:28 発言[未読]
【44083】Re:オートフィルタで抽出したデータをUser... たかし 06/11/3(金) 10:26 質問[未読]
【44087】Re:オートフィルタで抽出したデータをUser... kobasan 06/11/3(金) 12:31 発言[未読]
【44089】Re:オートフィルタで抽出したデータをUser... kobasan 06/11/3(金) 13:17 発言[未読]
【44090】Re:オートフィルタで抽出したデータをUser... たかし 06/11/3(金) 14:15 お礼[未読]

【44076】オートフィルタで抽出したデータをUserF...
質問  たかし  - 06/11/2(木) 18:27 -

引用なし
パスワード
   いつもお世話になっています。
過去ログを参考に、下記のコードを作成しました。
Private Sub CommandButton3_Click()
 Dim CT2 As Range, Cel As Range, LB2tb() As String
 
 Worksheets("Result").Range("A1").AutoFilter Field:=1, _
  Criteria1:="*" & TextBox1.Value & "*"
 CE = Worksheets("Result").Range("A65536").End(xlUp).Row
  Set CT2 = Worksheets("Result").Range("A2:B" & CE).SpecialCells _
       (xlCellTypeVisible)
   ListBox1.ColumnCount = 2
   Cnt = 0
   For Each Cel In CT2
     On Error Resume Next
     mt = Application.Match(Cel, ListBox1.List, 0)
     If IsError(mt) Or mt = Empty Then
      Cnt = Cnt + 1
      ReDim Preserve LB2tb(1 To Cnt)
      LB2tb(Cnt) = Cel
     End If
     ListBox1.List = LB2tb
     ERR.Clear
     On Error GoTo 0
   Next
   ListBox1.List = CT2.Value
   Set CT2 = Nothing
   Erase LB2tb
   Application.ScreenUpdating = True
End Sub

質問なんですが、このコードだとオートフィルタ後のデータの、上から
連続した行しかListBoxに表示されません。
データ数が多い為、他のセルでもオートフィルタをかけ、絞込み後にListBox
から欲しい行を抽出しようとしたのですが、やはりListBoxに表示されるのは
上から連続した行のみになってしまいます。

例えば、オートフィルタ後に抽出された行が2,3,6,7,9だったとすると、
ListBoxに表示される行は、2,3だけになってしまいます。

オートフィルタ後に表示されている全ての行をListBoxに表示する方法はないでしょうか?
よろしくお願いします。

【44079】Re:オートフィルタで抽出したデータをUs...
発言  ToShiYo  - 06/11/3(金) 7:27 -

引用なし
パスワード
   ▼たかし さん:

おはようございます。
現象が少し分かりにくいのですが。
この「Criteria1:="*" & TextBox1.Value & "*"」コードですと、
フィルターがかかりますか?

具体的に
例えば
「555をテキストボック1」入力して、絞り込むとリストボックスに
どのように表示されるのでしょう?
表示が2行と書かれていますが、この場合「555が2行出るということでしょか?」

【44080】Re:オートフィルタで抽出したデータをUs...
回答  kobasan  - 06/11/3(金) 8:19 -

引用なし
パスワード
   おはようございます。

>質問なんですが、このコードだとオートフィルタ後のデータの、上から
>連続した行しかListBoxに表示されません。
>データ数が多い為、他のセルでもオートフィルタをかけ、絞込み後にListBox
>から欲しい行を抽出しようとしたのですが、やはりListBoxに表示されるのは
>上から連続した行のみになってしまいます。
>
>例えば、オートフィルタ後に抽出された行が2,3,6,7,9だったとすると、
>ListBoxに表示される行は、2,3だけになってしまいます。
>
>オートフィルタ後に表示されている全ての行をListBoxに表示する方法はないでしょうか?

Sheet2を作業シートとして利用すれば、これでてきるかな。

Dim rng As Range
Dim LastRow As Long
  With Sheets("Sheet1")
    '一度AutoFilterを解除
    If .AutoFilterMode Then
      .Range("A1").AutoFilter
    End If
    '
    .Range("A1").AutoFilter Field:=1, _
      Criteria1:="*" & TextBox1.Text & "*"
    LastRow = .Range("A65536").End(xlUp).Row
    Set rng = .Range("A1:B" & LastRow).SpecialCells(xlCellTypeVisible)
  End With
  '
  'Sheet2を作業シートとして利用
  Sheets("Sheet2").Cells.Clear
  rng.Copy Sheets("Sheet2").Range("A1")
  'Sheet2!A1:A3 ListBox1.List =
  '
  ListBox1.ColumnCount = 2
  ListBox1.RowSource = "Sheet2!" & Sheets("Sheet2").UsedRange.Address(0, 0)
  Set rng = Nothing

【44081】Re:オートフィルタで抽出したデータをUs...
発言  kobasan  - 06/11/3(金) 8:28 -

引用なし
パスワード
   >  'Sheet2!A1:A3 ListBox1.List = <===ゴミでした。削除してください。
>  '
>  ListBox1.ColumnCount = 2

  ListBox1.ColumnHeads = True '<==追加してください。

>  ListBox1.RowSource = "Sheet2!" & Sheets("Sheet2").UsedRange.Address(0, 0)

【44083】Re:オートフィルタで抽出したデータをUs...
質問  たかし  - 06/11/3(金) 10:26 -

引用なし
パスワード
   お返事ありがとうございます。

▼ToShiYo さん:
>この「Criteria1:="*" & TextBox1.Value & "*"」コードですと、
>フィルターがかかりますか?

出来ています。

>具体的に
>例えば
>「555をテキストボック1」入力して、絞り込むとリストボックスに
>どのように表示されるのでしょう?
>表示が2行と書かれていますが、この場合「555が2行出るということでしょか?」

「555」で絞り込んだ場合
  A列  B列
2 15553  AAA
3 255567 BBB
6 555923 CCC
7 23555  AAA
9 15552  BBB
が表示され、この内、ListBoxに表示されるのが、2行目と3行目の
 15553  AAA
 255567 BBB
だけになってしまいます。6・7・9行目が表示されません。

▼kobasan さん:
なるほど・・・ 1度他シートにコピーしてから、ListBoxに表示させるんですね。
ありがとうございます。試してみます。
ということは、直接ListBoxに表示する事は出来ないと言うことなんでしょうか?

【44087】Re:オートフィルタで抽出したデータをUs...
発言  kobasan  - 06/11/3(金) 12:31 -

引用なし
パスワード
   今日は。

>なるほど・・・ 1度他シートにコピーしてから、ListBoxに表示させるんですね。
>ありがとうございます。試してみます。
>ということは、直接ListBoxに表示する事は出来ないと言うことなんでしょうか?

配列を使うとできますが、
  ListBox1.RowSource = "Sheet2!" & Sheets("Sheet2").UsedRange.Address(0, 0)
  'ListBox1.ColumnHeads = True
この設定できなくなります。

配列で設定するときは、
   ListBox1.List = 配列
のような設定をしますので、ListBox1.ColumnHeads の設定はできません。
それでもしますか。

【44089】Re:オートフィルタで抽出したデータをUs...
発言  kobasan  - 06/11/3(金) 13:17 -

引用なし
パスワード
   訂正です。


>  ListBox1.RowSource = "Sheet2!" & Sheets("Sheet2").UsedRange.Address(0, 0)


  ListBox1.RowSource = "Sheet2!" & Worksheets("Sheet2").UsedRange.Offset(1).Address(0, 0)

としてください。これでListBox1のColumnHeads が正しく表示されます。

【44090】Re:オートフィルタで抽出したデータをUs...
お礼  たかし  - 06/11/3(金) 14:15 -

引用なし
パスワード
   ▼kobasan さん:
>配列で設定するときは、
>   ListBox1.List = 配列
>のような設定をしますので、ListBox1.ColumnHeads の設定はできません。
>それでもしますか。

ありがとうございます。
両方のやり方で試してみて、どうすれば最善の方法なのかを考えます。
いろいろと、ありがとうございました。

6641 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free