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 1

Sub Demonstration_DataTransponering()
  
'© 2002 Alla rättigheter XL-Dennis

   Dim wsBlad As Worksheet
  
Dim rnData As Range
  
Dim vaData As Variant
  
Dim j As Long

   Set 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 If

 End Sub

 

Function DataTransponering(Matris)

   '© 2002 Alla rättigheter XL-Dennis
  
Dim vaDataMatris() As Variant
  
Dim i As Long

    If 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 i

   Else

      MsgBox "Fel indata - En matris förväntas.", vbInformation

   End If

    'Returnerar den transponerade matrisen till den anropande sub-proceduren.

   DataTransponering = vaDataMatris

End Function