Excel - porovnání dvou sloupců

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

Moderátor: Mods_senior

Zamčeno
vetchy
nováček
Příspěvky: 2
Registrován: 11 pro 2010 14:23

Excel - porovnání dvou sloupců

Příspěvek od vetchy »

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 190 x
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: 29 srp 2008 16:49

Re: Excel - porovnání dvou sloupců

Příspěvek od navstevnik »

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: 11 pro 2010 14:23

Re: Excel - porovnání dvou sloupců

Příspěvek od vetchy »

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
Zamčeno
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Tisk sloupců vedle sebe na A4 - Excel
    od atari » » v Kancelářské balíky
    5 Odpovědi
    6013 Zobrazení
    Poslední příspěvek od atari
  • Porovnaní sestavy + kde muže být problém?
    od Ribendik » » v Rady s výběrem hw a sestavením PC
    2 Odpovědi
    1396 Zobrazení
    Poslední příspěvek od Zivan
  • Přechod z Excel 21 na Excel 24
    od Snekment » » v Kancelářské balíky
    2 Odpovědi
    14503 Zobrazení
    Poslední příspěvek od Snekment
  • Pohoda a excel
    od brownwld » » v Kancelářské balíky
    1 Odpovědi
    7424 Zobrazení
    Poslední příspěvek od atari
  • Excel 2016 - vzorec kombinace podmínek
    od MK_Vs » » v Kancelářské balíky
    5 Odpovědi
    6224 Zobrazení
    Poslední příspěvek od lubo.

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