我在Excel中有一個2變量100x100數據表。lookup Excel中的數據
我需要一個函數,它返回所有可能的產生給定目標值的變量集合。 我在看什麼是某種二維查找功能。有人能指引我朝着正確的方向嗎?
我在Excel中有一個2變量100x100數據表。lookup Excel中的數據
我需要一個函數,它返回所有可能的產生給定目標值的變量集合。 我在看什麼是某種二維查找功能。有人能指引我朝着正確的方向嗎?
可以毫不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列,你可以很容易地從數字中提取這些值。
希望這是有道理的。
我這個嘗試了很多不使用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的方法。
有沒有內置的功能,將做你想做的,我99%肯定。
返回一個數組A VBA函數可以建立,沿已經示出的快速和骯髒的亞系。創建一個Variant來保存輸出,也許Redimmed的結果數量最多,Redim Preserve-d最後減少到實際的數字。然後返回該函數的結果,然後需要將其作爲數組函數調用(Control-Shift-Enter)。
一個不利的方面是,你必須確保目標範圍大到足以容納整個結果是:Excel將不會自動做。
我有一個不使用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中搜索匹配,然後在上一次匹配之後搜索在調整範圍內的匹配進行。
它然後通過上面的解釋在電子表格中要容易得多,但是這是我能暫時做最好...
目前還不清楚你想要什麼。 您可以發佈一些示例數據,一個5x5表格,以及您希望以您想要的格式查找的結果。 – Hobbo 2008-10-21 06:49:19
你不能只寫一個使用Excel LOOKUP函數的宏嗎? – Simon 2008-10-21 07:07:14