2008-10-21 71 views
1

我在Excel中有一個2變量100x100數據表。lookup Excel中的數據

我需要一個函數,它返回所有可能的產生給定目標值的變量集合。 我在看什麼是某種二維查找功能。有人能指引我朝着正確的方向嗎?

+0

目前還不清楚你想要什麼。 您可以發佈一些示例數據,一個5x5表格,以及您希望以您想要的格式查找的結果。 – Hobbo 2008-10-21 06:49:19

+0

你不能只寫一個使用Excel LOOKUP函數的宏嗎? – Simon 2008-10-21 07:07:14

回答

1

可以毫不VBA來完成,相當緊湊,像這樣。

假設你的100×100表是在B2:CW101,我們把數字1的列表,以100向下向左從A2至A101,並在頂部再次1到100從B1到CW1

創建細胞的柱底下,開始(說)在B104

B104=MAX(($A$2:$A$101*100+$B$1:$CW$1<B103)*($B$2:$CW$101=TargetValue)*($A$2:$A$101*100+$B$1:$CW$1)) 

這是一個「陣列」式,所以按下Ctrl-Shift鍵輸入,而不是輸入,和花括號{}應該出現周圍的公式。

然後拷貝儘可能多的行,你可能需要。您還需要在第一個公式的上方輸入一個大數字,例如,在B103中,例如999999.

公式所做的是計算Rowx100 +列,但僅限於每個成功的單元格,並且MAX函數會查找最大結果,不包括以前找到的所有結果,即它從右下角開始一直到左上角。 (通過一點努力,你可以通過其他方式來搜索它)。

這會給你9922的結果,這是第99行,第22列,你可以很容易地從數字中提取這些值。

希望這是有道理的。

0

我這個嘗試了很多不使用VBA,但似乎沒有它是可能的。 爲了解決這個問題,我需要遍歷整個數組並找到最接近的值。然後使用調用和範圍屬性取消這些值,並在每次有效匹配時增加的範圍內生成輸出。

的快速和骯髒的實施是爲下:

Dim arr As Range 
Dim tempval As Range 
Dim op As Integer 

Set arr = Worksheets("sheet1").Range("b2:ao41") 
op = 1 
Range("B53:D153").ClearContents 





For Each tempval In arr 
If Round(tempval.Value, 0) = Round(Range("b50").Value, 0) Then 

Range("b52").Offset(op, 0).Value = Range("a" & tempval.Row).Value 
Range("b52").Offset(op, 1).Value = Cells(tempval.Column, 1).Value 
Range("b52").Offset(op, 2).Value = tempval.Value 
op = op + 1 

End If 

Next 
Range("b50").Select 

我現在還在找工作沒有VBA的方法。

1

有沒有內置的功能,將做你想做的,我99%肯定。

返回一個數組A VBA函數可以建立,沿已經示出的快速和骯髒的亞系。創建一個Variant來保存輸出,也許Redimmed的結果數量最多,Redim Preserve-d最後減少到實際的數字。然後返回該函數的結果,然後需要將其作爲數組函數調用(Control-Shift-Enter)。

一個不利的方面是,你必須確保目標範圍大到足以容納整個結果是:Excel將不會自動做。

0

我有一個不使用VBA的解決方案,但它相當混亂。它涉及在Excel中創建更多的一維表格並對其進行查找。對於100x100數據表,新表需要10,000行。

道歉,如果這不符合您的需求。

總結如下 - 讓我知道你是否需要更多的細節。 N =數據的維度,例如在你的例子中爲100。

首先,創建一個具有五列和NxN行的新表格。在每種情況下,用適當的Excel引用

第一列(稱之爲INDEX)僅僅列出1,2,...,N×N的取代我的列名。

第二列(數據行)包含公式來遍歷1,2,...,N,1,2 ... N ...這可以使用的東西做過類似= MOD(INDEX-1,N) 1

第三列(DATACOL)包含1,1,1 ... 2,2,... 2(N各次)。 這可以通過= INT((INDEX-1)/ N)+1

第四列(VALUE)包含從數據表中的值來完成,使用類似: = OFFSET($ A $ 1,數據行,DATACOL),假設你的數據表,在$ A $ 1

開始我們現在已經有了一個一維表保存所有的數據。

第五列(LOOKUP)包含下式: = MATCH(目標,OFFSET(VALUERANGE,[LOOKUP-1],0),0)+ [LOOKUP-1]

其中[LOOKUP-1 ]指的是緊接在上面的單元格(例如在單元格F4中,這指的是F3)。您需要在LOOKUP列中第一個單元格上方的0。

VALUERANGE應該是一個固定的(命名或使用$符號)對整個VALUE列的引用。

然後,LOOKUP列包含可用於查找DATAROW和DATACOL的INDEX號碼,以查找數據中匹配的位置。

這可以通過在VALUERANGE中搜索匹配,然後在上一次匹配之後搜索在調整範圍內的匹配進行。

它然後通過上面的解釋在電子表格中要容易得多,但是這是我能暫時做最好...