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.
							Excel - porovnání dvou sloupců Vyřešeno
Excel - porovnání dvou sloupců
- Přílohy
 - 
			
		
		
				
- Pokus.xls
 - (18.5 KiB) Staženo 188 x
 
 
- 
				navstevnik
 - Level 4

 - Příspěvky: 1142
 - Registrován: srpen 08
 - Pohlaví: 

 - Stav:
		Offline
 
Re: Excel - porovnání dvou sloupců Vyřešeno
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>....:
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.
			
									
									
						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 SubPodle 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.
Re: Excel - porovnání dvou sloupců
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
			
									
									
						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
 
 
- 
				
- 5
 - 5469
 - 
						od atari
						Zobrazit poslední příspěvek 
26 dub 2025 09:11
 
 - 
				
- 
												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
 - 1270
 - 
						od Zivan
						Zobrazit poslední příspěvek 
12 pro 2024 12:26
 
 - 
												
 - 
				
- 2
 - 13968
 - 
						od Snekment
						Zobrazit poslední příspěvek 
29 led 2025 15:05
 
 - 
				
- 1
 - 7033
 - 
						od atari
						Zobrazit poslední příspěvek 
07 kvě 2025 09:41
 
 - 
				
- 
												Excel 2016 - vzorec kombinace podmínek Příloha(y)
od MK_Vs » 08 led 2025 17:56 » v Kancelářské balíky - 5
 - 5696
 - 
						od lubo.
						Zobrazit poslední příspěvek 
14 led 2025 00:51
 
 - 
												
 
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů

