2011-03-30 263 views
2

之間參照這裏是我的問題:Excel的VBA - 範圍

我有來自兩個不同的片兩個範圍,r_products和r_ptypes,但相同的長度,即

Set r_products = Worksheets("Products").Range("A2:A999") 
Set r_ptypes = Worksheets("SKUs").Range("B2:B999") 

我在尋找的東西在r_products中,我必須在r_ptypes的相同位置選擇值。 Find方法的結果存儲在cellfound中。現在,請考慮以下數據:

Sheet: Products 
    A   B  C   D 
1 Product 
2 S1 
3 P1 
4 P2 
5 S2 
6 S3 

Sheet: SKUs 
    A   B   C   D 
1   SKU 
2   S1-RP003 
3   P1-BQ900 
4   P2-HE300 
5   S2-NB280 
6   S3-JN934 

現在,當我搜索S1,cellfound.Row給我值2,這是我的理解,總的工作表中第二行,但實際上是第一個行範圍(A2:A999)。當我使用這個cellfound.Row引用r_ptypes.cells(cellfound.Row)時,它將它作爲索引值並返回B3(P1-BQ900)而不是我想要的,即B2(S1 -RP003)。

我的問題是如何找到cellfound中的索引號?如果不可行,我如何使用行號從r_ptypes中提取數據?

回答

0

因爲.Row總是返回絕對表的行號,而不是該範圍內的偏移量(即索引)。

所以,只是做一些減工作來處理它。

爲您例如,

 
r_ptypes.Cells(cellfound.Row - r_ptypes.Cells(1).Row + 1) 

還是有點整潔的(?)

 
With r_ptypes 
    .Cells(cellfound.Row - .Cells(1).Row + 1) 
End With 

也就是說,得到cellfound和第一單元和+ 1彼此的行差是因爲Excel從計數細胞1.

+2

這只是一個醜陋的解決方法,而不是一個真正的解決方案中的行。當範圍被移動時會發生什麼,因爲新的標題被插入到一張紙上?不要硬編碼,他應該嘗試計算範圍開始到單元格A1的差異。 – froeschli 2011-03-30 04:23:41

+0

是的,這是我的問題..我想知道是否有辦法找到偏移量,而不是絕對行號,然後再移動到操縱性解決方案... – Ashok 2011-03-30 04:25:27

+0

@froeschli,@Ashok,請參閱編輯。我太懶惰了,正如程序員所期望的那樣。 XD – 2011-03-30 04:32:49

3

但丁的解決方案上面工作正常。另外,我設法使用內置的Excel函數Match來獲取索引值,而不是使用範圍的Find方法。在此列出以供參考。

indexval = Application.WorksheetFunction.Match("searchvalue", r_products, 0) 

使用上面,我現在可以指在r_ptypes

skuvalue = r_ptypes.Rows(indexval).Value