V tom prípade to asi bez matice nepôjde. Funkciu matice tam vlastne plnia tie zložené zátvorky, ktoré znamenajú pole - teda maticu. Keď ich odstránime a nahradíme za oblasť, potrebujeme z tej oblasti dostať pole - teda vzorec urobiť maticový. Možno niekto dá nejaké riešenie nematicové, zatiaľ keď v ktoromkoľvek prípade zameníte {} zátvorkové pole za oblasť, a vzorec zadáte ako maticový Ctrl+Shift+Enter, bude pracovať správne. Ak sa chcete vyhnúť omylu pri zadávaní, dajte vzorec do Definovaného názvu, ale vtedy pozor na ktorom ste riadku, ak sa bude jednať o kontrolu na viac riadkoch. Všetko v príklade aj s dynamickou oblasťou.
Maticový vzorec
=SUM(IFERROR(SEARCH({"phm";"nafta";"oděv";"prac";"obuv"};M2);0))>0
=SUMA(IFERROR(HLEDAT({"phm";"nafta";"oděv";"prac";"obuv"};M2);0))>0
Nematicový vzorec
=SUM(COUNTIF(M2;{"*phm*";"*nafta*";"*oděv*";"*prac*";"*obuv*"}))>0
=SUMA(COUNTIF(M2;{"*phm*";"*nafta*";"*oděv*";"*prac*";"*obuv*"}))>0
alebo
=SUMPRODUCT(IFERROR(SEARCH({"phm";"nafta";"oděv";"prac";"obuv"};M2);0))>0
=SKALÁRNÍ(IFERROR(HLEDAT({"phm";"nafta";"oděv";"prac";"obuv"};M2);0))>0
alebo
=SUM(LEN(SUBSTITUTE(LOWER(M2);{"phm";"nafta";"oděv";"prac";"obuv"};"")))<>LEN(M2)*5
=SUMA(DÉLKA(DOSADIT(MALÁ(M2);{"phm";"nafta";"oděv";"prac";"obuv"};"")))<>DÉLKA(M2)*5
alebo
=MIN(LEN(SUBSTITUTE(LOWER(M2);{"phm";"nafta";"oděv";"prac";"obuv"};"")))<LEN(M2)
=MIN(DÉLKA(DOSADIT(MALÁ(M2);{"phm";"nafta";"oděv";"prac";"obuv"};"")))<LEN(M2)
alebo
=COUNT(SEARCH({"phm";"nafta";"oděv";"prac";"obuv"};M2))>0
=POČET(HLEDAT({"phm";"nafta";"oděv";"prac";"obuv"};M2))>0
a určite aj ďalšie :)
Skúsil som to na 2010 vo virtuálke a na 2019 na PC, ide to rovnako. V Exceli sa Vám bunka asi ani prekresľovať rýchlejšie ako tých 0,15 nebude.
Skúste toto:
Sub BezText()
Dim sTxt As String
Dim x As Integer
Dim bunka As Range
Dim delay As Single
On Error Resume Next
sTxt = " ****** Vitajte, pre zápis použi ponuku po stlačení pravého tlačítka myši! ******"
Set bunka = ActiveSheet.Range("B1")
Set TXT = ActiveSheet.Shapes("TXT").TextFrame2.TextRange
For x = 1 To 30
delay = Timer + 0.15
Do While Timer < delay
DoEvents
Loop
bunka = Space(x) & sTxt
DoEvents
Next x
Set bunka = Nothing
End Sub
=IF(OR(MONTH(A1)>10;MONTH(A1)<4);"zima";"leto")
=KDYŽ(NEBO(MĚSÍC(A1)>10;MĚSÍC(A1)<4);"zima";"leto")
Pridám ešte príklad, aby to bolo jasnejšie.
Ak sú všetky bunky vyplnené:
=SUM(--(((A3:A103<=A1)+(B3:B103=B1))>0))
=SUMA(--(((A3:A103<=A1)+(B3:B103=B1))>0))
Ak nemá započítavať nevyplnené bunky (lebo prázdna bunka je inak ako 0):
=SUM(--((((A3:A103<>"")*(A3:A103<=A1))+((B3:B103<>"")*(B3:B103=B1)))>0))
=SUMA(--((((A3:A103<>"")*(A3:A103<=A1))+((B3:B103<>"")*(B3:B103=B1)))>0))
Prípadne SUM/SUMA zamente za SUMPRODUCT/SOUČIN.SKALÁRNÍ a nemusí to byť maticový vzorec
Alebo index
=INDEX('nem CHOM'!B:B;B3)
Ja by som ich radšej skrýval naraz
Sub CheckAndHide()
Dim aColumn As Range, RNG As Range
Application.ScreenUpdating = False
With ActiveSheet.Columns("A:D")
.EntireColumn.Hidden = False
For Each aColumn In .Columns
If Application.Sum(aColumn) = 0 Then
If RNG Is Nothing Then Set RNG = aColumn Else Set RNG = Union(RNG, aColumn)
End If
Next
End With
If Not RNG Is Nothing Then RNG.EntireColumn.Hidden = True
Application.ScreenUpdating = True
End Sub
Treba to pri Change alebo pri Calculate alebo pri stlačení čudlíku ? ...
Dim DisableEvents As Boolean
Private Sub ComboBox1_Change()
If Not DisableEvents Then
DisableEvents = True
With ComboBox1
.Value = Format(Val(Replace(.Value, ",", ".")), "hh:mm")
End With
DisableEvents = False
End If
End Sub
Zadajte vzorec do prvého riadku, a potom len:
a) potiahnite z pravý spodný roh túto bunku dole, pokiaľ treba,
b) Ctrl+C na prvej bunke so vzorcom, označiť ostatné, Ctrl+V
c) Ak máte nejako inak formátované riadky, tak Ctrl+C, Označiť ostatné, pravý klik na označené, Možnosti prilepenia, Vzorce.
Ak by ste ho totiž chcel vkladať do všetkých naraz tak, že najskôr označíte všetky, a potom vložíte raz vzorec, tak musíte to A1 nahradiť za A1:Ax. A to x musí byť počet riadkov. Nie číslo riadku, ale počet riadkov. Aby ste sa nemýlil, bude lepšie jedno z tých a,b,c.
Pr.
Zas mi nejdú prikladať prílohy ???
Tu to je na GoogleDrive
Je to presne ako som hovoril. Part Number nieje číslo! Idem Vám na to pozrieť. Vydržte, najem sa ...
EDIT:
2 návrhy.
Inak nepoužívajte kontrolu celých stĺpcov, to je pomalé. To radšej použite jeden stĺpec na určenie počtu použitých riadkov (teraz je to D7:D10000) v dynamickom definovanom názve a potom napr. OFFSET-ujte (OFFSET je v CZ POSUN) oblasti, alebo naindexujte. Tabulka1 používa def. názov "PART_NUMBER" a Tabulka2 používa def. názov "OBLAST_DAT" + pomocný stĺpec pre číslo indexu.
Tak ešte raz. Čože Vám to nejde ?
Uvádzate iné rozsahy, iné umiestnenia riadkov, stĺpcov, a možno aj iný typ dát v stĺpci IC. A to bude problém. Ak Vám nefunguje toto, čo som upravil presne podľa Vášho vzorca, tak sem dajte reálne vyzerajúcu prílohu. Citlivé dáte zamente na necitlivé. Skúste IC zameniť za nečíslo, a hneď nemáte žiadne výsledky. Podľa Vás možno drobnosť, ale treba to zmieniť.
Excel to čísluje automaticky, a pri vytváraní zvyšuje číslo, aj keď je 1-ka dostupná, lebo už súbor otvorený nieje. Dalo by sa to obabrať asi takto. Vytvorte si niekde na disku prázdny súbor s názvom, ktorý Vám Excel Automaticky ponúka ako prvý predvolený, teda v CZ "Sešit", v SK "Zošit" a uložte ho ako .xlsx. Potom z neho Vašim makrom vytvárajte nový, ako zo šablóny, a dostane vždy číslo 1 a bude neuložený a bez prípony, tak ako klasické vytvorenie nového zošitu Excelom. Len treba v makre najskôr otestovať prípadnú existenciu už predtým vytvoreného "Zošit".
Sub Vytvor_Zosit()
Dim WB As Workbook
On Error Resume Next
Set WB = Workbooks("Zošit1")
On Error GoTo 0
If WB Is Nothing Then
Workbooks.Add Template:="Z:\Zošit.xlsx"
Else
Set WB = Nothing
MsgBox "Môže byť otverený iba jeden súbor s názvom Zošit1", vbExclamation, "Chyba"
End If
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.