PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerVBAVBAHämta data från samtliga flikarHämta data från samtliga flikar
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2023-01-24 11:19
 
 Ändrad av freppa87  på 2023-01-24 12:54:41

Hej, jag sitter med en excel som används som grund i några SAS körningar. Jag vill förenkla SAS inläsningen och har kommit fram till att jag vill gruppera all data i en enda flik (i samma flik). 

Jag har utgått från denna koden

Sub Combine()

    Dim I As Long

    Dim xRg As Range

    On Error Resume Next

    Worksheets.Add Sheets(1)

    ActiveSheet.Name = "Combined"

   For I = 1 To Sheets.Count

        Set xRg = Sheets(1).UsedRange

        xRg.ClearFormats

        If I > 1 Then

            Set xRg = Sheets(1).Cells(xRg.Rows.Count + 1, 1)

            xRg.ClearFormats

        End If

        Sheets(I).Activate

        ActiveSheet.UsedRange.Copy xRg

    Next

End Sub

Problemet(?) jag har är att det byggs ovanpå varandra, istället för att byggas på brevid. Mitt antagande är att jag måste ha en till loop där man definierar antalet kolumner (x) per flik för att läsa in datat från flik2 i kolumn x+1? Isåfall hur skulle man göra?

 

 

MVH

Fredrik

Nytt inlägg
 2023-01-24 14:15
 

Utan "ClearFormats" och kontroll av om bladet "Combined" redan finns:

 

Sub Combine()

    Dim I As Long
    Dim xRg As Range

    On Error Resume Next

'Skapar ett nytt blad (nr1) och ger det namnet "Combined"

    Worksheets.Add Sheets(1)
    ActiveSheet.Name = "Combined"

'ange startpunkt för inklistring: 
    Set xRg = Sheets("Combined").Range("A1")

'Loopa igenom alla blad utom det första (combine) och kopiera all data (used range)  till xRg ("Combined", cell A1)

   For I = 2 To Sheets.Count

        Sheets(I).UsedRange.Copy xRg

' flytta inklistringspunkten till Höger (samma som att gå med Ctrl+ högerpil) + en kolumn. och loopa (next)

        Set xRg = xRg.End(xlToRight).Offset(0, 1)

Next i

End Sub

 

om du har en massa formler i käll-bladen och vill köra "klistra in som värde" så kan du dela upp Copy/paste på två rader. Typ: 

Sheets(I).UsedRange.Copy
xRg.PasteSpecial Paste:=xlPasteValues

 

Om du har "smala tabeller" (en kolumn) så kankse inte Ctrl+högerpil funkar som du vill. Då kan du byta ut

        Set xRg = xRg.End(xlToRight).Offset(0, 1)
mot samma logik som använder för raderna, dvs:

        Set xRg = Sheets("Combined").Cells(1, Sheets("Combined").UsedRange.Columns.Count + 1)

Om du kollar CELLS() så ser du att den "fasta" 1:an står först nu (rad) medan beräkningen står efter kommetecknet (kolumn) 

Nytt inlägg
 2023-01-24 14:23
 

Glömde säga att det här är ren och rå klippa/klistra.

Du har inte gjort något för att kolla om raderna gäller samma person/objekt/whatewer (det vill man ju för det mesta ha när man kör "wide-data").

Behöver du göra sånt så rekomenderar jag att du kollar på "power-query" (data->hämta och transformera).

Där kan du lägga ihop data på korsen och tvärsen och de ingående tabellerna kan ha olika antal unika n

Nytt inlägg
 2023-01-25 07:27
 

 Funkade perfekt, tack så hjärtligt mycket 

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBAHämta data från samtliga flikarHämta data från samtliga flikar

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter