返回列表 上一主題 發帖

[發問] vba的篩選功能 (取消部分篩選)

本帖最後由 wei9133 於 2020-10-7 20:00 編輯

回復 6# ikboy

不對,我直接講我要的結果
其實原本就是要把所有相同的行標示出來,然後加總起來
我沒有要拆開他的意思
每一行都是一個對戰紀錄(在附件CZ行有星象)
所以要比對的其實是,是否有A~CV都長得一樣的列(需要包含CZ),因為不同星象也會有A~CV想的一樣的狀態出現
不過因為還有CW~CY是不會相同的值,所以無法直接比對
現在我是手動把A~AW的挑選出來後,再去一個一個把AY~CU篩選出來,一樣的合併(連星象都一樣的部分),然後勝場+1
所以想要我在固定A~AW篩選條件的狀況下,去重置AY~CU的篩選條件


還是看不懂的麻煩移駕影片
https://sendvid.com/kvj69nqz
超連弄不出來,請自己複製網址到網址列吧
實際是就是要最後幾秒那個動作而已
只是不只點的那幾個,而是後方全部都點成全部

TOP

本帖最後由 軒云熊 於 2020-10-7 20:12 編輯

回復 10# wei9133

A~L 原本的資料格式要保留嗎?  還是只保留篩選後的?
M~Z 不做任何動作?
這樣的話 A~L 的格式資料會改變 無法復原 因為是 先刪除   A~L 的資料 在貼上篩選後的資料  如果是在同一個活頁簿裡
或著 直接新增一個 新的 工作表在把結果貼上 ?
我看一下 影片好了 >"<

TOP

回復 12# 軒云熊
你好
在最初的需求中我沒有要刪任何資料
我是要比對是否有相同的資料(列)
才要固定[左|右]一邊的已篩選條件


應該怎麼說才能讓你理解呢0.0a

A~L 原本的資料格式要保留嗎?  還是只保留篩選後的?
M~Z 不做任何動作?


A~L已經篩選過了,都不要動它
M~Z每一個都把篩選選單拉開來點"全部"
Microsoft_Excel_-_對戰統計.xls-2020-10-08-00-41-45.png

我覺得我們溝通的問題應該出在這個"全部"上面...

感謝你花時間幫我想解決方案 m(_ _)m

TOP

回復 13# wei9133

樓主需求的篩選模式在同一sheet是無法執行的(ikboy已經說明了)
如果只是要計算各星象勝率/敗局建議可用比對的
只是無法看出這2各區塊(A~AW)內資料的相關性&勝率/敗局計算方式??

TOP

本帖最後由 軒云熊 於 2020-10-8 12:31 編輯

回復 13# wei9133
這不是用篩選 而是用比對的方式  
你看一下是不是這樣?
  1. Public Sub 比對練習()
  2.     Application.ScreenUpdating = False
  3.     Dim A, B, i, k
  4.     k = 1
  5.     E = 345
  6.     For X = 1 To Cells(1, 1).End(xlDown).Row
  7.         A = Range(Cells(X, 49), Cells(X, 1))
  8.         B = Range(Cells(X, 99), Cells(X, 51))
  9.         
  10.         For i = 1 To UBound(B, 2)
  11.         If A(1, k) = "" Then A(1, k) = "-"
  12.         If B(1, i) = "" Then B(1, i) = "-"
  13.              f = f & A(1, k)
  14.              r = r & B(1, i)
  15.             If k <= UBound(A, 2) Then k = k + 1
  16.         Next i
  17.         
  18.         k = 1
  19.         
  20.         If f = r Then
  21.            Cells(E, 1).Resize(1, 104) = Cells(X, 1).Resize(1, 104).Value
  22.            E = E + 1
  23.         End If
  24.         
  25.         f = "": r = ""
  26.     Next X
  27.     Application.ScreenUpdating = True
  28. End Sub
複製代碼

TOP

本帖最後由 軒云熊 於 2020-10-8 23:21 編輯

回復 13# wei9133

這是修改過的  順序是 1~49 與 51~99 相同  勝率=1 -> 錄製的排序->錄製的刪除重複
錄製的刪除重複有點怪怪的 不過還是可以用 我找不到原因 刪除後 格式還是會存在但數值文字已被刪除
修改範圍後 刪除的列位不會往上補 >"< 後來又改回來...不知道為甚麼..呵
影片看起來是這樣 不知道是不是你要的 我也是順便練習
  
javascript:;

zz1008.rar (53.2 KB)

TOP

回復 14# jcchiang

其實我實際上就是比對,不過是人工比對
所以才會想要固定一邊的篩選後條件,將另外半邊全部點回原始未被篩選的狀態
這樣方便看另一邊是否有一樣的組合
這張圖表裡面顯示不出敗局,因為敗局是紀錄的時候發現輸了手動填上的
所以實際比對目標應該是
A~CV都長得一模一樣且CZ也一樣的部分
A~CV分別應對勝敗方的出場人物,而CZ是星象(這個參數雙方共用)
A~AW是敗方組合,AY~CU是敗方組合
AX跟CV這兩格出戰人數是勝敗方的出戰人數,以確保未統計錯誤
(正常為5,若錯了有用格式化標出以發現輸入錯誤)

目前我人工統計的流程是
先固定左邊的篩選條件,這樣篩選出來的敗方角色就被固定了 (反之就是固定勝方篩選條件再去挑選敗方角色)
再從右邊挑選條件篩選,發現兩條長的一模一樣的(A~CV & CZ),確認一下備註(CX)的顏色階級
(有可能A~CV都一樣但ZC是不同的)

