Board logo

標題: [發問] 篩選資料問題 [打印本頁]

作者: blue2263    時間: 2016-7-1 06:58     標題: 篩選資料問題

請教高手大大
如何,將A工作表代碼清單,做為條件,在B 工作表篩選資料

[attach]24596[/attach]
作者: joey0415    時間: 2016-7-11 22:53

回復 1# blue2263

自己錄一下篩選就好!

例如:查2002中鋼,
如果查到2002(a欄),請將右方第三欄的(D欄)鋼鐵工業選取
以鋼鐵工業為篩選要素,將所選到的資料複製到你的要工作表後,再將第一張表取消篩選即可
作者: c_c_lai    時間: 2016-7-12 12:29

回復 1# blue2263
可參考
Autofilter 方法
作者: c_c_lai    時間: 2016-7-14 10:53

回復 1# blue2263
工作表篩選資料, 試試看!
以產業別、以及市場別等為範例來篩選資料。
[attach]24664[/attach]
[attach]24665[/attach]
[attach]24666[/attach]
作者: blue2263    時間: 2016-7-17 19:37

感謝C大,不過我想我提問問題,不夠詳細,G大誤解我的需求,
以下再詳述我的問題
比如我在(對手同產業工作表),代碼欄,篩選出1101相關的對手同產業家數(如下圖)
[attach]24683[/attach]
然後用上圖所篩選出的同業清單(共7家),在(選股報表工作表),一樣用篩選的方式找出這7家資料

之前也有用錄製巨集的方法如下程式碼,但不知如何才能將,(對手同產業工作表)找出的同業代碼資料,與下面程式碼結合
    ActiveSheet.Range("$A$2:$XFC$1602").AutoFilter Field:=1, Criteria1:=Array( _
        "1101", "1102", "1108", "1110"), Operator:=xlFilterValues
作者: blue2263    時間: 2016-7-17 19:48

PS:因我對手同產業,有再細分,所以無法直接用(選股報表工作表)的產業別找出相同結果
作者: blue2263    時間: 2016-7-27 21:12

不知是否有解?還請大大幫忙,感恩謝謝!!
作者: c_c_lai    時間: 2016-7-28 09:30

回復 7# blue2263
說真的,你從#5 ~ #7 間的描述,
我看的 "濛颯颯",你可否從頭到尾
將需求用圖示以及說明描述一次?
[attach]24761[/attach]
作者: blue2263    時間: 2016-7-28 21:13

本帖最後由 blue2263 於 2016-7-28 21:15 編輯

C大你好,不好意思,我表逹的不好,描述不夠清楚,我再描述清楚一點,謝謝
以下以操作步驟說明
步驟1,對手同產業工作表,(A欄)篩選1101資料->篩選結果,共7家同業資料(B欄)
[attach]24767[/attach]
步驟2.在選股報表工作表,用篩選的方式,以上圖7家篩選結果清單(B欄)做為條件,找出此7家廠商(如下圖)
[attach]24768[/attach]
步驟1為手動操作,步驟2希望用VBA的方式執行

不好意思,描述不夠清楚,浪費C大時間,下次提問問題會改進!!
謝謝!! C大熱心幫忙
作者: c_c_lai    時間: 2016-7-29 08:38

回復 9# blue2263
這是不是你要的結果?
[attach]24770[/attach]
[attach]24771[/attach]
[attach]24772[/attach]
作者: c_c_lai    時間: 2016-7-29 09:37

回復 9# blue2263
  1. Sub 選股與同產業()
  2.     Dim 代碼別 As String, 產業別 As Range
  3.    
  4.     代碼別 = InputBox("請輸入您欲篩選之股票代碼 (Stock No.)" & vbCrLf & "(例如:1101、1203、1234、或 1439 等) ", "基本資料")     '  彈出輸入視窗
  5.     If 代碼別 = "" Then Exit Sub
  6.    
  7.     With Sheets("對手同產業")
  8.         .AutoFilterMode = False                              '  取消自動篩選  (回復原始篩選前內容)
  9.         Set 產業別 = Sheets("對手同產業").[B:B].Find(代碼別, , , 1)
  10.         If Not 產業別 Is Nothing Then
  11.             .Range("A1").AutoFilter FIELD:=6, Criteria1:=產業別.Offset(, 4).Value '  自動篩選
  12.         End If
  13.     End With
  14.      
  15.     With Sheets("選股報表")
  16.         .AutoFilterMode = False                              '  取消自動篩選  (回復原始篩選前內容)
  17.         Set 產業別 = Sheets("選股報表").[A:A].Find(代碼別, , , 1)
  18.         If Not 產業別 Is Nothing Then
  19.             .Range("A1").AutoFilter FIELD:=4, Criteria1:=產業別.Offset(, 3).Value  '  自動篩選
  20.         End If
  21.     End With
  22. End Sub
