Excel - VBA porovnání buňek a následné kopírování Vyřešeno

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

Moderátor: Mods_senior

Fefro
nováček
Příspěvky: 4
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline

Excel - VBA porovnání buňek a následné kopírování

Příspěvekod Fefro » 22 říj 2011 20:27

Ahoj všem,

potřeboval bych poradit s jedním makrem. V příloze je soubor. Potřebuji na listu1 ve sloupci A najít text z listu2 sloupce A a podle shody zkopírovat hodnotu ze sloupce B z listu2 do sloupce B na listu1. (To co z toho chci dostat je v souboru Výsledek.xlsx)

Doufám že je dotaz srozumitený a všem děkuji za rady.
Přílohy
Výsledek.xlsx
(8.43 KiB) Staženo 144 x
Příloha.xlsx
(8.35 KiB) Staženo 126 x

Reklama
Fefro
nováček
Příspěvky: 4
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline

Re: Excel - VBA porovnání buňek a následné kopírování

Příspěvekod Fefro » 24 říj 2011 08:56

Ahoj všem,
zatím jsem dal dohromady následující

Kód: Vybrat vše

Sub pokus()
Dim List1 As Worksheet, Blok1 As Range, Bunka1 As Range
Dim List2 As Worksheet, Blok2 As Range, Bunka2 As Range
  ' definice listu a bloku
  Set List1 = ActiveWorkbook.Worksheets("List1")
  Set List2 = ActiveWorkbook.Worksheets("List2")
  With List1  ' definovat blok na List1
    If Len(.Range("a1").Value) > 0 Then
      Set Blok1 = .Range("a1:a" & .Range("a1").Offset(.Cells.Rows.Count - 1, 0).End(xlUp).Row)
      With List2  ' definovat blok na List2
        If Len(.Range("a1").Value) > 0 Then
          Set Blok2 = .Range("a1:a" & .Range("a1").Offset(.Cells.Rows.Count - 1, 0).End(xlUp).Row)
            For Each Bunka2 In Blok2.Cells  ' prochazet blok na List2
            With Blok1  ' a hledat na List1
              Set Bunka1 = .Find(Bunka2.Value)
                If Not Bunka1 Is Nothing Then
                Bunka1.Offset(0, 1).Value = Bunka2.Offset(0, 1).Value  ' nahradit hodnotu
                End If
            End With
            Next Bunka2
        Else
          MsgBox "Na listu " & List2.Name & " žádná data"
          Exit Sub
        End If
      End With
    Else
      MsgBox "Na listu " & List1.Name & " žádná data"
      Exit Sub
    End If
  End With
  Set List1 = Nothing
  Set Blok1 = Nothing
  Set Bunka1 = Nothing
  Set List2 = Nothing
  Set Blok2 = Nothing
  Set Bunka2 = Nothing
End Sub


Nevíte někdo co doplnit aby makro zkopírovalo buňku B z listu2 do všech příslušných řadků Listu1 a ne jenom do první kterou najde?

Předem děkuji za rady

cmuch
Level 4.5
Level 4.5
Příspěvky: 1547
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: Excel - VBA porovnání buňek a následné kopírování

Příspěvekod cmuch » 24 říj 2011 18:25

Já udělal dnes v práci něco podobného,
Nejsou tam teda ty tvé MSGBOXy
Funguje to skvěle, ale až na to. že ty buňky musí být shodné :mad:, ne jak u tebe pouze část.

Kód: Vybrat vše

Sub KopirujHodnoty()
  Dim SList As Worksheet, BlkA As Range, SCll As Range
  Dim TList As Worksheet, BlkB As Range, TCll As Range
 
  Set SList = ActiveWorkbook.Worksheets("List1")
  Set TList = ActiveWorkbook.Worksheets("List2")
' definovani bloku bunek na listech
      With SList
        Set BlkA = .Range(("a1:a") & .Cells(.Rows.Count, "a").End(xlUp).Row)
     
      With TList
        Set BlkB = .Range(("a1:a") & .Cells(.Rows.Count, "a").End(xlUp).Row)
     
' prochazet BlkA
     For Each TCll In BlkA.Cells
' prohledavat BlkB
      With BlkB
        Set SCll = .Find(TCll.Value)
        If Not SCll Is Nothing Then ' pri shode zkopirovat hodnotu sl.B do listu1 sl.B
        TCll.Offset(0, 1).Value = SCll.Offset(0, 1).Value
        End If
      End With
     Next TCll
    End With
    End With
' odstranit promenne
  Set SCll = Nothing
  Set BlkA = Nothing
  Set SList = Nothing
  Set TCll = Nothing
  Set BlkB = Nothing
  Set TList = Nothing
End Sub


Ale třeba mám někde chybku.

Fefro
nováček
Příspěvky: 4
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline

Re: Excel - VBA porovnání buňek a následné kopírování

Příspěvekod Fefro » 24 říj 2011 19:55

Ahoj,

takhle jsem to měl také. Pokud tam máš:
Set SCll = .Find(TCll.Value)
tak to funguje bez chyby akorát hledáš hodnotu z listu1 v listu2.( buňky nemusí být shodné, ale buňka na listu2 musí obsahovat řetězec z buňky na listu1).
já to otočil (v tvém případě):
Set TSCll = .Find(SCll.Value)
a už mi to tak perfektně nechodí :(
potřeboval bych tam doplnit druhej cyklus ale nedaří se a nedaří :(

Napadá někoho jak to rozchodit?

Předem dík všem

cmuch
Level 4.5
Level 4.5
Příspěvky: 1547
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: Excel - VBA porovnání buňek a následné kopírování

Příspěvekod cmuch » 24 říj 2011 20:30

Tak jsem na to přišel :D

Do tvého kodu vlož za
If Not Bunka1 Is Nothing Then

Kód: Vybrat vše

frstAddr = Bunka1.Address
              Do
                Bunka1.Offset(0, 1).Value = Bunka2.Offset(0, 1).Value  ' nahradit hodnotu
              Set Bunka1 = .FindNext(Bunka1)
              Loop While Bunka1.Address <> frstAddr

a bude to fakčit :bigups:

Edit:
Ještě definuj
Dim frstAddr As String

Fefro
nováček
Příspěvky: 4
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline

Re: Excel - VBA porovnání buňek a následné kopírování  Vyřešeno

Příspěvekod Fefro » 24 říj 2011 21:12

Super už to chodí tak jak má :)

Díky moc za rady


  • 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
    4792
    od Riviera kid Zobrazit poslední příspěvek
    02 zář 2024 16:21
  • Porovnaní sestavy + kde muže být problém? Příloha(y)
    od Ribendik » 12 pro 2024 11:04 » v Rady s výběrem hw a sestavením PC
    2
    831
    od Zivan Zobrazit poslední příspěvek
    12 pro 2024 12:26
  • ComboBox v Excelu kopírování Příloha(y)
    od LukM » 19 říj 2024 14:03 » v Kancelářské balíky
    0
    2650
    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
    12212
    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
    4678
    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 2 hosti