2013-12-22 36 views
0

我有一些麻煩,試圖讓這就像VLOOKUP函數,但返回一個範圍,而不是一個細胞查找結果的範圍,然後複製

通過外表來搜索這樣

lookup

數據

有時候會有空格分開有時候不是 我想要做的就是從我的主頁查找16並返回該範圍內的所有值。

main

我目前使用只會返回第一行中一個消息

Public Function findrulepos(target) As Range  
    Dim ruleStart, ruleEnd, ruleEnd2 As String  
    Dim RuleRange As Range 
    'Dim ruleEnd As Range 

    MaxRule = 100000 
    MaxRow = 100000 

    Set target = Sheets("main").Range("E2") 

    Sheets("ResRules").Select 

    For i = 3 To MaxRow 
     If CStr(ThisWorkbook.Sheets("ResRules").Range("A" & i).Value) = _ 
     CStr(target.Value) Then 
      ruleStart = _ 
      ThisWorkbook.Sheets("ResRules").Range("A" & i).Offset(0, 1).Text 

      Exit For 
     Else 
     End If 
    Next i 
End Function 
+1

對不起,但我無法理解您的要求或代碼在做什麼。 'findrulepos'是一個函數。你在哪裏返回價值?你在功能中減少了Target。爲什麼使用這個'Set target = Sheets(「main」)來重置它。Range(「E2」)'?什麼是三個變量'ruleStart,ruleEnd,ruleEnd2'應該這樣做?如果您爲「Before」和「After」情景附加截圖,會更好。 –

+1

@SiddharthRout - 添加了屏幕截圖。抱歉沒有更好地解釋這一點。 – grahamie

+0

@pnuts是ruleEnd 2是多餘的。離開了我正在做的其他事情。但你有我想要做的事情的要點。可能嗎 ? – grahamie

回答

1

如果我們可以假設,在山坳數字組標籤是連續的代碼,那麼我認爲這將實現你需要的東西:

  1. 輸入你想(在你的例子16)提取到細胞E1
  2. 數字標籤
  3. 請注意,=MATCH(E1,A:A,0)爲我們提供了行號16 開始的行號,這是我們要複製的第一行。同樣, =MATCH(E1+1,A:A,0)爲我們提供了組17開始的行號, ,這是我們想要複製的最後一行之下的一行。 (不幸的是 這是不正確的代碼的最後一組,但要糾正這種 你只需要在山坳A.數據 的最底部添加一個虛擬號碼)
  4. 在F1輸入公式​​。這應該複製所選代碼塊的第一個值 - 在您的示例中爲[DO] ADD TO QUEUE P
  5. 將F1複製到最大代碼塊可能的行數。
  6. 與此相關的一個問題是,只要它複製一個空白行,它就會將0。所以你必須明確地檢查這種情況,例如通過更改公式在F1到=IF(ROW()+MATCH(E$1,A:A,0)-1<MATCH(E$1+1,A:A,0),IF(ISBLANK(INDIRECT("B"&MATCH(E$1,A:A,0)+ROW()-1)),"",INDIRECT("B"&MATCH(E$1,A:A,0)+ROW()-1)),"")
+0

看起來不錯。唯一的問題是A列不能保證以數字順序排列,或者有順序的順序枯萎。所以可能會丟失數字和亂序。 – grahamie

+0

因此,您應該能夠通過我的公式來查找col A中的非空白值,而不是下一個連續的數字。或者,用'C1 = A1'和'C2 = if(isblank(A2),C1,A2)'(並拷貝)添加一個(隱藏的)列C.具有這些重複的值而不是空白可以使建立只提取一個代碼組的公式更容易。 – MattClarke