Excel VBA 기능을 사용하여 배열을 워크북에 인쇄
저는 2차원 배열을 사용하는 매크로를 작성하여 Excel 워크북의 동등한 셀에 "인쇄"했습니다.
이것을 하는 더 우아한 방법이 있습니까?
Sub PrintArray(Data, SheetName, StartRow, StartCol)
Dim Row As Integer
Dim Col As Integer
Row = StartRow
For i = LBound(Data, 1) To UBound(Data, 1)
Col = StartCol
For j = LBound(Data, 2) To UBound(Data, 2)
Sheets(SheetName).Cells(Row, Col).Value = Data(i, j)
Col = Col + 1
Next j
Row = Row + 1
Next i
End Sub
Sub Test()
Dim MyArray(1 To 3, 1 To 3)
MyArray(1, 1) = 24
MyArray(1, 2) = 21
MyArray(1, 3) = 253674
MyArray(2, 1) = "3/11/1999"
MyArray(2, 2) = 6.777777777
MyArray(2, 3) = "Test"
MyArray(3, 1) = 1345
MyArray(3, 2) = 42456
MyArray(3, 3) = 60
PrintArray MyArray, "Sheet1", 1, 1
End Sub
다른 답변과 동일한 주제로, 단순성 유지
Sub PrintArray(Data As Variant, Cl As Range)
Cl.Resize(UBound(Data, 1), UBound(Data, 2)) = Data
End Sub
Sub Test()
Dim MyArray() As Variant
ReDim MyArray(1 To 3, 1 To 3) ' make it flexible
' Fill array
' ...
PrintArray MyArray, ActiveWorkbook.Worksheets("Sheet1").[A1]
End Sub
변형 배열을 만듭니다(동등한 범위를 변형 변수로 읽어 들이면 가장 쉽습니다).
그런 다음 배열을 채우고 배열을 범위에 직접 할당합니다.
Dim myArray As Variant
myArray = Range("blahblah")
Range("bingbing") = myArray
변형 배열은 2-D 행렬로 끝납니다.
더 우아한 방법은 전체 어레이를 한 번에 할당하는 것입니다.
Sub PrintArray(Data, SheetName, StartRow, StartCol)
Dim Rng As Range
With Sheets(SheetName)
Set Rng = .Range(.Cells(StartRow, StartCol), _
.Cells(UBound(Data, 1) - LBound(Data, 1) + StartRow, _
UBound(Data, 2) - LBound(Data, 2) + StartCol))
End With
Rng.Value2 = Data
End Sub
하지만 조심하세요: 그것은 약 8,000개의 세포 크기까지만 작동합니다.그러면 엑셀은 이상한 오류를 던집니다.최대 크기는 고정되어 있지 않고 엑셀 설치마다 많이 다릅니다.
다른 사람들이 제안한 것처럼 2차원 배열을 Range on 시트에 직접 쓸 수 있지만 배열이 1차원인 경우 다음 두 가지 옵션이 있습니다.
- 먼저 1D 배열을 2D 배열로 변환한 다음 시트에 인쇄합니다(범위로).
- 1D 배열을 문자열로 변환하여 단일 셀(문자열)로 인쇄합니다.
다음은 두 옵션을 모두 설명하는 예입니다.
Sub PrintArrayIn1Cell(myArr As Variant, cell As Range) cell = Join(myArr, ",") End Sub Sub PrintArrayAsRange(myArr As Variant, cell As Range) cell.Resize(UBound(myArr, 1), UBound(myArr, 2)) = myArr End Sub Sub TestPrintArrayIntoSheet() '2dArrayToSheet Dim arr As Variant arr = Split("a b c", " ") 'Printing in ONE-CELL: To print all array-elements as a single string separated by comma (a,b,c): PrintArrayIn1Cell arr, [A1] 'Printing in SEPARATE-CELLS: To print array-elements in separate cells: Dim arr2D As Variant arr2D = Application.WorksheetFunction.Transpose(arr) 'convert a 1D array into 2D array PrintArrayAsRange arr2D, Range("B1:B3") End Sub
참고: 전치는 열별 출력을 렌더링하여 행별 출력을 다시 전치할 수 있습니다. 그럴 수 있기를 바랍니다.
HTH
내 테스트 버전
Sub PrintArray(RowPrint, ColPrint, ArrayName, WorkSheetName)
Sheets(WorkSheetName).Range(Cells(RowPrint, ColPrint), _
Cells(RowPrint + UBound(ArrayName, 2) - 1, _
ColPrint + UBound(ArrayName, 1) - 1)) = _
WorksheetFunction.Transpose(ArrayName)
End Sub
어레이의 크기인 범위를 정의하고 해당 값 속성을 사용할 수 있습니다.
Sub PrintArray(Data, SheetName As String, intStartRow As Integer, intStartCol As Integer)
Dim oWorksheet As Worksheet
Dim rngCopyTo As Range
Set oWorksheet = ActiveWorkbook.Worksheets(SheetName)
' size of array
Dim intEndRow As Integer
Dim intEndCol As Integer
intEndRow = UBound(Data, 1)
intEndCol = UBound(Data, 2)
Set rngCopyTo = oWorksheet.Range(oWorksheet.Cells(intStartRow, intStartCol), oWorksheet.Cells(intEndRow, intEndCol))
rngCopyTo.Value = Data
End Sub
언급URL : https://stackoverflow.com/questions/6063672/excel-vba-function-to-print-an-array-to-the-workbook
'programing' 카테고리의 다른 글
ASP.NET MVC - QueryString 값 가져오기 (0) | 2023.07.01 |
---|---|
NSA 귀속 문자열을 연결하려면 어떻게 해야 합니까? (0) | 2023.07.01 |
SELECT FROM 문에서 테이블 유형을 사용하는 방법은 무엇입니까? (0) | 2023.07.01 |
.NET 4.5 웹 소켓 대 신호 R (0) | 2023.06.26 |
Spring boot CrudRepository를 사용하여 데이터 필터링 (0) | 2023.06.26 |