Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  111 112 113 114 115 116 117 118 119   další » ... 302

Tie 0 Vám zachová napr. takéto niečo:
=MID(A1;MATCH(TRUE;ISNUMBER(--(MID(A1;ROW(OFFSET($A$1;;;LEN(A1)));1)));0);SUM(1*ISNUMBER(--(MID(A1;ROW(OFFSET($A$1;;;LEN(A1)));1)))))
=ČÁST(A1;POZVYHLEDAT(PRAVDA;JE.ČISLO(--(ČÁST(A1;ŘÁDEK(POSUN($A$1;;;DÉLKA(A1)));1)));0);SUMA(1*JE.ČISLO(--(ČÁST(A1;ŘÁDEK(POSUN($A$1;;;DÉLKA(A1)));1)))))

alebo o niečo málo kratšie
=MID(A1;MIN(IFERROR(FIND({0;1;2;3;4;5;6;7;8;9};A1);FALSE));COUNT(1*MID(A1;ROW(OFFSET($A$1;;;LEN(A1)));1)))
=ČÁST(A1;MIN(IFERROR(NAJÍT({0;1;2;3;4;5;6;7;8;9};A1);NEPRAVDA));POČET(1*ČÁST(A1;ŘÁDEK(POSUN($A$1;;;DÉLKA(A1)));1)))

-textočíslo je v A1 (pozor výraz $A$1 nemeňte, to nieje odkaz na textočíslo)
-číslo v textočísle je spolu, nieje je rozdelené iným znakom (ani des. čiarkou)
-vzorec je to maticový, teda Ctrl+Shift+Enter
-ak hrozí, že v textočísle nebude žiadna číslica, tak si vzorec obalte ešte do
IFERROR(vzorec;"")

Určite odomykáte rovnaký list (pozor na ActiveSheet)? Ja to teraz skúšam a ide to tak ako chcete.

Ja myslím, že Vám tam chýba ešte aj posledný parameter:
=IFERROR(IF(MATCH(C3;$F$3:$F$134;FALSE)>0;"ANO");"není k dispozici")
=IFERROR(KDYŽ(POZVYHLEDAT(C3;$F$3:$F$134;NEPRAVDA)>0;"ANO");"není k dispozici")

prípadne môžete použiť aj
=IF(COUNTIF($F$3:$F$134;C3)=0;"není k dispozici";"ANO")
=KDYŽ(COUNTIF($F$3:$F$134;C3)=0;"není k dispozici";"ANO")

Iste, ale treba vedieť čo chcete zisťovať, a ako potom so zistenými údajmi naložiť (Criteria1, Criteria2, Operator, ...). Napr. filter nemusí byť predsa len jedna hodnota, ale pole, alebo farba, alebo rozsah, ...
Tu je príklad na hodnotu alebo pole hodnôt, ktoré vypíše do oblasti.
Sub VypisFiltrovanychPoloziek(Col As Range, Ret As Range)
Dim F(), R As Long

R = Ret.Parent.Cells(Rows.Count, Ret.Column).End(xlUp).Row - Ret.Row + 1
If R > 0 Then Ret.Resize(R).ClearContents

With Col.Parent.AutoFilter
With .Filters(Col.Column - (.Range.Column - 1))
If .On Then
If IsArray(.Criteria1) Then
Ret.Resize(UBound(.Criteria1)).Value = Application.Transpose(.Criteria1)
Else
Ret.Cells(1).Value = .Criteria1
End If
End If
End With
End With
End Sub


Sub pokus()
With ThisWorkbook
VypisFiltrovanychPoloziek .Worksheets("Hárok1").Range("g:g"), .Worksheets("Hárok2").Range("A1")
End With
End Sub

PS: Toto je zjednodušený príklad. Application.Transpose funguje len do počtu 32767 položiek, ak ich je viac, tak ich vypísať v cyklom preklopenom poli.

A ešte celá príloha.

Hmm, tak to je problém. Čo si tu tak pozerám rôzne PDF, tak samotná skladba Tag-ov v PDF je problematická, pretože je rôzna podľa verzie PDF (1.5, 1.6, 1.7 ...), obsahu (text, zmiešané, iba obrázok, vektor grafika,...), tvorcu (Word, CorelDraw, ...), oddeľovača Tag-ov a ukončovača skupiny Tag-ov (" ", "", NewLine, ">>",...). A navyše tento Pattern pripočíta aj výskyt "\Type \Pages", čo ale nieje "\Type \Page". Ďalej Tag "/Count" sa niekde rovnako nenachádza.
Múdre hlavy, čo s tým ? Žeby v makre nahradiť všetky Pages, medzery aj konce riadkov, a rozobrať cez Split(xStr "\Type \Pages") ? To bude pomalé, a výsledkom nie som si istý.

EDIT 16.4.2020 0:56 :
Stačí asi iba upraviť Pattern na:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyCellRange As Range
Set MyCellRange = Range("K3")

If Not Intersect(MyCellRange, Target) Is Nothing Then
Select Case MyCellRange.Value
Case 1: Call Macro1
Case 2: Call Macro2
End Select
End If
End Sub

