Excel VBA質問箱 IV

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

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


286 / 13645 ツリー ←次へ | 前へ→

【81174】ユーザーフォームのリストボックスに別ブックのシ全てのートから検索、表示 初心者です。 20/2/17(月) 21:58 質問[未読]
【81175】Re:ユーザーフォームのリストボックスに別... γ 20/2/18(火) 11:10 回答[未読]
【81176】Re:ユーザーフォームのリストボックスに別... 投稿者 20/2/18(火) 12:49 お礼[未読]
【81177】Re:ユーザーフォームのリストボックスに別... γ 20/2/18(火) 16:26 発言[未読]
【81178】Re:ユーザーフォームのリストボックスに別... 投稿者 20/2/18(火) 19:08 お礼[未読]

【81174】ユーザーフォームのリストボックスに別ブ...
質問  初心者です。  - 20/2/17(月) 21:58 -

引用なし
パスワード
   ユーザフォームのテキストボックスの文字を別ブックの全てのシートから検索し
必要な列だけをリストボックスに表示したいです。
現在、ネットで検索してなんとか
別ブックの指定したシートから検索し表示は出来たのですが・・・。


Private Sub CommandButton1_Click()

  Dim wb As Workbook
  Dim flg As Boolean
  Dim myData,myData2(),myno
  Dim i As long,j As long,cn As long

  ForEach wb In Workbooks
  If wb.Name="DATA.xlms"Then
  fig=True
  Exit For
  End If
  Next

  If fig=False Then
  Workbooks.Open ThisWorkbook.Path&"\DATA.xlsm"
  End If

  With Worksheets("K2")
  lastRow=.Cells(Rows.Count,1).End(xlUp).Row
  myData=.Range(.Cells(1,1),.Cells(lastRow,7)).Value
  End With

  ReDim myData2(1 To lastRow,1 To 4)
  Fori=LBound(myData)To UBound(myData)
  If myData(i,4)Like"*"&Textbox1.Value&"*"Then
  cn=cn+1
  myData2(cn,1)=myData(i,1)
  myData2(cn,2)=myData(i,3)
  myData2(cn,3)=myData(i,4)
  myData2(cn,4)=myData(i,6)
  End If
  Next i

  With リストボックス
  .ColumnCount=4
  .ColumnWidths="50;200;200;50"
  .List
  End With

  Workbooks("DATA.xlsm").Close SaveChanges:=False

  End Sub
別ブック内の全てのシートから検索し表示したいです。
シートは5つあります。
どのように記述すればよいかご教示お願いします。

【81175】Re:ユーザーフォームのリストボックスに...
回答  γ  - 20/2/18(火) 11:10 -

引用なし
パスワード
   Columnプロパティを使うとよいと思います。
参考にしてください。

Private Sub CommandButton1_Click()
  Dim wb As Workbook
  Dim ws As Worksheet
  Dim flg As Boolean
  Dim myData, myData2()
  Dim i As Long, j As Long, cn As Long
  Dim LastRow As Long

  '対象Bookの指定
  For Each wb In Workbooks
    If wb.Name = "DATA.xlms" Then
      flg = True
      Exit For
    End If
  Next

  If flg = False Then
    Set wb = Workbooks.Open(ThisWorkbook.Path & "\DATA.xlsm")
  End If

  '配列の作成
  For Each ws In wb.Worksheets
    With ws
      LastRow = .Cells(Rows.count, 1).End(xlUp).Row
      myData = .Range(.Cells(1, 1), .Cells(LastRow, 7)).Value
    End With

    For i = LBound(myData) To UBound(myData)
      If myData(i, 4) Like "*" & TextBox1.Value & "*" Then
        cn = cn + 1
        ReDim Preserve myData2(1 To 4, 1 To cn)
        myData2(1, cn) = myData(i, 1)
        myData2(2, cn) = myData(i, 3)
        myData2(3, cn) = myData(i, 4)
        myData2(4, cn) = myData(i, 6)
      End If
    Next i
  Next

  '
  With ListBox1
    .ColumnCount = 4
    .ColumnWidths = "50;200;200;50"
    .Column() = myData2
  End With

  wb.Close SaveChanges:=False
End Sub

なお、投稿にあたっては、手打ちせずに、
VBE(エディタ−)にあるコードをそのままコピーペイストしてください。
手打ちミスの修正までするのは無駄です。議論が噛み合わないこともあります。

また、冒頭に Option Explicit として、
未宣言の変数が無いようにしてください。
オプション設定を変更することで、自動的に、
Option Explicit を書き込む設定にしておくことを推奨します。

【81176】Re:ユーザーフォームのリストボックスに...
お礼  投稿者  - 20/2/18(火) 12:49 -

引用なし
パスワード
   丁寧に教えていただきありがとうございます。
質問するのも初めてだったのでいろいろと不適切な部分があり
もうしわけありませんでした。
思い通りの動作を確認できました!
ありがとうございます。

【81177】Re:ユーザーフォームのリストボックスに...
発言  γ  - 20/2/18(火) 16:26 -

引用なし
パスワード
   追記:(大事なことです。)

Option Explicit
をモジュールの一行目に挿入するようにして下さい。
そうすれば、今回のような未宣言の変数には警告が出て、
しかも場所を特定してくれますから、原因が直ぐに判明します。
下記参照
ht tp://officetanaka.net/excel/vba/beginner/06.htm

なお、
ツール − オプション − 編集 で
「変数の宣言を強制する」にチェックを入れておけば、
モジュールを作成した時点で、Option Explicitが自動的に挿入されるので、
手間が省けます。
一度だけチェックを入れておけば、以後、気にする必要はありません。(一生涯)

【81178】Re:ユーザーフォームのリストボックスに...
お礼  投稿者  - 20/2/18(火) 19:08 -

引用なし
パスワード
   ご指摘の通りOption Explicit追加しました。
初心者の私にはすごい助かるものです。教えていただきありがとうございました。

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