Board logo

標題: [發問] 關於 Find用法 [打印本頁]

作者: Helain    時間: 2011-11-8 13:18     標題: 請問 VBA "Find" 用法

我想問Find的用法,
有先設定profit 的range

  A= Profit.Fine(5.5555,  , xl value,2).Row
想要在profit 找5.5555 這個值, 然後讀取該欄位的 Row address

問題一: xlvalue後面那一項(2)是指收尋得小數點位數嗎?
      1.是5.5555他是以 5.55去找相同的值
      2. 還是, 找Profit range裡 小數點2位的值


問題二:
    如果 Profit 裡的小數位數是無窮的, 如何用find找到相同的值呢?

問題三;
  利用find 來找值 可以精準地找到嗎
若想要找的值5.5   收尋範圍的值 5.55,  5.555,  5.5555,  5.5
可以直接找到5.5 而不是5.55555

問題四:
當要收尋範圍裡的值小數位數很多時, 我們讓它以2位小數呈現
例如 5.234= 5.23

當去find該值時, 他讀取的是5.23(更改呈現方式之後) 還是 原先5.234呢?
作者: kimbal    時間: 2011-11-8 13:42

找整個數字(5.55)的方法:
   Set b = profit.Find(5.55, , xlValues, xlWhole)
找以5.55"為首" 的方法 (如5.55, 5.55001, 5.552,5.55999....)
   Set b = profit.Find(5.55, , xlValues, xlpart)
