Prečítal som si 3x Váš "popis" a ani raz som neporozumel. Napr.:
-Kam sa má vypísať výsledok porovnania "OK"/"" ?
-Čo znamená "porovnat dva listy" ? Ktoré z dát v riadkoch majú byť rovnaké ? Iba to jedno číslo ?
-Dovysvetlite presnejšie na konkrétnom príklade. Napr.
• Zoberiem všetky čísla v 'Kontrola s SŘHV'!G6 - {905688,905689,905690}
• Každé z týchto 3 (inak neznámy počet) čísel vyhľadám v 'zdroj dat'!A:A
• A zistím, či zároveň je v stĺpci 'zdroj dat'!AC:AC niekde rovnaká hodnota ako 'Kontrola s SŘHV'!A6 ?
=SUMPRODUCT(COUNTIF(OFFSET($A$5:$A$10;(ROW($1:$31)-1)*11;);L4))
=SOUČIN.SKALÁRNÍ(COUNTIF(POSUN($A$5:$A$10;(ŘÁDEK($1:$31)-1)*11;);L4))
Predpokladám, že je 31 tých tabuliek, preto "$1:$31"
Prikladám príklad, aj s výpisom jedinečných mien pomocou maticového vzorca.
EDIT: A vlastne počet stačí aj takto:
=IF(L4="";"";COUNTIFS($A$5:$A$350;L4))
=KDYŽ(L4="";"";COUNTIFS($A$5:$A$350;L4))
alebo...
=SUBSTITUTE(RIGHT(A1;LEN(A1)-FIND(" - ";A1)-2);" - ";", ")
=DOSADIT(ZPRAVA(A1;DÉLKA(A1)-NAJÍT(" - ";A1)-2);" - ";", ")
=SUBSTITUTE(REPLACE(A1;1;FIND(" - ";A1)+2;"");" - ";", ")
=DOSADIT(NAHRADIT(A1;1;NAJÍT(" - ";A1)+2;"");" - ";", ")
EDIT: 27.11.2019 8:16 - výmena prílohy aj kódu - doplnený podpriečinok "Pracovné"
Pr.Sub Tlac_do_PDF()
Dim Nazov As String, Cesta As String, Podpriecinok As String
With ThisWorkbook
.Save
With Worksheets("List1")
Nazov = "ABC"
Podpriecinok = .Range("A1").Value
Cesta = CreateObject("WScript.Shell").SpecialFolders("mydocuments") & "\Pracovné\"
If Len(Dir(Cesta, vbDirectory)) = 0 Then MkDir Cesta
Cesta = Cesta & IIf(Podpriecinok = "", "", Podpriecinok & "\")
If Len(Dir(Cesta, vbDirectory)) = 0 Then MkDir Cesta
.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Cesta & Nazov & ".pdf", _
Quality:=xlQualityMaximum, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True
End With
End With
End Sub
Takže aj podľa mailu, to bude chyba v adresácii.
=IFERROR(MAX(OFFSET('zdroj dat'!$AB$3;MATCH($A3;'zdroj dat'!$A$4:$A$10000;0);;COUNTIF('zdroj dat'!$A$4:$A$10000;$A3)));"")
=IFERROR(MAX(POSUN('zdroj dat'!$AB$3;POZVYHLEDAT($A3;'zdroj dat'!$A$4:$A$10000;0);;COUNTIF('zdroj dat'!$A$4:$A$10000;$A3)));"")
No kým ja som si nakreslil tabuľku .....
Každopádne to sem už dám, Robil som to ale pomocou obyč IF
Kľudne pošlite, mail je v mojom konte, a hore som Vám dal vyskúšanú a funkčnú verziu na variant keď idú po sebe. Ja by som sa ale asi zbavil toho INDIRECT/NEPŘÍMÝ.ODKAZ a dal tam asi OFFSET/POSUN.
=MAX(OFFSET('zdroj dat (2)'!$AB32;MATCH($A35;'zdroj dat (2)'!$A33:$A10029;0);;COUNTIF('zdroj dat (2)'!$A33:$A10029;$A35)-1))
=MAX(POSUN('zdroj dat (2)'!$AB32;POZVYHLEDAT($A35;'zdroj dat (2)'!$A33:$A10029;0);;COUNTIF('zdroj dat (2)'!$A33:$A10029;$A35)-1))
Ak sú pomiešané (nejdú po sebe), ale aj keď idú po sebe, dá sa použiť (maticovo):
=MAX(IF('zdroj dat (2)'!$A33:$A10029=$A35;'zdroj dat (2)'!$AB33:$AB10029))
=MAX(KDYŽ('zdroj dat (2)'!$A33:$A10029=$A35;'zdroj dat (2)'!$AB33:$AB10029))
alebo ak máte najnovší Office tak ten má novú funkciu MAXIFS (nematicovo)
=MAXIFS('zdroj dat (2)'!$AB33:$AB10029;'zdroj dat (2)'!$A33:$A10029;$A35)
Príklady v prílohe.
Ten vzorec ste si asi nekrokovala, čo ?
"+3" - znamená to, že sú bunky zlúčené po 3 riadkoch, alebo že oblasti posunuté o 3? Ak posunuté (čo sú), tak nie o 3, ale oni predsa začínajú na 33 riadku, takže +32. Ak to znamená že sú zlúčené tak nielen +3, ale aj +COUNTIF()*3.
To "COUNTIF" znamená, že idú kontrakty vždy po sebe a niesú pomiešané ?
Zadávate to ako maticový vzorec ?
Príloha by bola lepšia, nech si to nemusíme domýšľať a vytvárať...
=MAX(INDIRECT("'zdroj dat (2)'!$AB"&MATCH($A35;'zdroj dat (2)'!$A33:$A10029;0)+32&":$AB"&MATCH($A35;'zdroj dat (2)'!$A33:$A10029;0)+32+COUNTIF('zdroj dat (2)'!$A33:$A10029;$A35)-1))
=MAX(NEPŘÍMÝ.ODKAZ("'zdroj dat (2)'!$AB"&POZVYHLEDAT($A35;'zdroj dat (2)'!$A33:$A10029;0)+32&":$AB"&POZVYHLEDAT($A35;'zdroj dat (2)'!$A33:$A10029;0)+32+COUNTIF('zdroj dat (2)'!$A33:$A10029;$A35)-1))
Manuálne vytriedenie jedinečných hodnôt môžete obísť maticovým vzorcom (dostatočne natiahnutým), alebo Kontingenčnou tabuľkou (stačí dať iba Obnoviť).
Tých zmien je veľa. Už som aj pozabúdal čo som chcel, tak len čiastočne:
-Rok sa mení výhradne makrom, a výhradne v jedinej bunke NEMAZAT!C2
-Zoznam sviatkov sa mení podľa roku (Veľká Noc tiež)
-PF fialové je podľa sviatkov daného roku
-PF víkendov je zjednodušené
-Zoznamy mien sú už iba na jedinom mieste NEMAZAT!A1:A21
-Zoznamy mesiacov to isté NEMAZAT!F2:F13
-Zmenený spôsob zobrazenia dňa v týždni
-Brala ste rok do mesiacov cez VLOOKUP ??? - opravené
-Určite má byť v mesiacoch v súčtoch C41 a D41 rovnaký vzorec ? Asi nie - opravené.
-Neviem už kde to bolo, bol neviem prečo vynechaný stĺpec H dochádzkovej oblasti - opravené.
-V dochádzkových bunkách C4:H34 je možnosť vybrať služby ZV, NV, 1/2. Nikde v súčtoch mesačných ani v ročnom sa s týmto nepočíta. Je to správne ?
-Ak je už možnosť výberu mena (alebo typ služby ZV,NV,1/2) v A37:A40, a teda meniť poradie, prečo nieje taká možnosť v ročnom sumáre B3:E3, ... B21:E21? Mala ste tam navyše odkazy napevno na riadky, a neviem už v ktorých ročných súčtoch odkazovali na zlé riadky. Dal som to zatiaľ cez SUMIF() {dá sa prípadne cez VLOOKUP}, aby to našlo aj na inej pozícii, keď už sa dá meniť.
-V sumároch polrokov, riadok 17 - 18, to zrátavate po bunke - opravené na SUM
Makrá
-makro na ukladanie s daným rokom, navýšenie roku, premazanie, znovuuloženie s novým rokom, už bez problémov funguje.
-prerobené prefarbovanie, ktoré pristupuje o niečo menej systémom "po jednej bunke". Dal by sa ešte urobiť inak, aby bola vytvorená kolekcia s farbami, a polia z prípadných viacnásobných oblastí zmeny. Otázne je či by to nebolo vzhľadom na malý počet menených buniek naraz (väčšinou asi jedna) zbytočné. Do makra vstupu iba oblasť prieniku zmena vs oblasť služieb.
-makro na vymazanie oblasti nechápem. Má mazať označenú oblasť na liste ??? A čo keď označíte omylom niečo iné? Dal som 2 spôsoby, vyberte si ktorý to má akože byť, či mazanie prieniku výberu vs oblasti služieb, alebo vždy celej oblasti služieb.
-Listy som vo VBA pomenoval.
... a na ostatné veci už som asi aj zabudol :)
Len letmé zamyslenie a hneď niekoľko otázok:
- Stĺpec AG ? Teda zlúčené stĺpce do jednej bunky - teda jeden údaj ? Alebo je to 8 stĺpcov A až G,teda možných 8 hodnôt ?
- Hľadá sa prvá hodnota v A až G? Posledná ? Všetky ?
- A najdôležitejšia vec - čo potom, ak tieto dáta zapíšeme do Y? Zmažú sa z A:G ? Lebo ak tam ostanú, a znovu spustíme makro, tak sa pripíšu znovu tie isté.
- Alebo to má byť reagujúce na zmenu bunky v A:G, teda ihneď po zapísaní hodnoty sa to má prenášať do Y?
...
Priložte príklady možných situácií.
Príklad :
Sub Prenos()
Dim AG(), Y(), R As Long, i As Long, j As Integer
R = UsedRange.Rows.Count - 1
If R = 0 Then Exit Sub
If R = 1 Then ReDim Y(1 To 1, 1 To 1): Y(1, 1) = Cells(2, 25).Value Else Y = Cells(2, 25).Resize(R).Value
AG = Cells(2, 1).Resize(R, 8).Value
For i = 1 To R
For j = 1 To 8
If Not IsEmpty(AG(i, j)) Then
Y(i, 1) = Y(i, 1) & IIf(IsEmpty(Y(i, 1)), "", ",") & AG(i, j)
End If
Next j
Next i
Cells(2, 25).Resize(R).Value = Y
End Sub
Ešte som na to mrkol, a :
-"Druh spoje" - "BK1" ??? Ale taký v tabuľke nieje. Je tam "BK", "BG", "DLL". Teda cez VLOOKUP nemôžeme hľadať ani 2 ani 3 písmenné testy. Aké sú teda pre túto skupinu znakov pravidlá?
-Ak môžu a nemusia byť teda rovnako dlhé reťazce, napíšte ktoré. Potom by sa teda najskôr hľadalo slovo (oddeľovač je "-") a to by sa podľa potreby checkovalo na prvé číslo a pod. Vzorce by boli pooodstatne zložitejšie. Doplnte info o možnej dĺžke jednotlivých slov, či častí v nich.
Pr. na rýchlo (snáď som sa nepomýlil) cez VLOOKUP/SVYHLEDAT.
PS: Pozor, niektoré stĺpce s "číslami" obsahovali čísla, tie by sa nenašli v texte. buď sa bude časť textu konvertovať na číslo a hľadať číslo medzi číslami, alebo sa správne naformátuje tabuľka na text, a bude sa hľadať text. Navyše pri číslach začínajúcich na 0, by bol problém. Zmenil som na text.
mepexg napsal/a:
...žiaľ doposiaľ som nenašiel postup ako (aktualizáciu PQ) programovo otestovať aby následne mohla bežať ďalšia časť kódu, lebo VBA nečaká na PQ...
Toto by malo počkať. Či ?
Sub RefreshPQ()
Dim bBackQ As Boolean
Cells(1, 5).Value = "Refreshing"
With ThisWorkbook.Connections("Dotaz – Pokus").OLEDBConnection
bBackQ = .BackgroundQuery
.BackgroundQuery = False
.Refresh
.BackgroundQuery = bBackQ
End With
Cells(1, 5).Value = "Hotovo"
MsgBox "Refresh hotový"
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.