Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Data v Excelu - přidání řádků dle daných čísel

Dobrý den,

jako ubytovací zařízení musíme hlásit ubytování cizinců. Bohužel export dat z našeho systému vypadá takto: 6REhRg.png jsou tam všechna data, která potřebujeme, ale máme vždy řádek toho kdo rezervaci udělal a k němu hosty (zbytek rodiny) v předposledním sloupci. v Posledním sloupci je počet lidí celkem na daném místě.

Pokud bych měl vše po řádcích, tak si již pospojuji automaticky data, změním formátování apod. Nedokáži však automaticky udělat to, aby podle třeba čísla Excel přidal N-1 řádků a ty vyplnil podle vzoru "rezervátora" (ideálně i vypsal konkrétní jména a data narození do přidaných řádků, ale to bych si případně již vypsal ručně.

Asi na to půjde nějaké makro, neumíte ho někdo sepsat?

Díky za případné nápady!

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
rýchly nástrel, nestíham Sub Doplnenie() Application.ScreenUpdating = False prvy = 2 For i = 1 To R…
robert13 11.07.2017 14:30
robert13
Ahoj, sorry že se do toho pletu. Jelikož nemám noc rád Select (i když v tomto případě je to asi jedn…
Siki83 11.07.2017 17:49
Siki83
Ještě mě napadlo řešení bez cyklu. Sub Doplnenie() Dim prvy As Byte Application.ScreenUpdating = Fa…
Siki83 11.07.2017 20:21
Siki83
Ahoj Siki, dáwno som Ťa nevidel! Konečne sa tu zas objavilo niečo na Excel, však? :-D
robert13 12.07.2017 10:19
robert13
Chýbajú mi informácie, odpoveď si neposlal, takže zatiaľ len takto. Aplikuj na svoju tabuľku. Funguj…
robert13 12.07.2017 11:45
robert13
Děkuji, půjdu to zkusit - e-mail jsem Ti poslal před chvilkou, tam máš odpovězené i to m,v,mv (což n…
Adam T. 12.07.2017 11:49
Adam T.
OK, mail prišiel. Odpíšem po tom, čo budem mať možnosť si to preštudovať. nový
robert13 12.07.2017 12:49
robert13
Jasně - úplně v pořádku ;-) nový
Adam T. 12.07.2017 13:16
Adam T.
Ahoj Roberte, jo jo máš pravdu, v poslední době se mi nedostává volného času. Tak sem kouknu jen spo… poslední
Siki83 13.07.2017 22:58
Siki83

rýchly nástrel, nestíham

Sub Doplnenie()
    Application.ScreenUpdating = False
    prvy = 2
    For i = 1 To Range("A1").End(xlDown).Row - 1
        For j = prvy To prvy + Range("O" & prvy) - 2
            Rows(j & ":" & j).Select
                Selection.Copy
                Selection.Insert Shift:=xlDown
        Next j
    prvy = prvy + Range("O" & prvy)
    Next i
    Application.CutCopyMode = False
    Range("A1").Select
End Sub

ďalej sa to dá tiež zautomatizovať.
Ak Ti s tým niekto zatiaľ neporadí, zajtra môžem pokračovať

Ahoj, sorry že se do toho pletu. Jelikož nemám noc rád Select (i když v tomto případě je to asi jedno), co takhle?:

Sub Doplnenie()
    Application.ScreenUpdating = False
    prvy = 2
    For i = 1 To Range("A1").End(xlDown).Row - 1
        For j = prvy To prvy + Range("O" & prvy) - 2
           With Rows(j & ":" & j)
                .Copy
                .Insert Shift:=xlDown
           End With
        Next j
    prvy = prvy + Range("O" & prvy)
    Next i
    Application.CutCopyMode = False
    Range("A1").Select
    Application.ScreenUpdating = False
End Sub

Ještě mě napadlo řešení bez cyklu.

Sub Doplnenie()
    
Dim prvy As Byte
    
Application.ScreenUpdating = False
    
    prvy = 2
           With Rows(prvy & ":" & prvy)
                .Copy
                .Resize(Range("O" & prvy) - 1).Insert Shift:=xlDown
           End With
    Application.CutCopyMode = False
    Range("A1").Select
Application.ScreenUpdating = False
End Sub

Chýbajú mi informácie, odpoveď si neposlal, takže zatiaľ len takto.
Aplikuj na svoju tabuľku.
Funguje to za predpokladu, že v stĺpci N sú zalamované údaje (čo predpokladám, že sú).
Ostáva poroztínať mená a dátumy narodenia...

Sub Doplnenie()
    Application.ScreenUpdating = False
    prvy = 2
    For i = 1 To Range("A1").End(xlDown).Row - 1
        zac = prvy
        pocet = Range("O" & prvy)
        For j = prvy To prvy + pocet - 2
            With Rows(j & ":" & j)
                .Copy
                .Insert Shift:=xlDown
            End With
        Next j
        Range("P" & zac) = Range("N" & zac)
        Application.CutCopyMode = False
        
        ria = zac
        PocOs = 0
dalsi:
        For k = 1 To Len(Range("P" & zac))
            If Mid(Range("P" & zac), k, 1) = Chr(10) Then
                Vymaz (ria + 1)
                Range("D" & ria + 1) = Mid(Range("P" & zac), 1, k - 1)
                PocOs = PocOs + 1
                Range("P" & zac) = Mid(Range("P" & zac), k + 1)
                ria = ria + 1
                GoTo dalsi
            End If
            If k = Len(Range("P" & zac)) And Range("P" & zac) <> "" Then
                Vymaz (ria + 1)
                Range("D" & ria + 1) = Range("P" & zac)
                PocOs = PocOs + 1
                Range("P" & zac) = ""
                Exit For
            End If
        Next k
        If PocOs <> (Range("O" & zac) - 1) Then
            MsgBox "Počet spoluubytovaných na riadku " & zac & " nesúhlasí s počtom osôb celkom", vbCritical, "Chyba"
            Exit Sub
        End If
        prvy = prvy + pocet
    Next i
    Range("A1").Select
End Sub
Sub Vymaz(rv)
    Range("A" & rv & ",D" & rv & ":F" & rv & ",M" & rv & ":O" & rv).ClearContents
End Sub

Je tam ošetrený prípad nesúladu medzi počtom uvedených spolubývajúcich v stĺpci N s počtom osôb celkom, uvedených v stĺpci O.
V takom prípade sa síce vytvorí plná kópia riadku rezervátora, ale ďalej sa nespracuje a postup sa zastaví.

Možno to ošetriť tak, že po zastavení sa údaje manuálne skorigujú a spustí sa makro od riadku s rezervátorom, u ktorého sa vyskytla chyba (treba dopracovať)

Mám pokračovať?

P.S. Skratky v, m a mv sú nespracovávané?

Děkuji, půjdu to zkusit - e-mail jsem Ti poslal před chvilkou, tam máš odpovězené i to m,v,mv (což není důležité je to muž/žena/nevyplněno), uděláme trochu jiný export, kde bude celkový počet hostů, ale o tom již také v e-mailu. Export dá bohužel počet do tří sloupců, které se budou muset prvně sloučit/sečíst.

Zpět do poradny Odpovědět na původní otázku Nahoru