iam_1_001 發問時間: 電腦與網際網路軟體 · 9 年前

VBA:EXCEL的篩選與COPY

如題:

將Sheet1篩選_的內容_COPY_到Sheet2

[要求]:當按下按鈕_

1)只針對第3欄位有篩選時_才執行 COPY 作業.

1.1:若是第3欄沒有篩選=>無論第1/2欄已經篩選或是全部沒有篩選_

跳出訊息_指示第3欄位沒有篩選.

1.2:只要第3欄有篩選_篩選內容(含資料/空格/非空格)_則執行COPY

http://www.funp.net/794616

請各位大大幫忙.

已更新項目:

補充說明:

篩選內容_以第3欄位的點選資料為依據.

EX_

第3欄_點◆_出現3筆資料_在點第2欄_A1◆_則工作表出現1筆資料.

若依據工作表直接COPY_就是1筆資料_A1◆

但實際要COPY的資料是3筆資料_A1◆_A8◆_A9◆

同理_

第3欄_點非空格_出現16筆資料_在點第2欄_A1◆_則工作表出現1筆資料.

若依據工作表直接COPY_就是1筆資料_A1◆

但實際要COPY的資料是16筆非空格資料.

2 個已更新項目:

補充說明二:

若先點第2欄_A1◆_則工作表出現1筆資料.

如第3欄未點選=>出現提示訊息.

第3欄_點◆

實際要COPY的資料是3筆資料_A1◆_A8◆_A9◆

3 個已更新項目:

如還需要補充說明_請各位大大_再提出.

4 個已更新項目:

補充說明三:

在設一個按鈕_

無論工作表是否有篩選_執行COPY全部的資料.

9 個解答