(現在看起來短是因為隱藏了中間的部分)
然後把這幾條一樣的勝場(CW)敗場(CY)加起來填到要留下的那一條的勝場(CW)敗場(CY)欄位
(這個時候我會看一下備註決定要留哪一條)
然後把留下之外的其他條刪除。

TOP

回復 16# 軒云熊
我其實也沒看懂你的東西,只有一個活頁簿的東西怎麼變成兩個了
而且我執行它還報錯了



我要比對的始終在一個活頁簿裡
目前是人工挑選A~CV都長得一模一樣且CZ也一樣的部分
然後加總敗場跟勝場數填入其中一列的該格中留存
剩下刪除

TOP

本帖最後由 wei9133 於 2020-10-9 01:16 編輯

回復 17# wei9133

我把我具體的操作錄成影片了,看一下或許能懂?

https://sendvid.com/suu270r2

其中整欄直接篩選成V或W的部分因為我已經錄成巨集所以沒有去拉下拉式選單
  1. Sub 篩選為V() '^U
  2. Dim i As Integer
  3. i = ActiveCell.Column '獲取欄位值
  4. Cells(1, i).Select
  5.     Selection.AutoFilter Field:=i, Criteria1:="V"
  6.     '將該格篩選為"V"
  7. End Sub
  8. Sub 篩選為W() '^I
  9. Dim i As Integer
  10. i = ActiveCell.Column '獲取欄位值
  11. Cells(1, i).Select
  12.     Selection.AutoFilter Field:=i, Criteria1:="W"
  13.     '將該格篩選為"W"
  14. End Sub
  15. Sub 篩選為空格() '^B
  16. Dim i As Integer
  17. i = ActiveCell.Column '獲取欄位值
  18. Cells(1, i).Select
  19.     Selection.AutoFilter Field:=i, Criteria1:="="
  20.     '將該格篩選為"空格"
  21. End Sub
  22. Sub 篩選為非空格() 'O
  23. Dim i As Integer
  24. i = ActiveCell.Column '獲取欄位值
  25. Cells(1, i).Select
  26.     Selection.AutoFilter Field:=i, Criteria1:="<>"
  27.     '將該格篩選為"非空格"
  28. End Sub

  29. Sub 篩選為全選() '^+Q
  30. Dim i As Integer
  31. i = ActiveCell.Column '獲取欄位值
  32. Cells(1, i).Select
  33.     Selection.AutoFilter Field:=i ' Criteria1:="<>" ,看起來沒有給後面這串指定值就是全部了
  34.     '將該格篩選為"全部"
  35. End Sub
複製代碼
一開始我需要的功能需求其實是這個
在我選完某一邊之後,把另一邊全部由篩選下拉式選單選回"全選"

https://sendvid.com/3ifimegq

所以才會出現這種東西
  1. sub 篩選後端  ()
  2. Sub 篩選後端()
  3. Dim var_min, var_max, i, j, s As Integer
  4. var_min = 51  '後半段起
  5. var_max = 99  '後半段迄
  6. For j = var_min To var_max
  7. j = j + 1
  8. Cells(1, j).Select
  9. Selection.AutoFilter Field:=j
  10. Next j
  11. End Sub
複製代碼
但是這組代碼好像沒用,所以才會來問

TOP

本帖最後由 軒云熊 於 2020-10-9 10:06 編輯

回復 19# wei9133

你要先把 工作表2 刪除 再新增一個 工作表2在執行     工作表2 是複製的內容 我沒有動工作表1的內容  執行 Module1
  1. Public Sub 多列比對練習()
  2.     Sheets(2).Select
  3.     Rows("2:2").Select
  4.     ActiveWindow.FreezePanes = False '關閉凍結視窗
  5.     Application.ScreenUpdating = False
  6.     Call 巨集1 '錄製的排序
  7.     k = 1

  8.     For X = Cells(1, 1).End(xlDown).Row To 2 Step -1
  9.         A = Range(Cells(X, 49), Cells(X, 1)) '把1~49內容 放到陣列
  10.         B = Range(Cells(X, 99), Cells(X, 51)) '把51~99內容 放到陣列
  11.         
  12.         For I = 1 To UBound(B, 2) '串聯 "-" 號方便比對
  13.             If A(1, k) = "" Then A(1, k) = "-"
  14.             If B(1, I) = "" Then B(1, I) = "-"
  15.             f = f & A(1, k)
  16.             r = r & B(1, I)
  17.             If k <= UBound(A, 2) Then k = k + 1
  18.         Next I
  19.         
  20.         k = 1
  21.         
  22.         If f = r And f <> "-" Then '若1~49 與 51~99 相同 就在 勝率欄位 輸入"1"並反黃色
  23.             Cells(X, 101) = "1"
  24.             Cells(X, 101).Interior.Color = RGB(255, 255, 0)
  25.         End If
  26.         
  27.         f = "": r = ""
  28.     Next X

  29.     Call 巨集2 '錄製的刪除重複
  30.     Application.ScreenUpdating = True
  31.     Rows("2:2").Select
  32.     ActiveWindow.FreezePanes = True  '開啟凍結視窗


  33. End Sub
複製代碼

TOP

        靜思自在 : 要批評別人時,先想想自己是否完美無缺。
返回列表 上一主題