-1
我有一個200x4陣列,我需要一個從第5行到第50行的子集,我該如何做到這一點沒有循環?使用INDEX選擇數組部分
這是我心中的那種,有什麼建議嗎?
MYARRAY [5:50,]
這僅僅是在VBA中,沒有任何信息從Excel電子表格
我有一個200x4陣列,我需要一個從第5行到第50行的子集,我該如何做到這一點沒有循環?使用INDEX選擇數組部分
這是我心中的那種,有什麼建議嗎?
MYARRAY [5:50,]
這僅僅是在VBA中,沒有任何信息從Excel電子表格
這是不可能的純VBA(儘管你可以得到一些使用你想用什麼Index function
你可以做的是寫一個抽象需要循環的切斷功能,使這確實切片的代碼是清潔喜歡的東西:
'Assumes 1-based arrays
Function Slice(A As Variant, Optional RowRange As String = "", Optional ColRange As String = ""):
Dim i As Long, j As Long, rmin As Long, rmax As Long, cmin As Long, cmax As Long
Dim m As Long, n As Long
Dim S As Variant, Dims As Variant
If Len(RowRange) > 0 Then
Dims = Split(RowRange, ":")
rmin = Dims(0)
rmax = Dims(1)
Else
rmin = 1
rmax = UBound(A, 1)
End If
If Len(ColRange) > 0 Then
Dims = Split(ColRange, ":")
cmin = Dims(0)
cmax = Dims(1)
Else
cmin = 1
cmax = UBound(A, 2)
End If
m = rmax - rmin + 1
n = cmax - cmin + 1
ReDim S(1 To m, 1 To n)
For i = 1 To m
For j = 1 To n
S(i, j) = A(rmin + i - 1, cmin + j - 1)
Next j
Next i
Slice = S
End Function
的部分測試:
Sub test()
Dim A As Variant
A = Range("A1:C6").Value 'a 4x6 array
Range("E1:G3").Value = Slice(A, "2:4")
Range("E5:F10").Value = Slice(A, , "1:2")
End Sub
輸出:
不幸的是,Slice(A, "2:4",)
是一個語法錯誤 - 在VBA函數調用,你不能用逗號結束參數列表即使其餘參數是可選的,因此Slice(A, "2:4")
與Slice(A, , "1:2")
的不對稱也是如此。
只是爲了確保你是從工作表單元格中讀取數組值?我們假設從第1行到第200行,並且您只想讀取第5行到第50行的值? –
這些值是VBA中的另一個計算結果,沒有鏈接到Excel表格 –
[此鏈接](https://usefulgyaan.wordpress.com/2013/06/12/vba-trick-of-the-week-slicing -an-array-without-loop-application-index /)應該提供一個技巧來做到這一點,但我無法讓它工作 – user3598756