Datatransponering
För snabb hantering av data i större cellområden är det att föredra att läsa in all data till en matris (array). Matrisen är vanligtvis en-dimensionell och består av data som lagras horisontellt. Det gör att när datat ska skrivas tillbaka till en kolumn i arbetsbladet måste den innan dess transponeras tillbaka till sitt ursprungsskick.
Om antalet poster ej överstiger 5.461 stycken så kan vi användas oss av den inbyggda kalkylbladsfunktionen TRANSPONERA (TRANSPOSE) . Överstiger antalet poster denna gräns måste det till en egenutvecklad funktion.
Här demonstreras båda teknikerna.
Option Explicit
Option Base 1Sub Demonstration_DataTransponering()
'© 2002 Alla rättigheter XL-DennisDim wsBlad As Worksheet
Dim rnData As Range
Dim vaData As Variant
Dim j As LongSet wsBlad = ActiveWorkbook.Worksheets("Blad1")
Set rnData = wsBlad.Range(Range("A1"), Range("A65536").End(xlUp))
vaData = rnData.Value
For j = 1 To UBound(vaData, 1)
vaData(j, 1) = vaData(j, 1) * 10
Next j
'Om antal poster är mindre eller lika med max antal poster
'används den inbyggda TRANSPONERA-funktionen.
If UBound(vaData, 1) <= 5476 Then
rnData.Value = Application.Transpose(vaData)
Else
rnData.Value = DataTransponering(vaData)
End IfEnd Sub
Function DataTransponering(Matris)
'© 2002 Alla rättigheter XL-Dennis
Dim vaDataMatris() As Variant
Dim i As LongIf IsArray(Matris) Then
'Här omvandlas den horisontella matrisen till en vertikal matris.
ReDim vaDataMatris(LBound(Matris) To UBound(Matris), _
LBound(Matris) To LBound(Matris))
For i = LBound(vaDataMatris) To UBound(vaDataMatris)
vaDataMatris(i, LBound(vaDataMatris)) = Matris(i, 1)
Next iElse
MsgBox "Fel indata - En matris förväntas.", vbInformation
End If
'Returnerar den transponerade matrisen till den anropande sub-proceduren.
DataTransponering = vaDataMatris
End Function