Ö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 data

Tipset 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:

 

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