Excel VBA - překopírování dat Vyřešeno

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

Moderátor: Mods_senior

Uživatelský avatar
Branscombe
Level 3
Level 3
Příspěvky: 469
Registrován: červen 09
Pohlaví: Muž
Stav:
Offline

Re: Excel VBA - překopírování dat

Příspěvekod Branscombe » 30 čer 2010 13:55

Ahoj díky moc, setřídění vyřeším tedy jinak ...

Narazil jsem na další potřebnou úpravu makra. Vím že jsem to měl napsat už na začátku, ale to jsem to bohužel ještě netušil ... :-/
Potřeboval bych upravit makro tak abych z listu "Data" kopíroval sloupce A,B a D do A, B a C.
Zkoušel jsem to upravovat sám, ale beznadějně tak bych si rád nechal poradit ... :-/
Přílohy
akce.xlsm
(18.6 KiB) Staženo 19 x

Reklama
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel VBA - překopírování dat

Příspěvekod navstevnik » 30 čer 2010 14:58

Upravena procedura vcetne drive pozadovaneho setrideni na listu Akce:

Kód: Vybrat vše

Option Explicit

Sub CopyData()
  Dim SBlk As Range, SCll As Range, OfsR As Integer
  Dim Cpy1 As Boolean, Cpy2 As Boolean
  Dim TBlk As Range, TCll As Range, NCll As Range
  With Worksheets("data")  ' zdrojovy blok
    Set SBlk = .Range("b2:b" & .Cells(Rows.Count, 1).End(xlUp).Row)
  End With
  ' pro kazdou bunku zdroje prohledat sloupec B:B na akce
  With SBlk
    OfsR = .Rows.Count - 1  ' ofset posledniho radku zdrojoveho bloku
    Set SBlk = .Resize(1, 1)  ' modifikovany zdrojovy blok
  End With
  Do While OfsR >= 0  ' smycka prochazi zdrojovy sloupec
    Set SCll = SBlk.Offset(OfsR, 0)  ' zdrojova bunka
    With Worksheets("akce")  ' cilovy blok
      Set TBlk = .Range("b6:b" & .Cells(Rows.Count, 1).End(xlUp).Row)
    End With
    Cpy1 = True: Cpy2 = False
    For Each TCll In TBlk.Cells  ' prohledat cilovy blok
      ' podminky - shoda pro sloupce B:B. v J:J <>4
      If TCll.Value = SCll.Value And TCll.Offset(0, 8).Value <> 4 Then Cpy1 = False
      ' podminky - shoda pro sloupce B:B. v J:J =4
      If TCll.Value = SCll.Value And TCll.Offset(0, 8).Value = 4 Then Cpy2 = True
    Next TCll
    If (Cpy1 And Not Cpy2) Or (Cpy1 And Cpy2) Then
      ' prvni volny radek na akce
      With Worksheets("akce")
        Set NCll = .Cells(Rows.Count, "b").End(xlUp).Offset(1, 0)
      End With
      ' kopirovat data
      NCll.Offset(0, -1).Value = SCll.Offset(0, -1).Value  ' ze sloupce A do A
      NCll.Value = SCll.Value  ' ze sloupce B do B
      ' kopirovat format z A:B
      SCll.Resize(1, 2).Offset(0, -1).Copy
      NCll.Offset(0, -1).PasteSpecial Paste:=xlFormats
      Application.CutCopyMode = False
      ' kopirovat data ze sloupce E do C
      NCll.Offset(0, 1).Value = SCll.Offset(0, 2).Value
      ' kopirovat format z E
      SCll.Resize(1, 1).Offset(0, 2).Copy
      NCll.Offset(0, 1).PasteSpecial Paste:=xlFormats
      Application.CutCopyMode = False
    End If
    OfsR = OfsR - 1
  Loop
  ' setridit zaznamy na listu akce
  With Worksheets("akce")  ' cilovy blok
    Set TBlk = .Range("a6:a" & .Cells(Rows.Count, 1).End(xlUp).Row)
  End With
  TBlk.Resize(TBlk.Rows.Count, 10).Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
  Set NCll = Nothing
  Set SBlk = Nothing
  Set SCll = Nothing
  Set TBlk = Nothing
  Set TCll = Nothing
End Sub

PS: vsadil jsem boty, ze to neni posledni pozadavek na upravu, tak se snaz

Uživatelský avatar
Branscombe
Level 3
Level 3
Příspěvky: 469
Registrován: červen 09
Pohlaví: Muž
Stav:
Offline

Re: Excel VBA - překopírování dat

Příspěvekod Branscombe » 02 črc 2010 13:37

