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 37 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
  • Datový model - aktualizace po přidání dalšího sloupce do Access
    od MK_Vs » 27 črc 2023 12:05 » v Kancelářské balíky
    0
    1843
    od MK_Vs Zobrazit poslední příspěvek
    27 črc 2023 12:05
  • Excel a OneDrive
    od sginfo » 11 zář 2023 15:28 » v Kancelářské balíky
    16
    6401
    od mirekol Zobrazit poslední příspěvek
    20 říj 2023 08:31
  • Excel - problém se vzorci
    od honzzicek » 28 čer 2023 21:45 » v Kancelářské balíky
    2
    1865
    od honzzicek Zobrazit poslední příspěvek
    01 črc 2023 08:57
  • Excel komparacedvou soborů Příloha(y)
    od teichmann.ondrej » 15 dub 2024 17:26 » v Kancelářské balíky
    11
    3410
    od teichmann.ondrej Zobrazit poslední příspěvek
    22 dub 2024 15:45
  • excel-posun makra
    od actionboy » 12 bře 2024 18:59 » v Kancelářské balíky
    1
    462
    od Grimm Zobrazit poslední příspěvek
    12 bře 2024 21:43

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

Kdo je online

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