2013-05-31 55 views
3

我試圖自動化Excel,以便它允許我顯示來自滿足特定條件的其他選項卡的所有記錄。獲取滿足條件並在新工作表中顯示的所有行

我的源表(分析選項卡): enter image description here

我的名字根據列名我的所有範圍。因此,例如命名區域Vehicle=Analysis!$A$2:$A$3000

所有範圍去行3000

下拉列表中單元格C1,車輛和使用的過濾器的名稱。

我的目標工作表如下: enter image description here

在細胞B3,我有曾嘗試以下數組公式來不成功地適應。 =IF(COUNTIF(vehicle,DropDown)<ROWS($A$1:$A1),"",INDEX(DataTable,LARGE(IF(DropDown=Litres,ROW(INDIRECT("1:"&ROWS(vehicle)))),ROW(Analysis!$A1)),MATCH(Analysis!A$3,Analysis!$A$3:$E$3,0)))

這不能正常工作。任何幫助表示讚賞。

總結一下,我想返回Tab中分析車輛等於單元格C1的所有行。隨着數據每天都在變化,我需要自動化。

UPDATE enter image description here enter image description here

回答

3

您將需要使用VBA。做到這一點的一個好方法是添加一個自定義函數,然後在另一個單元格中使用它。例如在D1單元格中放入=MyFunction(C1)。然後創建VBA模塊並添加以下(可能包含了一些錯誤,因爲我沒有測試):

Function MyFunction(parVal As String) As String 
    'Clear what is there now 
    ActiveSheet.Range("A3", "I3000").ClearContents 

    'Add new rows 
    varRange = Sheets("Analysis").UsedRange 
    varCount = 2 
    For varRow = 1 To varRange.Rows.Count 
     If varRange(varRow, 1) = parVal Then 
      varRange(varRow, 1).EntireRow.Copy 
      varCount = varCount + 1 
      ActiveSheet.Cells(varCount, 1).EntireRow.Select 
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
     End If 
    Next varRow 
    MyFunction = "Found " & (varCount - 2) & " rows" 
End Function 
+0

感謝neelsg。在vba的模塊部分使用了yoru代碼。 D1中的錯誤現在是'#name?'。我在代碼中添加了我的更改的圖像。請告知,如果你對我做錯了什麼有一些想法。謝謝。 – Smudger

+0

這意味着它沒有找到該功能。首先將'Function My ...'更改爲'Public Function My ...'並將該文件保存爲啓用宏的工作簿('.xlsm',而不是'.xlsx') – neelsg

1

其他信息來源:http://www.cpearson.com

哪裏可以把代碼

的UDF代碼應放置在標準代碼模塊中,而不是其中一個Sheet模塊,也不在ThisWorkbook模塊中。在VBA編輯器中,轉到插入菜單並選擇模塊。這會在項目中插入一個新的代碼模塊。一個模塊可以包含任何數字函數,因此您可以將許多函數放入單個代碼模塊中。您可以通過按F4鍵顯示「屬性」窗口並將Name屬性更改爲任何您想要的,將模塊的名稱從Module1更改爲更有意義的內容。

您可以通過使用函數名稱從同一工作簿中調用一個函數。例如:

= RectangleArea(12,34)