2011-05-19 10 views
10

पर एक सरणी मुद्रित करने के लिए एक्सेल वीबीए फ़ंक्शन मैंने एक मैक्रो लिखा है जो एक 2 आयामी सरणी लेता है, और एक्सेल कार्यपुस्तिका में समकक्ष कोशिकाओं के लिए "प्रिंट" करता है।कार्यपुस्तिका

क्या ऐसा करने के लिए एक और शानदार तरीका है?

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 

उत्तर

14

अन्य उत्तर के रूप में ही विषय पर ध्यान में रखते हुए यह सरल

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 
+0

OLE स्वचालन के लिए, बताए 'रेंज' के लिए वास्तव में इसका अर्थ है 'वाल्यू'। –

3

एक प्रकार सरणी (सबसे आसान एक प्रकार चर करने के लिए बराबर रेंज पढ़कर) बनाएँ।

फिर सरणी भरें, और सीधे सरणी को सरणी असाइन करें।

Dim myArray As Variant 

myArray = Range("blahblah") 

Range("bingbing") = myArray 

संस्करण सरणी 2-डी मैट्रिक्स के रूप में समाप्त हो जाएगी।

0

एक और अधिक सुरुचिपूर्ण तरीका एक ही बार में पूरे सरणी आवंटित करने के लिए है:

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 

लेकिन बाहर देखने के लिए: यह केवल 8000 के बारे में कोशिकाओं का एक आकार तक काम करता है। फिर एक्सेल एक अजीब त्रुटि फेंकता है। अधिकतम आकार तय नहीं है और एक्सेल स्थापना से एक्सेल स्थापना में बहुत अलग है।

0

आप एक रेंज, अपने सरणी के आकार को परिभाषित करने और उपयोग कर सकते हैं यह मूल्य संपत्ति है:,

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 
0

मेरे परीक्षण किया संस्करण

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 
1

सबसे कम तरीके: बसमें शामिल होंप्रदर्शन तत्वों, यानी एक स्ट्रिंग के रूप सरणी-तत्वों, शामिल होने के लिए शामिल हों() फ़ंक्शन का उपयोग (लूप या वर्कशीट रेंज का उपयोग किए बिना) जैसे:

MsgBox Join(arrayName, ",") 

'Above will display array elements as a single string separated by comma (a,b,c). 
संबंधित मुद्दे