返回列表 上一主題 發帖

[發問] VBA 搜尋的問題

[發問] VBA 搜尋的問題

本帖最後由 sss1159 於 2015-11-6 11:31 編輯

HI,大家好

在網路上爬了一段時間,測了多種的做法還是沒找到理想的方式
在此詢問一下各位大大

有2個工作表
工作表1 = 存放各種資料的地方
工作表2 = 搜尋區

這邊需要2種方式:
1.
在工作表2 搜尋區 輸入要搜尋的資料【甲】
即可顯示 有關於【甲】的所有資料

2.
在工作表1 點選搜尋
會跳出彈窗 輸入【甲】
就會在工作表1 顯示所有關於 班級【甲】的資料

在點選 按鈕取消搜尋 即可恢復成原來的所有資料


在麻煩各位大大教導,謝謝

search.zip (10.61 KB)

抱歉,這週末不在家,很晚才回覆您
非常感謝 yen956 大大


另外想再請問
1.
工作表1 點選搜尋 甲
即可在此工作表 直接列出 班級甲的所有資料

再點選 取消搜尋
即可恢復原本未搜尋前的資料

2.
套用大大個方法
我目前卡住了....目前多了一個工作表3
在工作表2想搜尋限定範圍
搜尋 甲
A~D欄 會顯示工作表1 甲的搜尋內容
H~K欄 會顯示工作表3 甲的搜尋內容

3.
如果 搜尋按鈕找不到資料,要在哪打上 [抱歉,找不到資料] 的語法呢



麻煩請指教,萬分感謝

search.zip (24.08 KB)

TOP

啊啊啊><
小妹搞錯了...上一則回覆 是用另一個方法....

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sh1, sh2 As Object
    Dim sCel As Range
    Dim First1 As String
    Dim LastRow As Long
    Set sh1 = Sheets("工作表1")
    Set sh2 = Sheets("工作表2")
    If Intersect(Target, sh2.[I1]) Is Nothing Then Exit Sub
    If Target = "" Then Exit Sub
    sh2.Range("H4:K" & sh2.Rows.Count & "").ClearContents    '清除先前搜尋的資料"
    sh1.Activate
    With sh1
        Set sCel = .[A:B].Find(What:=Target, LookAt:=xlPart)
        If sCel Is Nothing Then
            MsgBox ("未找到你要搜尋的資料"), vbCritical
            Exit Sub
        End If
        First1 = sCel.Address                          '保留第一個搜尋到的位址
        Do
            LastRow = sh2.Cells(sh2.Rows.Count, 8).End(xlUp).Row + 1
            sCel.Resize(1, 4).Copy sh2.Cells(LastRow, 8)
            Set sCel = .[A:B].FindNext(sCel)           '尋找下一個
        Loop Until First1 = sCel.Address               '下一個的位置=第一個的位置(回到第一個的位置)
    End With
    sh2.Activate
End Sub

想請問這段該怎麼使用呢..不知道為甚麼沒有巨集


Set sCel = [A:A].Find(What:=inTxt, LookAt:=xlWhole)

這段該怎麼去抓另一個工作表呢?

TOP

准提部林 大大您好

〔工作表1〕
再點選 取消搜尋
即可恢復原本未搜尋前的資料

A:D欄即是原本資料,搜尋並未動到此部份,何來〔恢復原本未搜尋前的資料〕???


這方面是我描述的不好,在工作表1中,A:D欄 為資料區
當我點擊 搜尋-> 甲 會將資料塞選成 所有關於 班級甲的資料(會顯示在A:D欄)
當我查完班級甲的資料後,點選 取消搜尋 即可恢復原本未搜尋前的資料(一樣在A:D欄)

再麻煩指教了,萬分感謝:$

TOP

回復 8# 准提部林

實在是太感謝您了
想請教您這語法的意思是...看不太懂

1.
R = ActiveSheet.UsedRange.Rows.Count
If R > 3 Then Rows("4:" & R).Delete

