Urobil som nejaké úpravy a porovnávaciu procedúru. Ak to robím správne, tak najlepšie vychádza to prvé. Stúpajúcim počtom sa rozdiely vyrovnávajú. Ale nejako sa mi to nezdá, ak máte niekto overenejší nápad ako otestovať dĺžku týchto konkrétnych proc, tak ... mne sa už nece.
EDIT: A zabudli sme na najjednoduchšiu vec. Ak by sa tam nechali normálne chyby a nie "err", tak stačí toto:
On Error Resume Next
List1.Cells(5, 12).Resize(10004).SpecialCells(xlCellTypeFormulas, xlErrors).Offset(0, -1).ClearContents
On Error GoTo 0
Skúste zmazať všetky medzery a napísať ich znovu. Pri Importe textu často nieje medzera (CHAR(160)) ako medzera (CHAR(32)). Vo formáte bunky je teda rozdelenie textu zapnuté, že. Skopírujte text do Wordu a dajte si zobraziť formátovacie znaky, šupnite screen výsledku.
Použitie WorksheetFunction.Match alebo Application.Match je rýchlejšie iba za určitých okolností. Ak je málo výskytov zhody a veľa dát. Ak bude výskytov viac, tak prejdenie poľa bude podľa mňa rýchlejšie. Tam môžete urobiť cez StrComp() porovnanie na NotCaseSensitive. Ak bude dnes čas a chuť porovnám ... :)
Nie som si istý, či rozumiem, ale teda takto to nájde prvý výskyt nasledovných dvoch splnených podmienok (oboch naraz):
=MATCH(1;(G11:G41="N")*((AM11:AM41+AN11:AN41)<>2);0)
=POZVYHLEDAT(1;(G11:G41="N")*((AM11:AM41+AN11:AN41)<>2);0)
1. V stĺpci G je "N"
2. Aspoň v jednom zo stĺpcov AM alebo AN je FALSE/NEPRAVDA
Teda podmienka 2 je splnená v prípadoch : FALSE+FALSE, FALSE+TRUE, TRUE+FALSE
Ak ide v maticovom vzorci o operáciu OR/NEBO, nemôže sa použiť OR/NEBO, ale namiesto toho sa použije súčet, teda "+". A výsledok súčtu sa testuje. Keď je výsledok iný ako 0, tak je splnená aspoň jedna podmienka z OR/NEBO (výsledok je počet splnených).
Ak ani teraz nechápem zadanie, musíš asi priložiť súbor ... :)
Tu som navrhol riešenie na základe dolovania dát z HTML kódu. Kód vrátený Googlom je strašne zložitý a neprehľadný. Nedokážem s istotou zistiť, či to čo som vypozoroval je pravda. Na základe pokusov som zistil, že na rovnakú trasu vracia Google iný kód, s iným rozmiestnením výsledkov, a iným oparametrizovaním v kóde. Čo je smrť pre parsovanie textu. Ono totiž môže vrátiť výsledky, tak že to čo si myslíte nieje trasa pre auto, ale trasa vlaku, alebo dokonca čiastkový úsek trasy...
Ak sa niekomu chce nech poskúma tie vracané HTML a nájde v nich logiku a jednoznačný identifikátor ako odlíšiť správny výsledok (teda prvú navrhovanú trasu pre auto).
Príklad pre doplnené zadanie:
=IF(OR(D1="";E1="");"zadejte podmínky";IFERROR(MATCH(1;(A1:A50<>"")*(A1:A50=D1)*(B1:B50=E1);0);"nenájdené"))
=KDYŽ(NEBO(D1="";E1="");"zadejte podmínky";IFERROR(POZVYHLEDAT(1;(A1:A50<>"")*(A1:A50=D1)*(B1:B50=E1);0);"nenájdené"))
=IF(OR(D1="";E1="");"zadejte podmínky";IFERROR(MATCH(1;(A1:A50<>"")*(A1:A50>D1)*(B1:B50=E1);0);"nenájdené"))
=KDYŽ(NEBO(D1="";E1="");"zadejte podmínky";IFERROR(POZVYHLEDAT(1;(A1:A50<>"")*(A1:A50>D1)*(B1:B50=E1);0);"nenájdené"))
=IFERROR(MATCH(1;(A1:A50=D1)*(B1:B50=E1);0);"nenájdené")
=IFERROR(POZVYHLEDAT(1;(A1:A50=D1)*(B1:B50=E1);0);"nenájdené")
Prečo sa musia zadávať kódy závad vedľa do H a odtiaľ kopírovať do D, a to ešte na základe manuálne dopísaného počtu v C2 ??? Prečo sa nepíšu kódy rovno do D?
Ak sa nelíšia A8:A23 a B8:B23 voči A2 a B2, načo sa kopírujú do tabuľky, keď makro si ich prečíta z A2 a B2.
Musia sa kopírovať čísla v Řádek ? Neprišiel som na dôvod.
...
Ako plánujete potom prezerať/vyhľadávať/filtrovať data z DB? Cez KT? To potom netreba ukladať ani počet závad ani početnosť. To si KT doráta.
Či sa mýlim?
Overené:
maticový vzorec:
=SUM(IFERROR(LARGE(A2:A7;{1;2;3;4;5});0))
=SUMA(IFERROR(LARGE(A2:A7;{1;2;3;4;5});0))
nematicový vzorec
=SUMPRODUCT(IFERROR(LARGE(A2:A7;{1;2;3;4;5});0))
=SOUČIN.SKALÁRNÍ(IFERROR(LARGE(A2:A7;{1;2;3;4;5});0))
A ešte doplním možnosť, keď je počet čísel meniteľný v H1 (maticový vzorec):
=SUM(IFERROR(LARGE(A2:A7;ROW(OFFSET($A$1;;;H1)));0))
=SUMA(IFERROR(LARGE(A2:A7;ŘÁDEK(POSUN($A$1;;;H1)));0))
No a obyčajný vzorček nestačí ?
=IFERROR(VLOOKUP(A4;$L$4:$M$18;2;FALSE);"")
=IFERROR(SVYHLEDAT(A4;$L$4:$M$18;2;NEPRAVDA);"")
Sub Vymaz_Err()
Dim PrvniRadekDat As Long, PoslRadekDat As Long, Radku As Long, SloupecDat As Integer, Data(), i As Long, rngErr As Range
PrvniRadekDat = 5
SloupecDat = 9
With ThisWorkbook.Worksheets("DATA")
PoslRadekDat = .Cells(.Rows.Count, SloupecDat).End(xlUp).Row
If PoslRadekDat < PrvniRadekDat Then MsgBox "Žádná data.", vbInformation: Exit Sub
Radku = PoslRadekDat - PrvniRadekDat + 1
ReDim Data(1 To Radku, 1 To 1)
If Radku = 1 Then Data(1, 1) = .Cells(PrvniRadekDat, SloupecDat).Value Else Data = .Cells(PrvniRadekDat, SloupecDat).Resize(Radku).Value
For i = 1 To Radku
If Data(i, 1) = "err" Then
If rngErr Is Nothing Then Set rngErr = .Cells(PrvniRadekDat + i - 1, SloupecDat - 1) Else Set rngErr = Union(rngErr, .Cells(PrvniRadekDat + i - 1, SloupecDat - 1))
End If
Next i
If Not rngErr Is Nothing Then rngErr.ClearContents
End With
End Sub
Je to možné. Tak tu je návrh na UDF (funguje aj maticovo aj v PF):
Function CHECK_FORMULA(RNG As Range) As Variant
Dim x As Integer, y As Long, arr() As Boolean
If Not TypeName(RNG) = "Range" Then
CHECK_FORMULA = CVErr(xlErrRef)
Else
If RNG.Cells.Count = 1 Then
CHECK_FORMULA = RNG.HasFormula
Else
ReDim arr(1 To RNG.Rows.Count, 1 To RNG.Columns.Count)
For x = 1 To UBound(arr, 2)
For y = 1 To UBound(arr, 1)
arr(y, x) = RNG.Cells(y, x).HasFormula
Next y
Next x
CHECK_FORMULA = arr
End If
End If
End Function
Overuje to existenciu vzorca v bunkách. Rovnako som žlté podfarbenie dal na PF, nie ručne.
Obojsmerne. Snáď som neurobil hrubku...
=IF(OR(B3="";D3="");"";VLOOKUP(B3;$I$3:$M$6;MATCH(D3;$J$2:$M$2;0)+1;FALSE))
=KDYŽ(NEBO(B3="";D3="");"";SVYHLEDAT(B3;$I$3:$M$6;POZVYHLEDAT(D3;$J$2:$M$2;0)+1;NEPRAVDA))
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.