2017-03-08 46 views
3

我有一個3D矩陣,它包含一些我想使用命令中的單元格範圍寫:Excel VBA - 如何使用單個命令從3D矩陣複製2D矩陣內容?

Worksheet.Range(Worksheet.Cells(RowStart, ColumnStart), Worksheet.Cells(RowEnd, ColumnEnd)).Value = MyData 

的問題是,MyData的數據實際上是由第一索引= 2描述3D矩陣的維度。

由於我沒有看到在這裏使用Application.WorksheetFunction.Index的可能性,所以我想將3D矩陣的整個特定索引的內容複製到2D中。

這是可能的,而不必求助於For循環(或編寫一個子程序)?

回答

2

我做了定製子前一陣子來顯示3D陣列的一部分:

Public Sub Print2D_of_3D_Array(ByVal ArrayT As Variant, _ 
       ByVal FixedDim As Integer, _ 
       ByVal FixedDimValue As Double, _ 
       ByRef Sheet_to_PrintOn As Worksheet, _ 
       Optional ByVal DeleteSheet As Boolean = False) 


If DeleteSheet Then Set Sheet_to_PrintOn = DeleteAndAddSheet(Sheet_to_PrintOn) 

Select Case FixedDim 
    Case Is = 1 
     For i = LBound(ArrayT, 2) To UBound(ArrayT, 2) 
      For j = LBound(ArrayT, 3) To UBound(ArrayT, 3) 
       Sheet_to_PrintOn.Cells(i + 1, j + 1) = ArrayT(FixedDimValue, i, j) 
      Next j 
     Next i 
    Case Is = 2 
     For i = LBound(ArrayT, 1) To UBound(ArrayT, 1) 
      For j = LBound(ArrayT, 3) To UBound(ArrayT, 3) 
       Sheet_to_PrintOn.Cells(i + 1, j + 1) = ArrayT(i, FixedDimValue, j) 
      Next j 
     Next i 
    Case Is = 3 
     For i = LBound(ArrayT, 1) To UBound(ArrayT, 1) 
      For j = LBound(ArrayT, 2) To UBound(ArrayT, 2) 
       Sheet_to_PrintOn.Cells(i + 1, j + 1) = ArrayT(i, j, FixedDimValue) 
      Next j 
     Next i 
    Case Else 
     MsgBox "error" 
End Select 

End Sub 

所以,你不得不使用這樣的:

Call Print2D_of_3D_Array(MyArray, 1, 2, WorksheetVariable, False) 
+0

所以基本上答案是「否」,沒有可能避免For循環...對嗎? – Noldor130884

+0

@ Noldor130884:基本上! ;)至少,沒有我所知道的,但我已經堆積了好幾個飛行小時,所以我很高興有沒有除了一旦你做出這樣的定製程序...... – R3uK