這段是在 工作表2 算我表格前面留了多少列嗎?
如果我標題在行6 就改成 R>6 是這樣理解嗎?
後面的4是搜尋出來 資料顯示的起始欄位嗎?

2.
For Each xSht In Sheets(Array("工作表1", "工作表3"))
  Set xH = Range(Array("A4", "H4")(M))

如果 我還有 工作表4 工作表5
直接改成
For Each xSht In Sheets(Array("工作表1", "工作表3","工作表4", "工作表5"))
  Set xH = Range(Array("A4", "H4","O4", "U4")(M))
以此類推....??

3.
M = M + 1: Jm = 0
  With xSht
     For j = 4 To .Cells(Rows.Count, 1).End(xlUp).Row
       If InStr(.Cells(j, 1) & .Cells(j, 2), X) Then
         Jm = Jm + 1
         .Cells(j, 1).Resize(1, 4).Copy xH(Jm)
       End If


這段的4 要跟上面的
R > 3 Then Rows("4:" & R).Delete

一樣才能使用 是這樣吧?


再麻煩您指教下,非常感謝,努力學習中:$

TOP

回復 11# 准提部林

剛實際操作一遍,實在太厲害了!!!!
我後來在工作表1 新增了一個排序的功能(錄製巨集)
還沒塞選時 是能正常排序的
但我一但塞選時 再排序 EXCEL就當掉了

再麻煩您了 感謝感謝
附上語法

Sub 巨集3()
'
' 巨集3 巨集
'

'
    Range("E4:E10000").Select
    ActiveWorkbook.Worksheets("工作表1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("工作表1").Sort.SortFields.Add Key:=Range("E4:E10000"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("工作表1").Sort
        .SetRange Range("A3:E10000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("E4").Select
    Selection.End(xlDown).Select
End Sub

設1萬 是怕日後資料越來越多 XD"

TOP

回復 13# 准提部林

注意:篩選狀態時,若不先解除篩選,任何操作都可能造成無法彌補的錯誤(尤其是已執行了儲存結果)

再測試時,就當了好幾次XD"

加了那段後,就不會當了,但是塞選會被取消掉,請問有辦法塞選完,再排序塞選的資料嗎?

不好意思,一直麻煩您:dizzy:
附上檔案給您看

search.zip (28.2 KB)

TOP

回復 15# GBKEE

您好,使用了您的方法還是會跑出原本的資料
我附個示意圖=)

在麻煩了><

圖片 6.png (46.08 KB)

圖片 6.png

TOP

謝謝 兩位版主抽空回覆
學到了很多,疑問也都解決了,
我再試著練習看看,非常感謝

TOP

回復 17# GBKEE

馬上就有問題了....囧
由於上方註解需要多一行,變成標題欄在A4~E6
將 GBKEE大的語法稍做修正

Sub 篩選123()
    Dim X$
    X = Application.InputBox("請輸入篩選關鍵字")
    If X = "" Or X = "False" Then Exit Sub
    With Sheets("工作表3").[A4]  '
        .Parent.AutoFilterMode = False
        '篩選前也可所有資料 [新增日期]排序
        '.CurrentRegion.Sort Key1:=.Range("E2"), Order1:=xlAscending, Header:=xlYes
        .AutoFilter Field:=1, Criteria1:="*" & X & "*"
        If .End(xlDown).Row = Rows.Count Then MsgBox "找不到資料!!": Exit Sub
        '只對篩選後資料[新增日期]排序
        .CurrentRegion.Sort Key1:=.Range("C4"), Order1:=xlAscending, Header:=xlYes
    End With
End Sub

塞選後確出現標題也一併排序跑到最下面去了,導致版面亂了...
再麻煩了多次叨擾...

圖片 14.png (5.07 KB)

圖片 14.png

TOP

        靜思自在 : 人生最大的成就是從失敗中站起來。
返回列表 上一主題