(與這個一樣    Set b = profit.Find(5.55, , xlValues)

留意excel是以"文字"的方式找, 不是以數字大少來找
作者: Helain    時間: 2011-11-8 14:49

回復 2# kimbal


    恩~ 謝謝
作者: Helain    時間: 2011-11-9 11:11     標題: 關於 Find用法

請各位幫忙, 不知道哪邊出問題
Sub test()

Dim Myrange As Range
Set Myrange = Range(Cells(6, 2), Cells(8, 2))

Cells(1, 1) = Myrange.Find(Cells(3, 2), , xlValues, xlwhole).Row
Cells(2, 1) = Myrange.Find(Cells(3, 2), , xlValues,xlwhole).Column

End Sub

我想要找到該值的欄位資料卻無法
'錯誤顯示: '沒有設定物件變數或with 區塊變數
作者: GBKEE    時間: 2011-11-9 11:45

回復 1# Helain
  1. Sub Ex()
  2.     Dim Myrange As Range, Rng As Range
  3.     Set Myrange = Range(Cells(6, 2), Cells(8, 4))
  4.     Set Rng = Myrange.Find(Cells(3, 2), , xlValues, xlWhole)
  5.     If Not Rng Is Nothing Then
  6.         Cells(1, 1) = Rng.Row
  7.         Cells(2, 1) = Rng.Column
  8.     End If
  9. End Sub
  10. '''''''''''''''''''''''''''''''''''
  11. Sub test()
  12. Dim Myrange As Range
  13. 'Set Myrange = Range(Cells(6, 2), Cells(8, 2))  '這裡的 Cells(8, 2) 是 B8
  14. Set Myrange = Range(Cells(6, 2), Cells(8, 4))   '這裡的 Cells(8, 4) 是 D8
  15. '尋找不到   錯誤顯示: '沒有設定物件變數或with 區塊變數
  16. Cells(1, 1) = Myrange.Find(Cells(3, 2), , xlValues, xlWhole).Row
  17. Cells(2, 1) = Myrange.Find(Cells(3, 2), , xlValues, xlWhole).Column
  18. End Sub
複製代碼

作者: Helain    時間: 2011-11-9 21:39

我想問, 後來我這樣做還是不型
出現"陣列索引超出範圍" 是什麼意思呢???
作者: Hsieh    時間: 2011-11-9 22:10

回復 6# Helain

參數錯誤
LookIn的參數 xlValues
但是,你的數值是直接KEY_IN的
LookIn參數應使用xlFormulas才能搜尋的到
通常像這樣的搜尋會省略 LookIn引數
直接使用LookAt引數,使用xlWhole來搜尋完全符合的內容

你可試著操作編輯/尋找功能,把程式錄製下來
去比較搜尋條件不同,造成甚麼不同結果
[attach]8491[/attach]
作者: GBKEE    時間: 2011-11-10 08:04

本帖最後由 GBKEE 於 2011-11-10 08:22 編輯

回復 6# Helain

請任意輸入 "aaaaaaa"
RMax_Row = Cells.Find("aa", , xlValues, xlPart).Row
RMax_Row = Cells.Find("aa", , xlFormulas, xlPart).Row                  有找到:這兩程式碼沒錯誤

RMax_Row = Cells.Find("aa", , xlValues, xlWhole).Row
RMax_Row = Cells.Find("aa", , xlFormulas, xlWhole).Row           沒有找到:這兩程式碼會錯誤    陣列索引超出範圍

請不要用上面的語法 正確的寫法如下
expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
Set R_Max = R_Profit.Find(What:=Rmax,LookIn:= xlFormulas,LookAt:= xlWhole)
Set R_Max = R_Profit.Find(LookIn:=xlFormulas, LookAt:=xlWhole, What:=Rmax)  
全部有指明參數可任意放置參數的位置 但不可以 參雜著有指明參數 及沒指明的參數

Set R_Max = R_Profit.Find(Rmax, ,  xlValues, xlWhole)  
Set R_Max = R_Profit.Find(Rmax, , xlFormulas, xlWhole)

如確定 先前的搜尋不是註解   LookIn:=xlComments 可用
Set R_Max = R_Profit.Find(Rmax, ,  , xlWhole)
    If Not R_Max Is Nothing Then
        R_MaxRow = R_Max.Row
        R_Maxcolumn = R_Max.Column
    End If
作者: Helain    時間: 2011-11-10 13:24

我重新試了一下, 還是不行耶!!
我想要找出其中某一範圍裡的最大值,
再回去原來範圍找出那個最大值的欄位
可是 卻找不到
作者: GBKEE    時間: 2011-11-10 14:06

本帖最後由 GBKEE 於 2011-11-10 14:10 編輯

回復 9# Helain
請檢查一下語法的符號
語法正確時 第1個字母會是大寫的      Row = QrF.Row   
不建議 用關鍵字做變數  Row,Column ...
  1. If Not QrF Is Nothing Then
  2.         Row = QrF.Row
  3.         Column = QrF.Column
  4.     End If
複製代碼

作者: Helain    時間: 2011-11-10 14:29

抱歉, 我QrF還是讀不到資料ㄝ

Sub test_3()

Dim R_Profit As Range        'R's 2nd profit table
Dim M_Profit As Range        'M's 2nd profit table
Dim M_MaxProfit As Range     'For different Qr, M's Max profit

Set R_Profit = Range(Cells(20, 2), Cells(30, 12))
Set M_Profit = Range(Cells(2, 2), Cells(12, 12))
Set M_MaxProfit = Range(Cells(15, 2), Cells(15, 12))

Set QrF = R_Profit.Find(Application.Max(R_Profit), , , xlWhole)

    If Not QrF Is Nothing Then
   
        A = QrF.Row
        B = QrF.Column
        
    End If
   

End Sub
作者: GBKEE    時間: 2011-11-10 14:43

本帖最後由 GBKEE 於 2011-11-10 15:16 編輯

回復 11# Helain
Find 搜尋的條件如果沒重新設定 會依照上次的搜尋條件來尋找的
Set QrF = R_Profit.Find(Application.Max(R_Profit), , , xlWhole)    這語法沒指定是 (公式 內容 註解)  有指定儲存格的內容需完全相同

請查看7樓 Hsieh超版的圖片, 查查看  你 Excel上次的搜尋條件是 (公式 內容 註解).
作者: Helain    時間: 2011-11-10 14:56

回復 12# GBKEE



Find 搜尋的條件會依照上次的搜尋條件來尋找的 (我不懂這句話的意思)

Set QrF = R_Profit.Find(Application.Max(R_Profit), ,xlvalues , xlWhole)

QrF還是讀不到東西
作者: GBKEE    時間: 2011-11-10 15:25

本帖最後由 GBKEE 於 2011-11-10 15:26 編輯

回復 13# Helain
Find 搜尋的條件如果沒重新設定 會依照上次的搜尋條件來尋找的
Set QrF = R_Profit.Find(a, , xlFormulas, xlWhole)
你尋找的是數字 與 工作表上顯示出的的文字(數字)不一樣
  1. Sub test_3()
  2. Dim R_Profit As Range        'R's 2nd profit table
  3. Dim M_Profit As Range        'M's 2nd profit table
  4. Dim M_MaxProfit As Range     'For different Qr, M's Max profit
  5. Set R_Profit = Range(Cells(20, 2), Cells(30, 12))
  6. Set M_Profit = Range(Cells(2, 2), Cells(12, 12))
  7. Set M_MaxProfit = Range(Cells(15, 2), Cells(15, 12))
  8. MsgBox Application.Max(R_Profit)
  9. Set QrF = R_Profit.Find(Application.Max(R_Profit), , xlFormulas, xlWhole)
  10. MsgBox QrF.Text
  11.     If Not QrF Is Nothing Then
  12.         R = QrF.row
  13.         C = QrF.column
  14.     End If
  15. End Sub
複製代碼

作者: Helain    時間: 2011-11-10 15:40

謝謝大大,
所以 XlFormulas 是Find.尋找指range裡面的值包含公試
也就是說 如果range裡的值是經由運算得到的 就要用xlformulas??

那 如果說 range 裡面的值剛好有數個相同的, 那find 可以讀嗎?是隨便讀取其中一個?

另外, 哪邊有VBA所有函數, 以及說明呢?
作者: GBKEE    時間: 2011-11-10 15:56

回復 15# Helain
如果說 range 裡面的值剛好有數個相同的, 那find 可以讀嗎?是隨便讀取其中一個?
自己寫寫 試試看.

另外, 哪邊有VBA所有函數, 以及說明呢?
VBA 指令說明 從中的範例 去一一體會
作者: yagami12th    時間: 2012-1-4 18:51

找整個數字(5.55)的方法:
   Set b = profit.Find(5.55, , xlValues, xlWhole)
找以5.55"為首" 的方法 (如5.55, 5.55001, 5.552,5.55999....)
   Set b = profit.Find(5.55, , xlValues, xlpart)
(與這個一樣    Set b = profit.Find(5.55, , xlValues)

留意excel是以"文字"的方式找, 不是以數字大少來找, 這樣的話還要將5.55以冒號括起來嗎"5.55"
作者: 藍天麗池    時間: 2013-7-9 11:07

回復 5# GBKEE


    http://forum.twbts.com/thread-9780-1-1.html G大可以幫我一下嗎??




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