A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
2部構成
その2
'検索結果を表示状態で反映する関数
Private Sub ChgSarchVisible(p_xlsSheet As Excel.Worksheet, p_lstSerch As Collection)
Dim i As Long
Dim l_lngHitRow As Long
Dim l_lngBefRow As Long
Dim l_rngArea As Excel.Range
'一旦全部見せる
Call RowsVisible(p_xlsSheet.Cells, True)
For i = 1 To p_lstSerch.Count
l_lngHitRow = p_lstSerch.Item(i)
'最後の時だけの処理
If (i = p_lstSerch.Count) Then
'最終行では無いとき
If (l_lngHitRow < DEF_MAX_ROW) Then
'最後の結果以降も非表示
Set l_rngArea = GetRowsArea(p_xlsSheet, l_lngHitRow + 1, DEF_MAX_ROW)
Call RowsVisible(l_rngArea, False)
End If
End If
'連続して見つかっている場合は、処理を行わない
If (l_lngHitRow = l_lngBefRow + 1) Then
GoTo CONTINUE
End If
Set l_rngArea = GetRowsArea(p_xlsSheet, l_lngBefRow + 1, l_lngHitRow - 1)
Call RowsVisible(l_rngArea, False)
CONTINUE:
l_lngBefRow = l_lngHitRow
Next i
End Sub
'開始行~終了行のエリアを取得
Private Function GetRowsArea(p_xlsSheet As Excel.Worksheet, p_lngRow1 As Long, p_lngRow2 As Long) As Range
Set GetRowsArea = p_xlsSheet.Rows(p_lngRow1 & ":" & p_lngRow2)
End Function
'行エリアの表示状態を設定
Private Sub RowsVisible(p_rngArea As Excel.Range, p_blnVisible As Boolean)
p_rngArea.EntireRow.Hidden = Not p_blnVisible
End Sub
No.1
- 回答日時:
2部構成
その1
Option Explicit
Private Const DEF_MAX_COL As Long = &H100&
Private Const DEF_MAX_ROW As Long = &H10000
Private Sub Main()
Dim l_xlsBook As Excel.Workbook
Dim l_xlsSheet As Excel.Worksheet
Dim l_lstSerch As Collection
Dim l_strSerch As String
l_strSerch = InputBox("入力してください", "検索文字列を入力", "aaa")
If (Len(l_strSerch) = 0) Then
Exit Sub
End If
'対象ブック(前面に存在するブック)
Set l_xlsBook = Application.ActiveWorkbook
'そのカレントのシート
Set l_xlsSheet = l_xlsBook.ActiveSheet
'検索結果を取得
Set l_lstSerch = GetFindRows(l_xlsSheet, l_strSerch)
If (l_lstSerch.Count = 0) Then
MsgBox "検索結果なし"
Exit Sub
End If
'検索結果を反映
Call ChgSarchVisible(l_xlsSheet, l_lstSerch)
End Sub
'検索で見つかった行番号(ROW)を返却する関数
Private Function GetFindRows(p_xlsSheet As Excel.Worksheet, p_strFindString As String) As Collection
Dim l_lstRet As Collection
Set l_lstRet = New Collection
Dim l_blnExists As Boolean
Dim l_rngLast As Excel.Range
Dim l_rngSarch As Excel.Range
'最終CELLを取得
Set l_rngLast = p_xlsSheet.Cells(DEF_MAX_ROW, DEF_MAX_COL)
'先頭から検索(検索引数は自分でカスタマイズ)
Set l_rngSarch = p_xlsSheet.Cells.Find(p_strFindString, After:=l_rngLast, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
Do
If l_rngSarch Is Nothing Then
Exit Do
End If
'見つかったアイテムの行番号を記憶
On Error Resume Next
Call l_lstRet.Add(l_rngSarch.Row, CStr(l_rngSarch.Row))
l_blnExists = Not (Err.Number = 0&)
On Error GoTo 0
'既に登録済みならループ抜け
If l_blnExists Then
Exit Do
End If
'見つかった行番号の最終列以降から続けて検索
Set l_rngLast = p_xlsSheet.Cells(l_rngSarch.Row, DEF_MAX_COL)
Set l_rngSarch = p_xlsSheet.Cells.FindNext(l_rngLast)
Loop
Set GetFindRows = l_lstRet
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excle VBA Findメソッドについて 3 2022/07/15 13:56
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。 2 2023/07/14 14:06
- Excel(エクセル) Excelで、別シートへ情報を参照表示する関数について。 2 2023/06/26 09:58
- X(旧Twitter) カギをかけているツイッターの検索について教えてください。 2 2022/11/07 17:22
- Excel(エクセル) 【VBA】エクセルで選択した範囲の値のみをクリップボードにコピーするコードについて 3 2023/03/08 17:41
- その他(Microsoft Office) excel テーブル 4 2023/03/18 16:11
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
ListViewで、非表示列って作れますか?
Visual Basic(VBA)
-
vba Listviewでのチェックボックスのイベントを教えてください
Excel(エクセル)
-
ListViewで列を指定して表示させる方法
Excel(エクセル)
-
-
4
検索結果をListviewさせる方法
Visual Basic(VBA)
-
5
リストビューをスクロールさせるには
Visual Basic(VBA)
-
6
ユーザフォーム AfterUpdate処理について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サーバ時刻の取得
-
VB.NETで DataRow()を利用して...
-
count(*)で取得した値をJAVAの...
-
Flexgridで選択行の列の値を取...
-
データ数をカウントしたいのですが
-
現在時刻をミリ秒まで取得
-
JAVA 入れ子MAPの取得時の書き...
-
vbaで、オートシェイプ文字幅と...
-
利用者側のMACアドレスを取得し...
-
環境変数の取得
-
VBAでActiveDirectoryのユーザ...
-
ドロップダウンリストの初期表...
-
getParameter と getAttribut...
-
Yahoo! JAPANのID取得について
-
VBA:小数点以下の数字を取得で...
-
ListView 項目の選択/選択解除...
-
Spreadの選択行の取得について
-
Struts2 <s:select>タグの値取...
-
.NETで現在時刻を常に動作させ...
-
DateTimePicker
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
count(*)で取得した値をJAVAの...
-
ListView 項目の選択/選択解除...
-
データ数をカウントしたいのですが
-
VBA:小数点以下の数字を取得で...
-
VBAでActiveDirectoryのユーザ...
-
Flexgridで選択行の列の値を取...
-
like演算子内に変数って使えな...
-
ListViewで複数選択された項目...
-
getParameter と getAttribut...
-
JSP+Servletでのページングの常識
-
JavaScriptでWindowsログオンID...
-
利用者側のMACアドレスを取得し...
-
Spreadの選択行の取得について
-
Excel VBA でログインしてい...
-
コンボボックス表示文字列を取...
-
C言語におけるコンピュータ名・...
-
「Excel VBA」 Webクエリ マク...
-
VBScriptで数値にコンマを付け...
-
エクセルVBAで複数選択できるよ...
おすすめ情報