EXCEL – AutoFilter [排序與篩選] [文字篩選] [包含] 後查不到正確的存儲格範圍


https://wp.me/ph3BR-2eW

 

以下的那個方法一直沿用, 好像沒啥問題, 目的是找出 EXCEL 資料表裡面儲存資料的最大的範圍數值, 例如以前寫的 EXCEL – 如何將數字轉變成文字


'先查有資料的範圍, 得到最大的行,列號, 計算有多少格資料要處理
最大的列號x = Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
最大的行號y = Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row

MsgBox "最大的行號y: " & 最大的行號y & " 最大的列號x: " & 最大的列號x

 

可是今天偶然發現的一個 BUG, 看不出來原因, 反正有問題, 仔細看了, 原來跟使用 AutoFilter 多重篩選有關連

如果篩選用自訂文字來做但是沒有對應結果, 只顯示第一欄的話, 再套用上面的那個查詢, 結果只發現 1列 X 1欄, 並不正確.

 

換成下面這個寫法, 才能解決問題


''' win10, excel 2007

Sub modified_find_range()

With ThisWorkbook.ActiveSheet

'先查有資料的範圍, 得到最大的行,列號, 計算有多少格資料要處理

''' xiaolaba
''' 方法1
' 2018-JAN-28, 有條件 [文字篩選][包含] 後, 查詢行列總數的結果不對, x 永遠是 1
最大的列號x_1 = Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
最大的行號y_1 = Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row

''' 方法2
''' AutoFilter 有條件 [文字篩選][包含] 後, 查詢行列總數的結果正確, 不受影響
最大的行號y_2 = Cells.Find(What:="*", _
After:=Range("A1"), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row

最大的列號x_2 = Cells.Find(What:="*", _
After:=Range("A1"), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column

MsgBox "方法 1 最大的行號y =" & 最大的行號y_1 & ", 最大的列號x =" & 最大的列號x_1 & vbCrLf & _
"方法 2 最大的行號y =" & 最大的行號y_2 & ", 最大的列號x =" & 最大的列號x_2

End With

End Sub

 

實驗的結果,

無 [篩選], 兩個方法都對

 

選擇性 [篩選], 兩個方法都對

 

自訂[文字篩選後] ,不論篩選結果為何, 方法1無法得到正確的列號, 明明有8列, 卻顯示1

 

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.