Excel - porovnání dvou sloupců Vyřešeno

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

Moderátor: Mods_senior

vetchy
nováček
Příspěvky: 2
Registrován: prosinec 10
Pohlaví: Nespecifikováno
Stav:
Offline

Excel - porovnání dvou sloupců

Příspěvekod vetchy » 12 pro 2010 10:36

Dobrý den,
potřebuji poradit s porovnáním dvou sloupců v Excelu.

Ve sloupci B mám data (některé hodnoty se zde mohou opakovat). Ve sloupci C mám další data (opět se zde mohou různá data opakovat a můžu mít jiný počet dat než ve sloupci B).

Mou snahou je porovnat oba dva sloupce a vyloučit z nich položky, které jsou v obou dvou stejné. Např. když budu mít ve sloupci B hodnotu 1 3x a ve sloupci C pouze jednou, tak výsledkem porovnání bude, že ve sloupci A zůstane hodnota 1 2x a ve sloupci C nebude žádná.

Data v obou dvou sloupcích lze seřadit. Není podmínkou, aby výsledné porovnané sloupce byly opět B,C, ale pokud by to šlo, bylo by to lepší.

Navržený postup budu aplikovat na různě velé soubory dat (od pár údajů až po několik tisíc položek v každém ze sloupců).

Přikládám soubor s ukázkovými daty.

Poradí někdo? Už dlouho si s tím lámu hlavu.

Předem děkuji.
Přílohy
Pokus.xls
(18.5 KiB) Staženo 183 x

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

Re: Excel - porovnání dvou sloupců  Vyřešeno

Příspěvekod navstevnik » 12 pro 2010 12:57

Resenim je procedura VBA.
V editoru VBA (Alt+F11) vloz do standardniho modulu nize uvedenou proceduru a zavolej v editoru VBA klavesou F5 nebo v listu nabidka Nastroje>Makro>Makra>....:

Kód: Vybrat vše

Option Explicit

Sub ClearContentsClls()
  Dim BlkA As Range, BlkB As Range
  Dim Cll As Range, CllClr As Range
  Dim CntA As Long, CntB As Long, CntClr As Long
  Dim CntTmp As Long, CllTmp As Variant

  With Worksheets("list1")
    Set BlkA = .Range("b3:b" & Cells(.Rows.Count, 2).End(xlUp).Row)
    Set BlkB = .Range("c3:c" & Cells(.Rows.Count, 3).End(xlUp).Row)
    For Each Cll In BlkA.Cells
      If Cll <> vbNullString Then
        With WorksheetFunction
          CntA = .CountIf(BlkA, Cll.Value)
          CntB = .CountIf(BlkB, Cll.Value)
        End With
        CntClr = CntA
        If CntA > CntB Then
          CntClr = CntB
        End If
        If CntClr > 0 Then
          CllTmp = Cll.Value
          With BlkA
            CntTmp = 0
            Set CllClr = .Find(CllTmp, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)
            Do
              CllClr.ClearContents
              CntTmp = CntTmp + 1
              If CntTmp = CntClr Then Exit Do
              Set CllClr = .FindNext(CllClr)
            Loop
          End With
          With BlkB
            CntTmp = 0
            Set CllClr = .Find(CllTmp, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)
            Do
              CllClr.ClearContents
              CntTmp = CntTmp + 1
              If CntTmp = CntClr Then Exit Do
              Set CllClr = .FindNext(CllClr)
            Loop
          End With
        End If
      End If
    Next Cll
  End With
  BlkA.Sort Key1:=Range(BlkA.Resize(1, 1).Address), Order1:=xlAscending, Header:=xlYes, _
      OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
  BlkB.Sort Key1:=Range(BlkB.Resize(1, 1).Address), Order1:=xlAscending, Header:=xlYes, _
      OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
  Set Cll = Nothing
  Set CllClr = Nothing
  Set BlkA = Nothing
  Set BlkB = Nothing
End Sub

Podle potreby v procedure uprav nazev listu a cast adresy (je vcetne hlavicek sloupcu) a cislo sloupce (A:A=1, B:B=2,...) pro definici adresy porovnavanych bloku:
...
With Worksheets("list1")
Set BlkA = .Range("b3:b" & Cells(.Rows.Count, 2).End(xlUp).Row)
Set BlkB = .Range("c3:c" & Cells(.Rows.Count, 3).End(xlUp).Row)
...

Testuj na kopii dat, nejsou osetreny chybove stavy vznikle v dusledku nespravneho zadani adres.

vetchy
nováček
Příspěvky: 2
Registrován: prosinec 10
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel - porovnání dvou sloupců

Příspěvekod vetchy » 12 pro 2010 20:47

Ahoj,
díky moc za dané makro. Zatím jsem je vyzkoušel na dvou různých souborech a vždy to udělalo přesně to, co jsem potřeboval.
Jelikož tuto operaci budu používat docela často ušetří mi to moc práce a času, takže ještě jednou díky.

// Označuji za vyřešené.
// mike007


  • 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
    3908
    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
    2884
    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
    4778
    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
    828
    od Zivan Zobrazit poslední příspěvek
    12 pro 2024 12:26
  • Přechod z Excel 21 na Excel 24
    od Snekment » 29 led 2025 13:46 » v Kancelářské balíky
    2
    12191
    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 7 hostů