Ahoj, díky moc za makro, zatím vše funguje jak má ... Já doufám že už to byl poslední požadavek, ale kdo ví ještě uvidíme ... ;-)
Naposledy upravil(a) Branscombe dne 09 črc 2010 10:45, celkem upraveno 1 x.

Uživatelský avatar
Branscombe
Level 3
Level 3
Příspěvky: 469
Registrován: červen 09
Pohlaví: Muž
Stav:
Offline

Re: Excel VBA - překopírování dat

Příspěvekod Branscombe » 09 črc 2010 10:45

No tak aby jsi neprohrál sázku a nemusel chodit bos, tak bych potřeboval buď doplnit předchozí makro nebo zapsat nové, nevím co je lepší a výhodnější.
Potřeboval bych překopírovat buňky z listu "Akce" na list "Data", pouze z řádků kde ve sloupci "G" je cokoliv napsáno. Buňky ze sloupce z A do F, z B do I, z C do G, z G do J a do sloupce H vložit vzorec (třeba =A1; vzorec si pak upravím)

vzorový příklad v příloze

Díky moc předem za námahu
Přílohy
akce.xlsm
(19.06 KiB) Staženo 16 x

navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel VBA - překopírování dat

Příspěvekod navstevnik » 09 črc 2010 13:24

Jsem rad, ze mi zustanou boty, neb za poskytovane rady si nove nekoupim :x
Nize je samostatna procedura, ktera z listu akce prenese na list data obsah zadanych bunek (nejsou osetreny pripadne kolizni stavy v dusledku nekorektniho postupu uzivatele):

Kód: Vybrat vše

Sub CopyDataAkceToData()
  Dim SBlk As Range, SCll As Range
  Dim TCll As Range, TOfsR As Long
  With Worksheets("akce")  ' zdrojovy blok
    Set SBlk = .Range("a6:a" & .Cells(Rows.Count, 1).End(xlUp).Row)
  End With
  Set TCll = Worksheets("data").Range("f2")
  ' prochazet ve smycce list akce a kopirovat prislusne sloupce
  TOfsR = 0
  For Each SCll In SBlk.Cells
    If SCll.Offset(0, 6).Value <> vbNullString Then
      With TCll
        .Offset(TOfsR, 0).Value = SCll.Offset(0, 0).Value
        .Offset(TOfsR, 3).Value = SCll.Offset(0, 1).Value
        .Offset(TOfsR, 1).Value = SCll.Offset(0, 2).Value
        .Offset(TOfsR, 4).Value = SCll.Offset(0, 6).Value
        .Offset(TOfsR, 2).Formula = "=A1"
        TOfsR = TOfsR + 1
      End With
    End If
  Next SCll
  Set TCll = Nothing
  Set SCll = Nothing
  Set SBlk = Nothing
End Sub

PS.: Vzhledem k tomu, ze pozadovane procedury jsou na jedno brdo, je nacase se pokusit napsat obdobne procedury sam, jinak vskutku budes s kazdou malickosti chodit na poradnu, tim nechci rict, ze se nemas ptat vubec.

Uživatelský avatar
Branscombe
Level 3
Level 3
Příspěvky: 469
Registrován: červen 09
Pohlaví: Muž
Stav:
Offline

Re: Excel VBA - překopírování dat  Vyřešeno

Příspěvekod Branscombe » 13 črc 2010 12:39

Ahoj, díky moc ... máš samozřejmě pravdu, nebylo by od věci pokusit se napsat si to sám, ale zkoušel jsem předělat první proceduru a jak je vidět tak jsem to dělal moc složitě... :-/

PS: Ani raděj nebudu uvádět jak dlouho jsem to zkoušel předělat - byla by to ostuda :-(


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • 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
    4772
    od Riviera kid Zobrazit poslední příspěvek
    02 zář 2024 16:21
  • Přechod z Excel 21 na Excel 24
    od Snekment » 29 led 2025 13:46 » v Kancelářské balíky
    2
    12187
    od Snekment Zobrazit poslední příspěvek
    29 led 2025 15:05
  • Pohoda a excel Příloha(y)
    od brownwld » 06 kvě 2025 17:28 » v Kancelářské balíky
    1
    4599
    od atari Zobrazit poslední příspěvek
    07 kvě 2025 09:41
  • Excel - výpočet nočních hodin Příloha(y)
    od Uziv00 » 17 říj 2024 11:22 » v Kancelářské balíky
    3
    3316
    od lubo. Zobrazit poslední příspěvek
    24 říj 2024 00:00
  • Excel 2016 - vzorec kombinace podmínek Příloha(y)
    od MK_Vs » 08 led 2025 17:56 » v Kancelářské balíky
    5
    4067
    od lubo. Zobrazit poslední příspěvek
    14 led 2025 00:51

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

Kdo je online

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