VBA Excel - prohledání celého sloupce 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

VBA Excel - prohledání celého sloupce

Příspěvekod Branscombe » 10 zář 2010 09:59

Ahoj, potřeboval bych opět pomoc. Mám makro pro kopírování data z jednoho souboru do druhého.

Stanovil jsem si zdroj i cíl

Kód: Vybrat vše

With Worksheets("Zdroj")
Set SBlk = .Range("S2:S" & .Cells(Rows.Count, 1).End(xlUp).Row)
End With
Set TCll = Windows("Cil.xlsm").Worksheets("Cil").Range("F3")


A teď mu potřebuji říct, prohledej sloupec "H" v cili a pokud obsahuje hodnotu ze zdroje ze sloupce "Y" tak nic, pokud cil tuto hodnotu ještě neobsahuje kopíruj...

Kód: Vybrat vše

For Each SCll In SBlk.Cells
    tady potřebuji dopsat podmínku, pakliže TCll sloupec "H" neobsahuje hodnotu SCll.Offset(0, 6).Value  " Then
      With TCll
        .Offset(TOfsR, 0).Value = SCll.Offset(0, 0).Value
        TOfsR = TOfsR + 1
      End With
    End If
Next SCll


Díky předem za pomoc...

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

Re: VBA Excel - prohledání celého sloupce

Příspěvekod navstevnik » 10 zář 2010 10:31

A co takhle pripojit demo soubor obsahujici zdrojovy a cilovy list? Precizneji specifikovat podminky a co ma byt kopirovano (neni to jednoznacene uveden), nejlepe v priloze prehledne oznac.
Pro tvou informaci k reseni:
pro kazdou bunku ze zdroje (smycka For Each SCll In SBlk.Cells) musis prohledat cil (metoda find) a v pripade splneni podminky kopirovat, takze musis definovat i cilovy blok (nejspis dynamicky podle podminek pro kopirovani, dynamicka pojmenovana oblast?)

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

Re: VBA Excel - prohledání celého sloupce

Příspěvekod Branscombe » 10 zář 2010 10:47

vzorový soubor v příloze...

Definovat zdroj i cíl a kopírovat data už umím, jde mi jen o stanovení podmínky

Makro by mělo zkopírovat data z řádků ze zdroje do cíle za podmínky že na cílovém listu ve sloupci "C" není ještě pořadové číslo z kopírovaného řádku...
Přílohy
vzor.xlsm
(10.53 KiB) Staženo 43 x

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

Re: VBA Excel - prohledání celého sloupce

Příspěvekod navstevnik » 10 zář 2010 11:35

Prilozena procedura resi pozadovane (zaremovane radky 'Debug.Print... muzes odstranit):

Kód: Vybrat vše

Option Explicit

Sub Kopiruj()
  Dim SBlk As Range, SCll As Range
  Dim TBlk As Range, TCll As Range, TFRw As Range, TOfsR As Long
  ' definovat bloky
  With ActiveWorkbook.Worksheets("zdroj")
    Set SBlk = .Range("g1:g" & .Cells(.Rows.Count, 7).End(xlUp).Row)
    'Debug.Print SBlk.Address
  End With
  With ActiveWorkbook.Worksheets("cíl")
    Set TBlk = .Range("c1:c" & .Cells(.Rows.Count, 3).End(xlUp).Row)
    Set TFRw = .Range("c1")  ' vychozi radek pro nove zaznamy
    TOfsR = TBlk.Rows.Count  ' ofset pro nove zaznamy
    'Debug.Print TBlk.Address
  End With
  ' prochazet zdrojovy blok
  For Each SCll In SBlk.Cells
    ' prohledat cilovy blok
    With TBlk
      Set TCll = .Find(SCll.Value, LookIn:=xlValue, LookAt:=xlWhole)
      If TCll Is Nothing Then  ' nenalezeno, novy zaznam
        With TFRw
          .Offset(TOfsR, 0).Value = SCll.Value  ' poradove cislo
          .Offset(TOfsR, -1).Value = SCll.Offset(0, -4).Value  ' kod
          .Offset(TOfsR, -2).Value = SCll.Offset(0, -5).Value  'datum
          .Offset(TOfsR, 1).Value = SCll.Offset(0, -1).Value  ' akce
          ' nove definovat cilovy blok a ofset
          With Worksheets("cíl")
            Set TBlk = .Range("c1:c" & .Cells(.Rows.Count, 3).End(xlUp).Row)
            TOfsR = TBlk.Rows.Count
            'Debug.Print TBlk.Address
          End With
        End With
      End If
    End With
  Next SCll
  ' odstranit objektove promenne
  Set SBlk = Nothing
  Set SCll = Nothing
  Set TBlk = Nothing
  Set TCll = Nothing
  Set TFRw = Nothing
End Sub

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

Re: VBA Excel - prohledání celého sloupce

Příspěvekod Branscombe » 10 zář 2010 12:54

nefunguje mi to :-(

Vyhazuje chybu na řádku "Set TCll = .Find(SCll.Value, LookIn:=xlValue, LookAt:=xlWhole)"

Možná je to amatérské, ale napadlo mě proč si nepřekopírovat data ze zdroje do cíle a poté nepoužít rozšířený filtr s odstraněním duplicitních záznamů ?? To by přeci fungovalo taky a je to jednodušší ne ??

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

Re: VBA Excel - prohledání celého sloupce

Příspěvekod navstevnik » 10 zář 2010 16:18

Nemel jsem zrovna k dispozici Ex2007, takze to je nekompatibilita s nizsi verzi, ve ktere to je funkcni.
Mohls uvest, jakou chybu hlasil program.
Kdyby sis udelal jen trochu namahy a pokusil se zjistit pricinu chyby, tak bys zjistil, ze v Ex2007 v metode Find parametr LookIn vyzaduje hodnotu xlValues namisto v nizsi verzi xlValue. Uvedeny radek nahrad timto:

Kód: Vybrat vše

Set TCll = .Find(SCll.Value, LookIn:=xlValues, LookAt:=xlWhole)

Tvuj napad s pouzitim rozsireneho filtru je take mozny, ale musis vzhledem k rozdilne strukture polozek v zaznamech zdroj - cil pri kopirovani udelat transformaci sloupcu, zalozit hlavicku Kopirovat do:, vysledek filtrace pak prekopirovat na misto oblasti dat.

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

Re: VBA Excel - prohledání celého sloupce  Vyřešeno

Příspěvekod Branscombe » 13 zář 2010 10:19

Díky, nakonec jsem to udělal přes rozšířený filtr.. Ale díky moc za pomoc.


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Jak vrátit původní rozložení, sloupce v Tento počítač?
    od Lister99 » 29 čer 2024 19:06 » v Windows 11, 10, 8...
    2
    2208
    od Lister99 Zobrazit poslední příspěvek
    29 čer 2024 20:51
  • Upgrade grafické karty nebo celého PC?
    od dexikovicek » 21 srp 2024 22:33 » v Rady s výběrem hw a sestavením PC
    3
    2289
    od petr22 Zobrazit poslední příspěvek
    22 srp 2024 09:59
  • 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

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

Kdo je online

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