Řešení makrem pro výpis na List3:
Sub Hledani_a_vypis_rozdilu()
Dim i As Long
Dim j As Long
Dim radek As Long
radek = 1
Sheets(List3.Name).Range("A1:A1000").ClearContents
For i = 2 To 6
For j = 2 To 5
If Sheets(List1.Name).Cells(i, j) <> Sheets(List2.Name).Cells(i, j) Then
Sheets(List3.Name).Cells(radek, 1).Value = Sheets(List1.Name).Cells(i, 1) & " - " _
& Application.WorksheetFunction.Text(Sheets(List1.Name).Cells(1, j), "d.m.yyyy") & " mělo být " & _
Sheets(List1.Name).Cells(i, j) & ", uvedl/a " & Sheets(List2.Name).Cells(i, j)
radek = radek + 1
End If
Next j
Next i
End SubP.
Jeden z nástřelů možného řešení.
P.
Viz příloha:
Nebylo by lepší to udělat přes vzorce?
Vytvořím třetí list, který bude stejný jako List1 a List2, a zde dám jednoduché ověření přes funkci KDYŽ.
P.
Např.:
=KDYŽ(List1!B2=List2!B2;"OK";"Chyba")
Jde ti tedy vlastně o vyfiltrování hodnot, které mají ve sloupci "vp" jinou hodnotu na řádku "x" vůči řádku "x-1". Takže stačí přidat pomocný sloupec s touto podmínkou, například něco takovéhoto:
=KDYŽ(D1<>D2;1;0)Výsledek pak můžeš získat klasickým filtrováním zdrojové tabulky (filtrovat jedničky), případně si můžeš udělat kontingenční tabulku.
P.
Viz příloha:
Chtělo by to asi napsat, proč je vůbec chceš vybrat...
Vizuálně označit si je můžeš například přes podmíněné formátování. Výběr buněk pak lze udělat tak jak píše xlnc. Počet ti vypíše jak COUNTIFS, tak i funkcionalita "Najít a nahradit". Část řetězce v jiném řetězci lze hledat např. přes funkci NAJÍT. Pokud se má postup opakovat, tak na to lze udělat makro, k tomu je ale nutné vložit přílohu, a detailněji popsat problematiku...
P.
Jde to nastavit třeba přes události sešitu ve VBA.
P.
Např.:
Private Sub Workbook_Open()
Application.UseSystemSeparators = False
Application.DecimalSeparator = "."
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.UseSystemSeparators = True
End Sub
Asi by to chtělo přílohu...
P.
Jedno z řešení je přes funkci KDYŽ, kde podmínkou bude délka (počet číslic) celé části výsledku (funkce DÉLKA a CELÁ.ČÁST, pro ošetření záporných čísel lze ještě využít funkci ABS). Případně může být podmínkou přímo výsledek...
K zaokrouhlování lze pak využít funkci ZAOKROUHLIT, k zaokrouhlení na desítky dolů funkci ZAOKR.DOLŮ.
P.
Např.:
=KDYŽ(DÉLKA(CELÁ.ČÁST(ABS(A1*1,74)))<2;A1*1,74;KDYŽ(DÉLKA(CELÁ.ČÁST(ABS(A1*1,74)))<3;ZAOKR.DOLŮ(A1*1,74;10);KDYŽ(DÉLKA(CELÁ.ČÁST(ABS(A1*1,74)))<4;ZAOKROUHLIT(A1*1,74;-1);ZAOKROUHLIT(A1*1,74;-2))))nebo podmínkou přímo výsledek:
=KDYŽ(ABS(A1*1,74)<10;A1*1,74;KDYŽ(ABS(A1*1,74)<100;ZAOKR.DOLŮ(A1*1,74;10);KDYŽ(ABS(A1*1,74)<1000;ZAOKROUHLIT(A1*1,74;-1);ZAOKROUHLIT(A1*1,74;-2))))řešení s funkcí ZVOLIT:
=ZVOLIT(KDYŽ(ABS(A1*1,74)<10;1;KDYŽ(ABS(A1*1,74)<100;2;KDYŽ(ABS(A1*1,74)<1000;3;4)));A1*1,74;ZAOKR.DOLŮ(A1*1,74;10);ZAOKROUHLIT(A1*1,74;-1);ZAOKROUHLIT(A1*1,74;-2))
Sám sis odpověděl, aneb Google Docs není Excel ;-).
P.
Nebo se podívej, jak funguje kontingenční tabulka. Pro řešení podobných problémů se dá využít...
P.
Pokud bych musel mít výsledek v tomto formátu, tak bych to řešil tak, že bych měl zdroj řazený klasicky pod sebou v "jednom" sloupci (resp. v jedné skupině sloupců), a výsledek bych si vytvářel makrem.
Řadit dvě skupiny sloupců vedle sebe není úplně dobrý nápad ;-)...
P.
Možností, jak toto vyřešit, je hned několik.
1.) Pomocný sloupec se vzorcem (sloupec v EUR a sloupec v CZK).
2.) Vytvořit si makro (například na výběr buněk).
3.) Využít funkcionality "Vložit jinak".
Postup (ad 3):
a) Do nějaké buňky zadám kurz (např. 27,02).
b) Označím buňku a dám kopírovat.
c) Označím oblast, která se má přepočítat na základě tohoto kurzu.
d) Vložit jinak --> vybrat operaci "Násobit".
P.
U kontingenční tabulky bývá problém v tom, že se oblast formátovaných hodnot mění - podle toho, jak se aktualizují (upravují) zdrojová data. Je pak tedy lepší navázat podmíněné formátování ne na "Vybrané buňky", ale na logické oblasti.
Lze nastavit ve Správci pravidel / Upravit pravidlo... Nahoře máš tři přepínače, vyzkoušej druhou a třetí volbu ("Všechny buňky zobrazující Součet z X hodnot"...).
P.
Podívej se, jak funguje funkce SVYHLEDAT.
P.
A kde máš v těch tabulkách datum? Kromě záhlaví tabulky, kde je název měsíce, jej nikde nevidím.
P.
Př.:
Sub Smazat_radky_dle_podminky()
Dim i As Long
Application.ScreenUpdating = False
For i = Range("A" & Rows.Count).End(xlUp).Row To 3 Step -1
If Cells(i, 5).Value = "" Then
Rows(i).EntireRow.Delete
End If
Next i
Application.ScreenUpdating = True
End Sub
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.