2012-03-12 67 views
0

使用Excel工作表,我試圖搜索與其單元格值中的某些條件匹配的行。是否存在與SQL SELECT查詢等效的VBA方法?

我需要像SQL SELECT查詢來繼續通過Excel工作表進行搜索,是否有這樣的方法在VBA?一種返回符合搜索條件的行數範圍的方法。

我已經嘗試過使用Range AutoFilter方法,但是我不能使用返回的對象作爲Range來訪問返回行中的單元格。

我真的很新的到Excel VBA很抱歉,如果我的問題看起來很奇怪或愚蠢

+2

在VBA中沒有直接的等價物。您可以直接針對Excel工作表運行SQL查詢,但返回的是ADO記錄集而不是一系列匹配的行。但是,如果您的行具有唯一的ID,則可以從記錄集映射回行。如果你使用自動過濾器,那麼不匹配的行將被隱藏,你應該能夠相當容易地獲得剩餘的行。 – 2012-03-12 22:37:29

+0

搜索多列範圍內的內容,或者查詢相應字段中的查詢?高級過濾器允許您按照標準完成這種類型的查詢。 – datatoo 2012-03-12 23:52:45

+1

@Walidix:你總是可以使用ADO來查詢電子表格...正如上面的評論者所說,它會返回一個ADO記錄集,但是你可以很容易地找到一種方法來操作那個集合,但是你需要。 – Kittoes0124 2012-03-13 03:07:04

回答

1

可以使用聯盟()函數來創建一個範圍。下面是一個簡單的例子(比如你想選擇整個行,其中在A列中的值是偶數,並強調他們黃色):

Sub UnionTest() 

Dim myRange As Range 
Dim cell As Range 

For Each cell In Range("A1:A100") 
    If cell Mod 2 = 0 Then 
     If myRange Is Nothing Then 
      Set myRange = cell 
     Else 
      Set myRange = Union(myRange, cell) 
     End If 
    End If 
Next 

myRange.EntireRow.Interior.Color = vbYellow 

End Sub 

請注意,你需要檢查範圍在你使用union之前是空的或者是空的(並且使它變爲顏色,但爲了使代碼更容易閱讀,我在這裏省略了它),因此是If-Then語句。根據您想要對每行執行的操作,在for-each循環中執行該行的過程可能會更有效。

+1

「您需要檢查範圍是否爲空或在您使用聯合之前」 - 並在您着色之前:) – brettdj 2012-03-13 09:40:50

+0

好點,brettdj! :0 – aevanko 2012-03-13 14:18:39

+0

感謝您的幫助 – Walidix 2012-03-15 10:26:18

相關問題