評分
  • 9 年前
    最佳解答

    <範例檔>

    http://www.funp.net/702606

    2012-04-17 11:58:19 補充:

    關於〔指定篩選條件〕的複製,可參考:

    <請問VBA專家.EXCEL篩選資料複製至另一工作表>

    http://tw.knowledge.yahoo.com/question/question?qi...

    2012-04-17 15:29:52 補充:

    此題也是應版大來信而來!

    在進行〔多欄.多條件〕篩選之後,再將資料轉出,

    這方式在資料表的應用上,其實是非常普遍的需求!

    而判斷某欄是否在篩選組合中的VBA指令,是本題的重點。

    2012-04-17 18:47:12 補充:

    ~~在不使用已經篩選好的工作表做設定

    不在篩選狀態,如何判斷第3欄是已做篩選?

    或可再詳細描述!

    如果解答不符需求,貼答就作罷了!

    2012-04-18 10:36:00 補充:

    <範例檔>改1版:

    http://www.funp.net/55481

    已了解iam大的意思!確實很有意思!

    假如允許對篩選範圍做更動,則:

    將其他有執行篩選的欄位解除篩選,

    只剩第3欄的篩選,再複製,即可達到目的,

    以一般使用者而言,此方法最簡單,實用性及應用性也較廣泛!

    就先提供此法,再想想是否有其它方式!

    2012-04-18 16:58:32 補充:

    <範例檔>改2版:

    http://www.funp.net/718963

    本以為加點判斷即可!

    但在〔等於〕〔不等於〕,雙條件篩選的〔且〕.〔或〕週旋,

    程式碼就加了一堆判斷!

    目前僅能以此題的資料型態處理,請測看看吧!

    了解版大的用意,請大家也耐心跟著看,應可學到更多,

    尤其是〔東邪.大師〕的功力!

    2012-04-18 17:46:31 補充:

    致:東邪大師

    若以2003版為準即可吧!

    雙條件已夠繁複的,寫一半有點想放棄的感覺,

    何況我還在用2000版,難加難!

    2012-04-18 18:48:06 補充:

    iam大:

    不知045改2版測得如何?

    很多幾乎是第一次嚐試的程式碼,

    硬架上馬,但也因此又多學了幾個用法,

    看您也是VBA行家,若有指教不用客氣!

    此題,

    原則上若〔東邪.大師〕能費心完成需求,請其上答為本然,

    是我特地邀請來參贊解法的!

    2012-04-19 11:52:45 補充:

    EXCEL VBA.依〔指定欄位〕的〔篩選條件值〕複製至另一工作表

                           <.准提部林.>

    -------------------------------

    範例檔簡介:

    ■主要需求:

     在不變動原〔篩選狀態〕下,只複製〔指定欄位〕的篩選資料,例如:

     1.C欄以〔不等於:"◆"〕〔且〕〔不等於:"★"〕,篩選出16筆。

     2.B欄再以〔等於:"空"〕篩選,此時資料只剩4筆。

     3.A欄則以〔大於:10〕篩選,最後資料就只剩2筆。

     當執行程式時,只將符合C欄篩選條件的〔列資料〕複製,共16筆。

      

    ■程式碼(有簡略部份):相關〔註解〕請參考範例檔

     Sub 複製指定篩選欄()

     xRow = ActiveSheet.UsedRange.Rows.Count

     If xRow < 2 Then MsgBox "※第二列以下無資料! ", 0 + 16: Exit Sub

     With ActiveSheet

       With .AutoFilter.Filters(3)

          If .On = False Then MsgBox "※C欄未執行篩選! ": Exit Sub

          xG1 = .Criteria1

          xH1 = Left(xG1, 1)

          If xH1 <> "=" Then xH1 = Left(xG1, 2)

          If xH1 <> "=" And xH1 <> "<>" Then

           MsgBox "※篩選條件只限〔等於.不等於.非空格〕! ": Exit Sub

          End If

          xG1 = Right(xG1, Len(xG1) - Len(xH1))

          xG2 = xG1: xH2 = xH1

          If .Operator Then

            OpChk = .Operator

            xG2 = .Criteria2

            xH2 = Left(xG2, 1)

            If xH2 <> "=" Then xH2 = Left(xG2, 2)

            If xH2 <> "=" And xH2 <> "<>" Then

             MsgBox "※篩選條件只限〔等於.不等於.非空格〕! ": Exit Sub

            End If

            xG2 = Right(xG2, Len(xG2) - Len(xH2))

          End If

       End With

     End With

     [Sheet2!A2:C65536].Clear

     For j = 2 To xRow

       Set xR = Range("A" & j): xChk = 0: xChk1 = 0: xChk2 = 0

       If xG1 = "<>" Then If xR(1, 3) <> "" Then xChk = 2: GoTo 1001

       If xH1 = "=" And xR(1, 3) = xG1 Then xChk1 = 1

       If xH1 = "<>" And xR(1, 3) <> xG1 Then xChk1 = 1

       If xH2 = "=" And xR(1, 3) = xG2 Then xChk2 = 1

       If xH2 = "<>" And xR(1, 3) <> xG2 Then xChk2 = 1

       If OpChk = 1 Then xChk = xChk1 + xChk2: GoTo 1001

       xChk = xChk1 + xChk2 + 1

     1001:

       If xChk >= 2 Then

         Jm = Jm + 1

         xR.Resize(1, 3).Copy [Sheet2!A2].Cells(Jm, 1)

       End If

     Next j

     End Sub

     

    ■說明:

     〔東邪無弓.大師〕提供另一方案,

     下載點,請參考:意見區028.041 

    -------------------------------

    <範例檔>:

    http://www.funp.net/718963

     

    <範例檔2>複製〔現有篩選狀態〕資料:

    http://www.funp.net/702606

    -------------------------------

  • Evan
    Lv 5
    9 年前

    版大:

    第100名的機會留給你,記得好好把握噢!

    http://tw.knowledge.yahoo.com/question/article-rev...

    ~ ~ ~ 我是路過 ~ ~ ~ 來亂的 ~.~.~ 快跑!!

    2012-04-19 09:18:05 補充:

    版大:依末學之見應讓回答欄,有美麗清朗的答覆空間。

    ~ ~ ~ 我是路過 ~ ~ ~ 來亂的 ~.~.~ 快跑!!

  • 9 年前

    今天有點冷

    看了半天

    真是好玩

    版主需求應該得到了

    還要無限上綱

  • 9 年前

    不知版主是否要更功能化的做法?

    2012-04-17 22:23:11 補充:

    1.請試用看看,依意見001,暫時鎖碼,待定案後,再酌情解除鎖碼。

    2.擷取篩選結果至目的工作表的模式,可自訂是否要 Append模式。

    下載URL:

    https://skydrive.live.com/view.aspx?cid=B456A2CCE3...

    2012-04-17 22:36:01 補充:

    修正下載URL:

    https://skydrive.live.com/?cid=b456a2cce32a37bb#ci...

    2012-04-17 23:00:50 補充:

    謝謝妙地大師的意見,

    但那樣做太累贅了,有畫蛇添足之感。

    資料庫操作的基本認知:篩選全部,視同未篩選。應是你測試未周全。

    2012-04-18 00:08:59 補充:

    妙大在意見020提及:沒篩選C欄=全部未選啦,

    針對這點,個人難以苟同。

    以本例三欄的篩選關係是 AND,

    若妙大的見解成立,則當C欄沒篩選時,三欄的邏輯必為FALSE,

    勢必造成無任一筆符合條件,

    由上論斷,妙大之見解顯與資料庫運作通例不合。

    因此,

    沒篩選應視為「該欄不參與條件運算」,亦即與「選擇全部」同義。

    2012-04-18 00:16:03 補充:

    另外建議妙大把題目內文所列的限制條件好好研讀一下,否則,再講數日也難有交集。

    === C欄是篩選的 master key ===

    2012-04-18 01:04:21 補充:

    >>篩選的第一列的確令人瘋狂,

    未必吧!

    從前一類似題到這一題,這點都沒有令人瘋狂的道理。

    依個人經驗,那根本就不成問題啊!

    有此歧異,可能是「看問題的角度」和「處理的方式」不同所致吧!

    2012-04-18 10:25:29 補充:

    概依依版主補充說明之意旨修改,修正版URL如下:

    https://skydrive.live.com/?cid=b456a2cce32a37bb#ci...

    另,解決此類問題,根本不用管「篩選的首筆資料是否在第一列」!

    管它反是贅餘!

    風和日麗,要去應酬,若未醉,今晚再回來看看。

    2012-04-18 10:43:43 補充:

    的確,空格和非空格的問題是小疏忽,不難解決。

    但出門在即,今晚再修。

    2012-04-18 16:16:01 補充:

    應酬提早結束,返家後花了半分鐘修了一下,

    小測數回,應已符合版主截至目前為止的需求。

    下載點未變:

    https://skydrive.live.com/?cid=b456a2cce32a37bb#ci...

    2012-04-18 16:19:06 補充:

    版主的補充說明三:

    再設一個按鈕_

    無論工作表是否有篩選_執行COPY全部的資料.

    貼完才看到,小CASE,稍後再修。

    2012-04-18 16:44:34 補充:

    版主補充說明三 的需求已加入。

    下載點不變

    ======

    程式模組化,彈性化,對程式的維護有正面助益。

    像這樣的小修改,快則數秒,多則數分便可搞定。

    2012-04-18 17:15:48 補充:

    初始,本想把雙條件篩選也併入考量,

    但想到 EXCEL2007 是支援多條件的,

    其物件屬性依常理推斷可能會有些差異,(臆測,未查證)

    若貿然處理,衡量其隱含錯誤之機率可能蠻大的,

    且因非本題原旨,便作罷不予處理。

    但完全棄之不顧,似也不妥,

    山不轉路轉,替代方案油然而生,

    即「Append 模式」的引入,便可變相達到多條件篩選的目的了。

    這便是俺初始便規劃「Append 模式」的用意。

    2012-04-18 17:22:57 補充:

    只是「Append 模式」並不周全,

    僅能模擬「OR」的情境,是其不足之處。

    或許存在著權變之計,只是目前尚無心去細思。

    (事實上是不想去思索)

    2012-04-18 20:52:03 補充:

    首先感謝准提大的美意,

    俺心領了,但俺志不在答。

    ======

    既然 EXCEL2003 至多僅是雙條件,屬固定結構,不難解決。

    想想准提大大也講得沒錯,所以,乾脆把程式索性改為「支援雙條件篩選」。

    俺已一天多沒下圍棋了,要去補下回來!

    應是最終版了。

    下載點依舊。

    2012-04-19 11:33:39 補充:

    俺已表明志不在答,

    且既以簡例實證版主心中之惑係可行之策,

    實已足矣!

    === 荒野林漠,禿鷹環伺,縱非險峻,亦非祥福。 ===

    最近知識+自行其樂者大行其道,殊屬異象。

    准提大的「了了偈」,俺頗表認同,

    以其智慧應可體會此象,並好整以對。

  • 您覺得這個回答如何?您可以登入為回答投票。
  • 准提部林 大:

    前例有試過,

    本例有測過,

    相當不錯,

    請版主好好使用,

    不要辜負大家的冀望。

    2012-04-17 22:47:19 補充:

    測了一下東大的,

    第3欄沒有篩選,

    似乎沒產生警示視窗,

    版主的重點是第三欄喔,

    那可以多加個指令,

    先比對篩選的資料,先做檢查,

    檢查到才往下執行,

    只是多一道無聊的程序,

    可是版主可能很需要吧。

    2012-04-17 23:28:01 補充:

    東大的意思我懂,

    但是全部未篩選只是其中ㄓㄧ,

    重點是第三列,

    前題又是篩選,

    沒篩選C欄=全部未選啦,

    光這樣還是不夠的呢,

    等准提的PO上再來看看嚕~~~~~~~~~

    2012-04-17 23:59:06 補充:

    版主這麼禮貌喔,

    真不簡單,

    這題我也很喜歡,讚~~~~~

    篩選的第一列的確令人瘋狂,

    很難去研判的,想必連東大也瘋狂,

    就看准提菩薩的大智慧嚕~晚安~~~

    2012-04-18 09:33:48 補充:

    諸VB妙理非關文字,東大的專長是VBA+C..

    假如東大能夠滿足版主的話,俺就服了你。

    准提曾經對篩選表達過意見,PO給大家參考一下:

    --說明--

    ....〔篩選資料〕,不須考慮其篩選的首筆資料是否在第一列,

    也不須考慮其篩選的尾筆資料是否在最後一列,......

    2012-04-18 12:11:14 補充:

    版大滿意就好了,

    准提不是蓋的吧,

    比馬蓋先還厲害。

    風和日麗,要去應酬[看電影=超級戰艦+家聚],若未累,今晚再回來看

    看。

    2012-04-18 12:12:58 補充:

    請去看看准大的超級魅力,

    又快破百了~~~

    http://tw.knowledge.yahoo.com/question/article-rev...

    2012-04-18 12:32:37 補充:

    版主啊~~~~~

    我說的破百那題,

    好像沒你的大名,

    應該去捧個場吧,

    這是基本素養囉,

    類似的題,您應該看得懂得。

    2012-04-18 13:42:43 補充:

    太厲害了,

    版大可以自我控制#100名,

    真是了不你喔~~~~~

    iam_1_001 ( 研究生 3 級 ) 2012-04-18 13:25:41 正面

    2012-04-18 13:56:40 補充:

    准大的程式碼重要關鍵;;;

    If .FilterMode = False Then MsgBox "※尚未執行篩選! ", 0 + 16: Exit Sub

    If .AutoFilter.Filters(3).On = False Then MsgBox "※C欄非篩選項目! ", 0 + 16: Exit Sub

    要出門囉,88 ~~~

  • 版主的發問區內容都看不見

    但是之前有看了一下

    這題我們剛剛才討論的

    版主可以趕快試試

    不必遠求

  • 9 年前

    版主好:

    剛好路過看到喔.

    您的發問跟我很類似喔.

    是准提大幫我回答的.

    使用非常棒.

    找他就對啦.

    不過他都是先用意見來讓你試試語發問.

    滿意了再請他上台發表.

    很謙虛的一位超高知識家.

    2012-04-17 21:13:21 補充:

    版大這句話好奇怪.........是否可以像_ACCESS_讀取_第3欄的篩選資料_然後設定紀錄集讀到St2.........

    不是不要用篩選的.為何還有這句話呢.『第3欄的篩選資料』

    而且您上傳的檔名是:篩選不同項目.xls EXCEL內也是需要篩選+複製啊.

    ACCESS我略懂一些.

    你應該製作一張圖.不要用文字.清楚的表達出來.還是說您的需求已經獲得了[當作沒說喔.容易誤解啊].

    叫准提大大情何以堪.出題要出的很清楚.不清楚請另外PO題發問.人家都把你要的答案都解出來了.然後又補充一些需求.跟我以前的發問很類似喔.這是出題者易犯的毛病.要是東大就把你要的解答幹掉了.

    2012-04-17 21:44:57 補充:

    版主:

    看了你的需求.都沒出現ACCESS字樣.哪來的ACCESS需求呢.

    ACCESS 與 EXCEL 資料是可經由複製.貼上 或是匯出入

    來相互使用.2個檔也是可用VB來分別處理的.可是VB差距很大喔.

    所以在不同的基礎點了.這個題有點超出需求了.

    敢快澄清吧.

    爽快一點.感覺版主慢吞吞的.不知在忙甚麼.

    皇帝不急急死太監.呵~~~~~~~~~~~

    不要理他了.等等就會現原形了....不過我會緊盯喔.千萬不要動手腳~~~~

    2012-04-18 14:07:48 補充:

    版主的032意見.

    好像有點矛盾.

    篩選應該是取最小的部份吧.

    1.先篩C欄=16

    2.再篩選B欄=1

    交集=1

    這正常啊.

    不應該再有不合理的需求.

    這題應該給准提最佳解答.

    那個怪需求自己另外PO題看有沒人給你解.

    似乎有點離譜了.

    見好就收吧.等准大不爽時.疑似你就死定了?[法律說:用疑似+?不構成毀謗喔.SORRY].

  • 9 年前

    先謝謝大大的PO文.

    1)是否可以直接將做法_具體公佈.

    2)或是直接使用檔案_設定為可以執行的結果.(可以鎖碼_畢竟_這是關於權限)

    因為做不出來.想了解此種設定是否可以執行.

    PS:我知道使用表單_作篩選的工具_但我想直接在工作表設定.

    2012-04-17 17:45:17 補充:

    1:謝謝_各位大大的意見.

    2:謝謝_淮大提供_EXL_的作法.

    3:其實我要的是_在不使用已經篩選好的工作表做設定.

    我想了解EXCEL_

    是否可以像_ACCESS_讀取_第3欄的篩選資料_然後設定紀錄集讀到St2.

    謝謝_淮大的答覆.

    請將做法_po上.以便結案.

    2012-04-17 23:06:42 補充:

    樓上大大:

    1)謝謝熱忱提出意見.

    問題_已經獲得解決方式._請_淮大_將做法PO上.

    補充發問的原因:

    2)ACCESS_有COMBOX_篩選資料_在新增_的語法.

    因為對EXL_不很熟悉_所以才提出_第三欄_是否可以如ACS直接讀出COMBOX的篩選資料值功能.

    2012-04-17 23:10:06 補充:

    謝謝東大_提供的作法.

    2012-04-17 23:51:52 補充:

    非常謝謝妙地大大的包容與細心的探討問題.

    2012-04-18 08:30:43 補充:

    淮大/東大好:

    未能具體說明題意.造成二位困擾.甚感抱歉.

    現在已經有補充說明.希望二位大大能幫忙.

    2012-04-18 10:37:08 補充:

    1)先謝謝東大幫人的熱忱.

    2)測試結果:

    一切合乎條件_除了=>空格與非空格2項.說明如下.

    第3欄_點非空格_出現16筆資料_在點第2欄_A1◆_工作表出現1筆資料.

    實際要COPY的資料是16筆非空格資料. 但結果是空白.有勞東大撥空幫忙.

    2012-04-18 10:54:43 補充:

    1)謝謝淮大的幫忙.

    2)測試結果:

    一切合乎條件_

    一個要求:.

    第3欄_點非空格_出現16筆資料_在點第2欄_A1◆_工作表出現1筆資料.

    執行後_SHEET1的資料仍是只有1筆A1◆_資料的畫面.(非16筆資料)

    請淮大幫忙.

    2012-04-18 13:27:49 補充:

    謝謝樓上2位大大_剛好登上100

    祝安

    2012-04-18 17:46:51 補充:

    東大/淮大/妙大好:

    諸位先進_替網友解決問題的熱忱_讚!!

    請先進_將做法PO到答覆欄.以便結案.

    祝諸位先進 順安

    2012-04-18 23:02:31 補充:

    東大/淮大好:

    二位先進_解決問題的方式都測試OK_讚!!(獲益匪淺)

    二位只為幫人解惑_志不在獲選...讚!!

    但還是請先進_將做法PO到答覆欄.以便結案.

    並且可讓其他網友從二位的解答模式學習.

    祝二位先進 順安

  • Lv 6
    9 年前

    可以參考以下"參考資料"內的網址,他們是用EXCEL的VBA寫資料的.

還有問題?馬上發問,尋求解答。