Excel VBA - kopírování dat do sloupců Vyřešeno

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

msabrsula
nováček
Příspěvky: 14
Registrován: květen 07
Pohlaví: Nespecifikováno
Stav:
Offline

Excel VBA - kopírování dat do sloupců  Vyřešeno

Příspěvekod msabrsula » 26 srp 2015 16:13

Ahoj všem,

potřeboval bych poradit s jedním makrem v Excelu. V příloze je vložen ukázkový soubor.

Jde o to, že do sloupce C vkládám určitá data (buňky C2:C100000) a ty je potřeba náhodně seřadit a tyto náhodně seřazené data zkopírovat do sloupce F (F2:F100000). Dále data ze sloupce C znova náhodně seřadit a vložit do sloupce G (G2:G100000). Dále data ze sloupce C znova náhodně seřadit a vložit do sloupce H (H2:H100000). A tak pořád dále. Potřebuji dostat 3000 sloupců (F:DKO) kde budou náhodně seřazená data ze sloupce C.

Podařilo se mi udělat makro, které provede první operaci – tj.: náhodně seřadí data ze sloupce C a ty zkopíruje do sloupce F. Teď ale nevím jak dál – jak dostat pokaždé znova seřazená dat do dalších 2999 sloupců.

Děkuji za pomoc a doufám, že jsem to napsal srozumitelně.

Moje vytvořené makro:

Sub Nahodne_poradi_dat()
'
' Nahodne_poradi_dat Makro
'
'
Range("C:D").Select
ActiveWorkbook.Worksheets("List1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("List1").Sort.SortFields.Add Key:=Range("D2:D100000"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("List1").Sort
.SetRange Range("C1:D100000")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("C2:C100000").Select
Selection.Copy
Range("F2").Select
ActiveSheet.Paste

End Sub
Přílohy
Nahodne serazeni dat - priklad.xlsm
(36.94 KiB) Staženo 56 x

Reklama
guest
Pohlaví: Nespecifikováno

Re: Excel VBA - kopírování dat do sloupců

Příspěvekod guest » 27 srp 2015 10:43

Náhodná čísla používáte, takže OK. Pak může nastoupit buď filtr a řazení nebo maticový vzorec. Sto tisíc dat je ale maticový vzorec masakr, takže doporučuju stávající postup, ovládání filtru přes VBA a kopírování na jiný list a do patřičného sloupce s využitím .Offset.

lubo.
Level 2
Level 2
Příspěvky: 196
Registrován: červen 13
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel VBA - kopírování dat do sloupců

Příspěvekod lubo. » 27 srp 2015 11:46

Zkus něco takového:

Kód: Vybrat vše

Sub Nahodne_poradi_dat2()
Dim V() As Variant
Dim N1 As Long, N2 As Long
Dim X As Long
Dim i As Long
Dim ss As Variant

Dim cil As Range

  V = Range("C2:C101").Value2        ' rozsah zdrojových dat
  N1 = LBound(V, 1)
  N2 = UBound(V, 1)
 
  Set cil = Range("F2").Resize(N2, 1)
 
  For s = 1 To 10   ' nastav počet sloupců
    For i = N2 To N1 + 1 Step -1
       X = Int(Rnd() * (i - N1 + 1)) + N1
       ss = V(X, 1)
       V(X, 1) = V(i, 1)
       V(i, 1) = ss
    Next i
     
    cil.Value2 = V
    Set cil = cil.Offset(0, 1)
 
  Next ' sloupec
End Sub


guest
Pohlaví: Nespecifikováno

Re: Excel VBA - kopírování dat do sloupců

Příspěvekod guest » 27 srp 2015 12:33

No, něco jsem si zkusil...

http://leteckaposta.cz/419941086

Bohužel to kolabuje cca na 1300 sloupcích. Nemám pravděpodobně dost prostředků na tuhle megalomanskou úlohu (100 000 řádků x 3 000 sloupců). I když ta data vygenerujete, v Excelu je bez pořádné výbavy nikdy nezpracujete.

msabrsula
nováček
Příspěvky: 14
Registrován: květen 07
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel VBA - kopírování dat do sloupců

Příspěvekod msabrsula » 27 srp 2015 16:39

Ahojte, oběma moc děkuju za reakci a za pomoc

To xlnc:
Moc děkuju za soubor s makrem-dělá to přesně co potřebuju :-) Můj počítač také neudržel 100000 řádků, ale po redukci na 50000 (což pro většinu případů bude stačit je to OK.

Mám ještě jeden dotaz. Seřazené hodnoty se kopírují do Listu2 od buňky A1. V Listu 2 bych na začátku potřeboval jeden prázdný sloupec a řádek - tzn. aby se data nakopírovaly až od buňky B2. Můžete mi pomoci jak upravit makro, aby to takto fungovalo?

Zkoušel jsem upravit Cil v makru takto: " Set wshListCil = Worksheets("List2!B2") " , ale to nefunguje.

Díky za pomoc


Makro:

Kód: Vybrat vše

Sub Makro1()

    Dim wshListZdroj As Worksheet
    Dim wshListCil As Worksheet

    Dim rngOblastDat As Range

    Dim i As Integer

    Application.ScreenUpdating = False

    'wshListZdroj má nastaven ruční přepočet
    Set wshListZdroj = Worksheets("List1")
    Set wshListCil = Worksheets("List2")

    'oblast dat pro kopírování
    Set rngOblastDat = wshListZdroj.Range("B1:B50000")

    For i = 1 To 3000

        Application.StatusBar = "Zpracovávám " & i & " záznam."
       
        'přepočet listu
        wshListZdroj.Calculate

        'a setřídění
        With wshListZdroj.Sort
            .SetRange Range("A1:B50000")
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With

        'kopie dat do cílového listu
        wshListCil.Cells(1, i).Resize(50000, 1).Value = rngOblastDat.Value
    Next i
   
    Application.StatusBar = False
    Application.ScreenUpdating = True

End Sub


guest
Pohlaví: Nespecifikováno

Re: Excel VBA - kopírování dat do sloupců

Příspěvekod guest » 27 srp 2015 21:30

Kód: Vybrat vše

        'kopie dat do cílového listu
        wshListCil.Cells(2, i + 1).Resize(50000, 1).Value = rngOblastDat.Value

msabrsula
nováček
Příspěvky: 14
Registrován: květen 07
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel VBA - kopírování dat do sloupců

Příspěvekod msabrsula » 29 srp 2015 08:46

To xlnc:
Super práce, moc děkuju :)


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Tisk sloupců vedle sebe na A4 - Excel
    od atari » 24 dub 2025 10:51 » v Kancelářské balíky
    5
    3902
    od atari Zobrazit poslední příspěvek
    26 dub 2025 09:11
  • Filtr sloupců
    od sginfo » 24 čer 2024 12:02 » v Kancelářské balíky
    1
    2882
    od lubo. Zobrazit poslední příspěvek
    25 čer 2024 09:16
  • EXCEL -jak otevřít 2 excel sobory abych je viděla současne a samostatně
    od Ketty02 » 30 srp 2024 21:19 » v Vše ostatní (sw)
    2
    4736
    od Riviera kid Zobrazit poslední příspěvek
    02 zář 2024 16:21
  • ComboBox v Excelu kopírování Příloha(y)
    od LukM » 19 říj 2024 14:03 » v Kancelářské balíky
    0
    2633
    od LukM Zobrazit poslední příspěvek
    19 říj 2024 14:03
  • Přechod z Excel 21 na Excel 24
    od Snekment » 29 led 2025 13:46 » v Kancelářské balíky
    2
    12159
    od Snekment Zobrazit poslední příspěvek
    29 led 2025 15:05

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 5 hostů