複製代碼

作者: blue2263    時間: 2016-7-29 20:26

C大你好
我希望是用代碼來做篩選條件,同下圖
原因是,對手同產業工作表,資料有再細分,細分的意思是,
除了同產業,還有產品相關度較高的,會編到同組代碼
因此用產業別做為篩選條件,兩個工作表結果會不相同

不知是否有方法逹到
謝謝C大熱心幫忙!!
[attach]24776[/attach]
作者: c_c_lai    時間: 2016-7-30 10:14

回復 12# blue2263
你希望的結果
是這樣麼?
[attach]24779[/attach]
作者: blue2263    時間: 2016-8-1 21:07

回復 13# c_c_lai

回復c大,以水泥工業的產業別來看,會是我要的相同結果沒錯,但其它產業不會是相同結果,
請c大看下圖
以1301代碼篩選只有8家,如果以產業別篩選有288家
[attach]24807[/attach]
[attach]24808[/attach]
原因是,對手同產業工作表,資料有再細分,細分的意思是,
除了同產業,還有產品相關度較高的,會編到同組代碼
因此用產業別做為篩選條件,兩個工作表結果會不相同
作者: c_c_lai    時間: 2016-8-2 09:22

回復 14# blue2263
你的意思是否如此?
[attach]24813[/attach]
[attach]24814[/attach]
作者: blue2263    時間: 2016-8-2 19:19

回復 15# c_c_lai
回復C大
[attach]24818[/attach]
[attach]24819[/attach]
作者: blue2263    時間: 2016-8-8 20:16

回復 15# c_c_lai
謝謝!C大幫忙
作者: GBKEE    時間: 2016-8-14 08:10

回復 9# blue2263
步驟1為手動操作,步驟2希望用VBA的方式執行
步驟2的程式碼
  1. Option Explicit
  2. Sub Ex()
  3.     Dim i As Integer, Msg As String, D As Object, E As Variant, Rng As Range
  4.     With Sheets("對手同產業")
  5.         If .AutoFilterMode Then   '有使用自動篩選(AutoFilter)
  6.         'If .AutoFilterMode = True Then '有使用自動篩選(AutoFilter)
  7.            With .AutoFilter.Filters(1)
  8.                 '** Filter物件的集合,代表自動篩選範圍中的所有篩選
  9.                 '** On 屬性  如果指定的篩選已開啟,則為 True。唯讀 Boolean
  10.                 If .On Then Msg = Mid(.Criteria1, 2)   '**確定[代碼]篩選有指定條件
  11.             End With
  12.         End If
  13.         If Msg = "" Then
  14.             MsgBox .Name & " 代碼 沒指定 !!"
  15.         Else
  16.             Set D = CreateObject("SCRIPTING.DICTIONARY")            '**字典物件
  17.             With .Range("B:B").SpecialCells(xlCellTypeVisible)              '** 資料篩選後可見的儲存格
  18.                 For Each E In .Cells
  19.                    If E = "" Then Exit For                                                      '** 沒有資料終止迴圈
  20.                    If E.Row > 1 Then D(E.Value) = ""                                    '** 字典物件中加入 代碼
  21.                 Next
  22.             End With
  23.             With Sheets("選股報表")
  24.                 If .AutoFilterMode Then .AutoFilterMode = False                  '**有使用自動篩選(AutoFilter)
  25.                 .Cells.EntireRow.Hidden = False                                           '** 取消所有列的隱藏
  26.                 Set Rng = .Rows("3:" & .Range("A1").End(xlDown).Row)  '** 設定資料的範圍
  27.                 Rng.EntireRow.Hidden = True                                             '**  範圍的列隱藏
  28.                 For Each E In Rng.Rows                                                      ' ** 範圍列 的迴圈
  29.                     If D.exists(E.Cells(1, 1).Value) Then                               '**字典物件的key值有 代碼
  30.                         E.EntireRow.Hidden = False                                        '** 取消列的隱藏
  31.                         D.Remove (E.Cells(1, 1).Value)                                  '**Remove 方法 把成員從 Collection 物件中移除。
  32.                         If D.Count = 0 Then Exit For                                       ' '** Count 物件中成員的總數
  33.                     End If
  34.                 Next
  35.             End With
  36.             MsgBox Msg & " 選股報表 Ok"
  37.         End If
  38.     End With
  39. End Sub
複製代碼

作者: blue2263    時間: 2016-8-16 21:30

回復 18# GBKEE
測試ok :D
萬分感謝!!G大幫忙解答




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)