Ak nechcete, aby sa vykonalo makro pri zmene 1->1 (teda rovnakej hodnoty), tak treba niekam ukladať starú hodnotu a porovnať. Napr. do nepoužívanej bunky, alebo na skrytý list, alebo použiť globálnu premennú v module. Viď príloha.

Mne to normálne funguje. Automatický prepočet máte zapnutý. Ak sa Vám teda objekt Tabuľka "Tabulka1" normálne zväčšuje, nevidím problém. Teda v prípade, že hľadáte dátum na poslednom vyplnenom riadku. Ak hľadáte najvyšší dátum, to je niečo iné, pretože dátumy tam môžete mať aj poprehadzované, zoradené opačne a pod.

Skúste takto.
Asi to máte len na týchto vzorových súboroch, ale upozorním nato, že dátum vo vnútri súboru v C2 nieje rovnaký ako v názve súboru.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zmena As Range, Bunka As Range, Area As Range, Hodnota

Set Zmena = Intersect(Cells(4, 2).Resize(, 14), Target)

If Not Zmena Is Nothing Then
Application.EnableEvents = False

For Each Area In Zmena.Areas
With Area
For Each Bunka In .Cells
Hodnota = Bunka.Value
If Len(Hodnota) > 0 Then Bunka.Formula = "=IFERROR(VLOOKUP(" & Hodnota & ",'" & ThisWorkbook.Path & "\hesla.xlsx'!HESLA,2,FALSE),""neplatné heslo"")"
Next Bunka

.Value = .Value
End With
Next Area

Application.EnableEvents = True
End If
End Sub

Nesmiete zabudnúť testovať či sgBanka = False. Vtedy bol totiž InputBox zrušený, bez zadania hodnoty. Makro treba zastaviť. To je úplne bežná vec, na ktorú treba myslieť.

Môj návrh rieši aj možnosť zadať 4.5 aj 4,5 a výsledok je vždy číslo 4,5. Vaše riešenie nefunguje, ak sa zadá bodka. Záleží asi aj na jazykovej mutácii. Pže niekde nieje desatinný oddeľovač čiarka, ako u nás. Nechce sa mi štartovať virtuálku s EN Win aj EN Office.

Sami musíte vedieť v akom prostredí u Vás čo môže nastať. Inak OK :)

EDIT:
Tak som to čiastočne overoval, a toto funguje za každých okolností Office SK, CZ, EN / Win SK, EN / W10, W7 / klávesnica SK, EN / oddeľovače "," "." / ošetrenie zrušenia InputBoxu.

Niekto dajte niečo jednoduchšie.
Sub pokus()
Dim ssgBanka As String
Dim sgPrescasy As Double
Dim sgBanka As Double
Dim Dec As String * 1, aDec As String * 1

Dec = Application.DecimalSeparator
aDec = IIf(Dec = ".", ",", ".")
sgPrescasy = 4.5

While ssgBanka <> "False" And Not IsNumeric(ssgBanka)
ssgBanka = Replace(Application.InputBox(Prompt:="Zadej pocet prescasových hodin", Default:=sgPrescasy, Type:=2), aDec, Dec)
Wend

If ssgBanka <> "False" Then sgBanka = CDbl(ssgBanka)
End Sub

Príklad. Ale už to nemôže byť ako Tabuľka, ale len tabuľka. Nefunguje totiž potom externý def. názov.

Môžete napr. použiť nejakú formu kontingenčnej tbl. Len nástrel, na to sú tu fachmani.

Skúste niečo takéto, len nástrel...
Sub pokus()
Dim ssgBanka As String
Dim sgPrescasy As Double
Dim sgBanka As Double

sgPrescasy = 4.5
While ssgBanka <> "False" And Not IsNumeric(ssgBanka)
ssgBanka = Replace(Application.InputBox(Prompt:="Zadej počet přesčasových hodin", Default:=sgPrescasy, Type:=2), ".", ",")
Wend
If ssgBanka <> "False" Then sgBanka = CDbl(ssgBanka)
End Sub

Ale dajte viac informácií:
...tieto 4 si budete môcť potom meniť, ale potrebujem ich vedieť aj teraz...
Na ktorom riadku začína kontrolovaná oblasť?
Na ktorom riadku končí?
Na ktorom stĺpci začína?
Na ktorom stĺpci končí?

"na konci každého riadka" - čo to znamená, že každý riadok končí na inom mieste? Ak áno, čo určuje kde je koniec? Ak to tak nieje, tak ktorý stĺpec je určený na zápis dátumu.

"vložím alebo zmením hocijaké číslo" - to znamená, že v oblasti sú aj nečísla, a keď sa zmenia tie, tak sa dátum nemení? Ak áno, tak treba uchovávať v skrytom liste kompletne minulý stav oblasti pre porovnanie čo bola pôvodná hodnota. S tým súvisí aj otázka čo robiť ak je zmenení číslo na nečíslo a opačne.

Dátum sa má zapísať aj keď sa vymažú údaje? Teda zmažem jednu bunku, má sa zapísať dátum? Alebo zmažem všetky bunky v riadku, má sa zapísať dátum?

Môže nastať viacoblastná zmena? Teda 1 bunka z riadku 4, druhá z riadku 7, tretia z riadku 20 ... ?

...


Strana:  1 ... « předchozí  111 112 113 114 115 116 117 118 119   další » ... 302

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

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.

On-line nástroje