2012-08-09 62 views
0

SnapshotExcel中 - 返回值,之後細胞已被匹配,報頭

在這裏,我再次請求幫助這個偉大的社區之間。 我希望我能像你有一天做的那樣盡情發揮。

圖中的第4列(D)是預期的輸出。

這是我如何把這個問題:

  • 如果數字爲負/或有A(在A行數始終爲負值);

    • 使用MATCH來檢查範圍內(標題之間)是否有對應(正數)的數字;

    • 如果存在匹配輸出已匹配的F ID(第一列)的值,然後,輸出該已匹配

  • 如果A的ID沒有,什麼也不做,或將一個0

的問題是:

  • 它需要LOO p,因爲負值可以在正值之後出現;

  • 搜索必須包含在標題之間。

我試圖修改,並從我放在其他問題的技巧和代碼創建自己的解決方案,但沒有成功..

太謝謝你了!

回答

2

嘗試粘貼此進入VBE立即窗口,按下回車鍵:

Names.Add "i", "=$A$1:$A$12": _ 
Names.Add "v", "=$B$1:$B$12": _ 
Names.Add "m", "=$D$1:$D$12": _ 
Names.Add "h", [IF({1},LOOKUP(ROW(i),ROW(i)/(v=INDEX(v,1))))]: _ 
Names.Add "l", [IF({1},LOOKUP(ROW(i),ROW(i)/(v=INDEX(v,1)),FREQUENCY(-ROW(i),IF(v=INDEX(v,1),-ROW(i),0))-1))]: _ 
[m]=[IF(COUNTIF(OFFSET(v,h,,l),"=-"&v),CONCATENATE("=",ADDRESS(ROW(i),COLUMN(i),4),"&"" AND ""&INDEX(",ADDRESS(h+1,COLUMN(i)),":",ADDRESS(h+l,COLUMN(i)),",MATCH(-",ADDRESS(ROW(v),COLUMN(v),4),",",ADDRESS(h+1,COLUMN(v)),":",ADDRESS(h+l,COLUMN(v)),",0))"),"")]: _ 
Names("h").Delete: _ 
Names("l").Delete 

的輸出在問題的示例數據爲:

D5 =A5&" AND "&INDEX($A$2:$A$6,MATCH(-B5,$B$2:$B$6,0)) 
D11 =A11&" AND "&INDEX($A$11:$A$12,MATCH(-B11,$B$11:$B$12,0)) 

:此方法使用命名數組來存儲標頭位置h和段長度l的中間結果,並且當範圍名稱i(id),v(值)和m(匹配)擴展到40,000行時需要大約3-4秒。一個簡單的公式可能是可能的,但是填充大型數據集的效率會很低。

+0

耶!我希望配方大師能夠提出一些不需要全面的VBA解決方案的東西。 ROW(i)'在'FREQUENCY'函數中如何工作以檢查下一個頭部發生(我發現它確實使數組成長,但不知道「-ROW(i)'意味着什麼爲數據數組)? – Zairja 2012-08-10 13:15:12

+0

該死的,這個網站充滿了天才! lori_m,我得寄給你一個蛋糕或者你送給我的所有幫助! Trully讚賞! – tracer 2012-08-10 14:48:34

+1

我很高興這有幫助,它花了一段時間才弄清楚,並且使用函數只是一個有趣的挑戰 - 一個VBA解決方案肯定會更容易遵循,但可能也會更長。 @Zairja:ROW前面的'-'確保頻率計數與輸出數組中的標題位於同一行。 – 2012-08-10 15:43:06

1

這是我會使用的公式。請注意,您必須明確引用標題的範圍。您可能需要定義命名範圍以避免拼寫錯誤並減輕可讀性。這個公式將被放入D2(填充 - 拖動到D6)。

=IFERROR(IF(B2<0,INDEX($A$2:$A$6,MATCH(B2*-1,$B$2:$B$6,0),1) & " AND " & A2,""),"")

工作原理:IFERROR只是趕上#NA當沒有比賽。如果值B2爲負數(小於0),則返回具有匹配正值的行的第一列中的值。我們對INDEXMATCH使用絕對引用,因爲當公式被拖入其他單元格時,我們不想查看A3:A7A4:A8等。只有被比較的值和相應的ID應該是相對的(A2/B2),因爲我們希望對每一行都進行更改。

下面是它的外觀。請記住,因爲我的價值觀是從A1:B6我的公式就變爲INDEX($A$1:$A$6...MATCH(B1*-1,$B$1:$B:$6,0)...

XL

+0

謝謝,這很好。但是,我真的需要自動化標題部分,因爲我有超過40,000行並逐一定義它們會花費很多時間 – tracer 2012-08-09 14:29:04

+0

您對VBA的熟悉程度如何? – Zairja 2012-08-09 14:37:39

+0

我可以做一些初學者的東西,但如果我不明白我會谷歌它.. – tracer 2012-08-09 14:47:28