2014-02-14 4 views
8

Hier ist, was ich bisher getan habe.Array-Größe zurückgegeben durch Split-Funktion - Excel VBA

Sub MP_division() 

Worksheets(3).Activate  
Dim last_cell As Integer  
Dim platforms() As String  
Dim arr_size As Integer 

platforms = Split(Cells(2, 47), ", ")  
last_cell = Mid(Range("A1048576").End(xlUp).Address, 4)  
arr_size = len(platforms) // is there something like this?  
For x = 1 To last_cell  
    For y = 1 To arr_size 
     //do something   
    Next   
Next 
End Sub 

Meine Frage ist, wie kann ich die Größe des Array (arr_size) erhalten, die durch die Split-Funktion zurückgegeben wird, so dass ich in meiner for-Schleife verwenden könnte? Vielen Dank.

Antwort

11

Betrachten reichlich vorhanden mit LBound und Ubound:

Sub MP_division() 
    Dim last_cell As Long 
    Dim platforms() As String 
    Dim x As Long, y As Integer 

    With ThisWorkbook.Worksheets(3) 
     platforms = Split(.Cells(2, 47), ", ") 
     last_cell = .Cells(.Rows.Count, "A").End(xlUp).Row 
     For x = 1 To last_cell 
      For y = LBound(platforms) To UBound(platforms) 
       'do something 
      Next 
     Next 
    End With 
End Sub 

Btw, Split gibt immer Null-basierte Array (beginnt von 0, aber nicht von 1). Deshalb empfehle ich Ihnen, sowohl Ubound als auch Lbound zu verwenden.

Eine weitere Sache habe ich Dim last_cell As Integer-Dim last_cell As Long, da max Wert von Integer nur 32767 geändert und wenn die letzte Zeile größer wäre als 32767, würden Sie einen Fehler mit Integer erhalten.

Und avoid using Select/Active statements (es geht um Worksheets(3).Activate)

2
Dim first as integer 
Dim last as integer 
Dim arr() as string 
Dim lengthOfArray as integer 

'split your data and save it in arr' 

first = LBound(arr) 
last = UBound(arr) 

lengthOfArray = last - first 

msgbox lengthOfArray 'This will display the length of the array' 
+1

können Sie bitte weitere Details erklären Deine Antwort ? – Mostafiz

2

VBA LBound und UBound die erste und die letzte Feldposition zurückkehren, so die richtige Antwort ist:

size = UBound(myArray) - LBound(myArray) + 1