Överföra data
Här demonstreras några tekniker för att överföra data mellan två arbetsblad i konkreta situationer.
Tipsen visar också prov på hur vi kan använda oss av kalkylbladsfunktioner. Dessa är många gånger mycket snabbare än egenutvecklade VBA-rutiner.
Överföra registrerad dataTipset belyser hur vi kan överföra data i en kolumn från ett arbetsblad till flertal rader i ett annat arbetsblad.
Utgångspunkten är att få data från cellområdet A1:A10 i arbetsbladet "Blad1" överfört till arbetsbladet "Blad2".
De inmatade uppgifterna ska läggas in som poster efter varandra. Varje post ska läggas in på en egen rad i kolumnområdet A:J.
Två problem uppstår här:
- Kolumndata som läses in i en VBA-matris måste omvandlas till raddata. Annars kan inte XL överföra samtliga värden från VBA-matrisen till cellområdet då matriser per definition är horisontell till sin karaktär.
Lösningen består i att använda sig av kalkylbladsfunktionen TRANSPOSE (TRANSPONERA).(Funktionen kan max hålla 5461 st värden. Om behovet är större krävs att vi skapar en egen funktion.)
- Identifiera nästa tomma rad i kolumnområdet A:J.
Lösningen består i att vi använder oss av kalkylbladsfunktionen COUNTA (ANTALV).
Sub Overfora_Data() '© 2001 Alla rättigheter XL-Dennis
Dim wsMal As Worksheet
Dim rnCell As Range, rnKalla As Range
Dim vaIndata As Variant
Dim lnNastaRad As Long
Set rnKalla = ActiveWorkbook.Worksheets("Blad1").Range("A1:A10")
Set wsMal = ActiveWorkbook.Worksheets("Blad2")'Variabeln håller den första tomma raden i A-kolumnen
lnNastaRad = _
Application.WorksheetFunction.CountA(wsMal.Range("A:A")) + 1
'Matrisen tilldelas cellvärdena
vaIndata = rnKalla.Value
'Överföring av data sker mha kalkylbladsfunktionen TRANSPOSE
wsMal.Range("A" & lnNastaRad & ":J" & lnNastaRad) = Application. _
WorksheetFunction.Transpose(vaIndata)
Application.ScreenUpdating = False
rnKalla.Value = ""
Application.ScreenUpdating = True
End Sub
Överföra data från en lista till en ny lista
Tipset belyser hur vi kan uppdatera en ny lista med egen data från en äldre lista.
Bilden nedan visar den gamla lista:
Bilden nedan visar den nya listan, där data har överförts från den gamla listan:
Sub Overfora_DataI()
'© 2001 Alla rättigheter XL-Dennis
Dim wsBlad1 As Worksheet, wsBlad2 As Worksheet
Dim rnOmradeMal As Range, rnOmradeKalla As Range
Dim i As Integer
Set wsBlad1 = ActiveWorkbook.Worksheets("Nya listan")
Set wsBlad2 = ActiveWorkbook.Worksheets("Gamla listan")
Set rnOmradeMal = wsBlad1.Range("A2", Range("A65536").End(xlUp))
With wsBlad2
Set rnOmradeKalla = .Range(.Cells(2, 1), .Cells(Rows.Count, 2).End(xlUp))
End With
Application.ScreenUpdating = False
'Kalkylbladsfunktionen VLookup returnerar antingen det önskade värdet eller
'felmeddelande #Saknas!
For i = 1 To rnOmradeMal.Rows.Count
rnOmradeMal(i).Offset(0, 1) = _
Application.VLookup(CStr(rnOmradeMal(i).Value), rnOmradeKalla, 2, 0)
Next i
Application.ScreenUpdating = True
End Sub