2016-06-10 75 views
0

我很難從數組中返回一組列。我已經將sql select語句返回給我的變體數組。它有16列。我需要抓取16列中的12列,才能從數組中的特定行返回到我的電子表格。我正在使用此代碼來獲取我的行:從數組中獲取列VBA

If UBound(Filter(budget, Cells(i, 1).Value, , vbBinaryCompare)) >= 0 And Cells(i, 1).Value <> "" Then 

然後,我該如何獲得我需要的12列?列是數組中的最後12列,並且總是按我需要的順序排列。

在此先感謝您的幫助!

+0

這引發了一個問題,當您只需要12個時,爲什麼要返回16列? –

+0

有幾個原因:我按照我的sql語句中的一列進行分組,並且使用其他三列來返回工具其他位置的聚合數據。 – Clouse24

回答

1

這將取決於數組的形狀。
如果它是一個一名維陣列

a = Filter(Selection, Cells(i, 1).Value, , vbTextCompare) 
rows = UBound(a) 
Cells(i, 1).Resize(1, rows) = Application.WorksheetFunction.Transpose(a) 

注意WorksheetFunction.Transpose的(a)交換所述陣列的行和列。

多維數組將取決於他們在何處創建。

我們可以認爲它像這樣

數據庫查詢數組:A = recordset.getRows()

而且

暗淡了(10,100)REDIM保留a(10,Ubound(a)+1)

像這樣對齊(列,行),因爲只能重新調整數組的最後一個片段。
因此,我們將: 一個=過濾(精選,將細胞(I,1)。價值,vbTextCompare) 行= UBound函數(A,2) 列= UBound函數(A,1) 細胞(I, 1).Resize(columns,rows)= Application.WorksheetFunction.Transpose(a)

Excel範圍數組是基數爲1,並具有與範圍本身相同的形狀。

a = Range("A1:K200").Value 
a(1,1) = cells(1, 1) evaluates to True 

這樣你就可以做到這一點

a = Range("A1:K200").Value 
Range("A1:K200") = a 

或者 A =過濾器(選擇,單元格(1,1).value的,vbTextCompare) 行= UBound函數(一,1) 列= UBound(a,2) 單元格(i,1).Resize(行,列)= a

+0

ahhhh轉置是一個好主意,我甚至沒有這個想法。謝謝! – Clouse24