To je naschvál tak urobené. Pre kontrolu správnej funkčnosti. V kóde sú 2 riadky. Mazací je vypnutý pomocou apostrofu. Ak si to skontrolujete, tak vypnite Select a zapnite Delete.
rngDEL.EntireRow.Select
' rngDEL.EntireRow.Delete
Makro je urobené tak, aby mazalo všetky riadky naraz. To je výhodné časovo, ale iba do nejakého rozumného počtu. Range sa preťaží. Ak by to trvalo neúmerne dlho (napr. dlhšie ako pôvodný spôsob), tak tam doplním, aby napr. každých 1000 nájdených riadkov vykonalo výmaz. Potom nebude Range preťažovaná.
No problema...
Sub smazat()
Dim Countrow As Long
Dim R As Long, c As Long
Dim CalcMode As Long
Dim ViewMode As Long
Dim rngDEL As Range
Dim aVal()
Dim aCon() As String
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
End With
With ActiveWindow
ViewMode = .View
.View = xlNormalView
End With
aCon = Split("EN,Z,S,B", ",")
With ActiveSheet.UsedRange
.Parent.DisplayPageBreaks = False
Countrow = .Rows.Count
If .Column <> 1 Then
MsgBox "Použitá oblast nezačíná sloupcem A", vbExclamation: Exit Sub
End If
If Countrow = 1 Then
ReDim aVal(1 To 1, 1 To 1)
aVal(1, 1) = .Cells(1, 1).Value
Else
aVal = .Columns(1).Value
End If
For R = 1 To Countrow
For c = 0 To UBound(aCon)
If Left(aVal(R, 1), Len(aCon(c))) = aCon(c) Then
If rngDEL Is Nothing Then
Set rngDEL = .Cells(R, 1)
Else
Set rngDEL = Union(rngDEL, .Cells(R, 1))
End If
Exit For
End If
Next c
Next R
End With
If Not rngDEL Is Nothing Then
rngDEL.EntireRow.Select
' rngDEL.EntireRow.Delete
End If
ActiveWindow.View = ViewMode
Application.Calculation = CalcMode
End Sub
Neviem či nie je rozdiel "pre firmy" a "pre veľké organizácie".
Ako píše Dingo, vo verzii "pre veľké organizácie" sa to nachádza v menu Štart.
W10/W11
Štart - napísať "Spreadsheet Compare"
alebo
W10
Štart - Nástroje balíka Office - Spreadsheet Compare
W11
Štart - Všetko - Nástroje balíka Office - Spreadsheet Compare
Citácia z webu MS:
Important: Spreadsheet Compare is only available with Office Professional Plus 2013, Office Professional Plus 2016, Office Professional Plus 2019, or Microsoft 365 Apps for enterprise.
vľavo:
=SUMIF($C$2:$Y$2;"<"&TODAY();C3:Y3)
=SUMIF($C$2:$Y$2;"<"&DNES();C3:Y3)
vpravo:
=SUMIF($C$2:$Y$2;">="&TODAY();C3:Y3)
=SUMIF($C$2:$Y$2;">="&DNES();C3:Y3)
alebo
=SUM(C3:Y3)-B3
=SUMA(C3:Y3)-B3
No k tomu nie je príliš čo vysvetľovať.
Jedno NestedJoin s parametrom LeftAnti vráti riadky, ktoré sú v prvej tbl a nie sú v druhej, a druhé NestedJoin naopak vráti riadky ktoré sú v druhej tbl a nie sú v prvej.
A aby sme tieto 2 výsledky rozlíšili, pridáme k nim stĺpec s hodnotou, či sa jedná o výsledok Navíc alebo Chybí.
Tento stĺpec sa dá potom po spojení výsledkov efektne použiť v Rýchlom filtri.
Stĺpec QQ, ktorý pri NestedJoin vzniká je irelevantný, mažeme ho.
PQ?
Ak budem brať ako identifikátor celý riadok, tak by som to asi rýchlo urobil s 2 pomocnými stĺpcami.
Aha súbor má 558 KB, nevlezie sem, tak vzorce:
List "actual":
stĺpec "Kontrola"
=TEXTJOIN("•";FALSE;AxTable1[@[Typ řádku]:[ID řádku úpravy]])
=TEXTJOIN("•";NEPRAVDA;AxTable1[@[Typ řádku]:[ID řádku úpravy]])
stĺpec "Check"
=IF(ISNA(MATCH([@Kontrola];AxTable15[Kontrola];0));"Navíc";"")
=KDYŽ(JE.NEDEF(POZVYHLEDAT([@Kontrola];AxTable15[Kontrola];0));"Navíc";"")
List "old test":
stĺpec "Kontrola"
=TEXTJOIN("•";FALSE;AxTable15[@[Typ řádku]:[ID řádku úpravy]])
=TEXTJOIN("•";NEPRAVDA;AxTable15[@[Typ řádku]:[ID řádku úpravy]])
stĺpec "Check"
=IF(ISNA(MATCH([@Kontrola];AxTable1[Kontrola];0));"Chybí";"")
=KDYŽ(JE.NEDEF(POZVYHLEDAT([@Kontrola];AxTable1[Kontrola];0));"Chybí";"")
A potom si len dáte filtre na stĺpce Check.
To je jednoduché, len musíte pred prepisom dočasne vypnúť udalosti, lebo by sa dokola volal znovu opačný prepis.
No a aký máte Office? Lebo tam je tých funkcií viac použitých.
Môžete to urobiť obdobne pomocou Kontingenčných tabuliek s WC vo Filtre, materiálom ako Riadky, a Hodnota bude UKONČENÍ s voľbou Maxima.
Napr. takto?
=IFERROR(LET(p;$B$2:$B$27=Y$4;g;FILTER($G$2:$G$27;p);e;FILTER($E$2:$E$27;p);u;UNIQUE(g);HSTACK(u;BYROW(u;LAMBDA(x;MAX(FILTER(e;g=x))))));"N/A")
=IFERROR(LET(p;$B$2:$B$27=Y$4;g;FILTER($G$2:$G$27;p);e;FILTER($E$2:$E$27;p);u;UNIQUE(g);SROVNAT.VODOROVNĚ(u;BYROW(u;LAMBDA(x;MAX(FILTER(e;g=x))))));"N/A")
V lubovom vzorci predsa stačí zmeniť čísla v OFFSET-och (POSUN), lebo je to tam napevno:
OFFSET(x; 4; -1) --> OFFSET(x; ROW(A4); -1)
OFFSET(x; 2; ) --> OFFSET(x; ROW(A2); )
Ale ak nechcete vždy robiť štvoricu vzorcov (4 riadky materiálu), dá sa urobiť taký naťahovací, ktorý bude stačiť ťahať myšou, a on bude reagovať na násobky 4. Potrebujete mať teda rovnaký výsledok vo všetkých 4 riadkoch materiálu? Ak nie, v ktorom zo 4?
Snáď som to pochopil. Ak nemáte funkciu LET, neviem preklad do CZ, dá sa to aj bez nej.
=IFNA(LET(IDX;MATCH(TRUE;D5:W5<0;0);SUM(OFFSET(C1;;;;IDX))+(INDEX(C5:V5;IDX)/(INDEX(D3:W3;IDX)/INDEX(D1:W1;IDX))));"N/A")
=IFNA(LET(IDX;POZVYHLEDAT(PRAVDA;D5:W5<0;0);SUMA(POSUN(C1;;;;IDX))+(INDEX(C5:V5;IDX)/(INDEX(D3:W3;IDX)/INDEX(D1:W1;IDX))));"N/A")
Vzorec funguje tak, ako som pochopil Váš text. Priložte prílohu s pár príkladmi a s očakávanými výsledkami.
=IF(AND(COUNT(B2:M2)<4;COUNT(N2:U2)<5);1000;AVERAGE(B2:U2))
=KDYŽ(A(POČET(B2:M2)<4;POČET(N2:U2)<5);1000;PRŮMĚR(B2:U2))
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.