a)
V SK/EN:
FIND() alebo SEARCH()
V CZ:
NAJÍT() alebo HLEDAT()
b)
V SK/EN:
LEFT()
V CZ:
ZLEVA()
Použitie triviálne, viď nápoveda.
Asi skúste ten zdieľaný zošit. Makrom to totiž vôbec nebude také jednoduché ako sa na prvý pohľad zdá.
-Môže nastať zmena viacerých buniek (aj nesúvislých), nielen 1 bunky. Na to sa vyššie uvedený kód nedá použiť. Teraz je otázne, či to urobiť ako logovanie úrovne Areas (+ spojiť všetky hodnoty do oddeleného reťazca) alebo Cells, čo je pri obľube mazania celých stĺpcov nereálne.
-A čo vymazanie pridanie riadku ? Teda sa musí pri každej zmene kontrolovať aj počet riadkov. Ak sa pridá alebo zmaže celý riadok, nastane zmena, kde Target bude počet stĺpcov Excelu, tak sa dá určiť, či bol pridaný/vymazaný riadok. Samotná identifikácia pridania či zmazania sa potom musí urobiť na základe počtu riadkov. Lenže riadky sa dajú pridať aj vložením a posunutím iba niektorých buniek. Celé sa to komplikuje.
-Najväčšia komplikácia ale je, ako zistiť pôvodnú hodnotu. Buď sa bude uchovávať rovnaký list ako skrytý, alebo sa po každej zmene použije Undo, prečítajú sa hodnoty podľa Target, a použije sa Redo. To je katastrofálne pomalé. A ešte pomalšie je, uchovávanie predošlých hodnôt v druhom liste. Prečo? Lebo musíte najskôr identifikovať čo sa udialo (viď napr. pridanie riadku) a následne urobiť to isté v skrytom liste po prečítaní predošlých hodnôt. A to môže byť pre niektoré veci nezrealizovateľné. Napr. pridanie či aplikovanie filtra nevyvolá akciu zmeny, a pritom môže mať enormný dopad na výsledok.
Atď. Snáď sa mýlim, ale nevidím tu reálnu cestu makrom ak nevieme ani či sa jedná a uzavretú tabuľku bez možnosti pridania/vymazania riadku/stĺpca, vplyvu filtrov, či zmeny iných objektov, ...
Tolerancia väčšinou znamená, že aj krajné hodnoty platia, teda Vám tu už spomínali, aby ste si tam dali >= a <=, nielen < a >, tak ako písal "xlnc".
Prehodte "vyhovuje" zo svojho vzorca tak ako to napísal "veny".
Ak sú Min a Max pre viac riadkov použite absolútne adresovanie. Všetko tu už máte napísané.
=IF(AND(J10>=$L$10;K10<=$M$10);"vyhovuje";"nevyhovuje")
=KDYŽ(A(J10>=$L$10;K10<=$M$10);"vyhovuje";"nevyhovuje")
EDIT:
A ešte niečo, Vy potrebujete skontrolovať :
a.) aby boli obe hodnoty J10 aj K10 v tolerancii ? Teda obidve zvlášť voči Maximu aj Minimu ?
b.) kontrolovať J10 voči Minimu, a K10 voči Maximu ? Teda keď bude K10 pod Minimom, to nevadí ?
Sub SmazatPosledniRadek()
Dim PoslRadek As Long
With ThisWorkbook.Worksheets("Tabulka")
PoslRadek = .Cells(Rows.Count, 1).End(xlUp).Row
'If PoslRadek > 1 Then .Cells(PoslRadek, 1).Resize(, 7).Delete Shift:=xlUp
If PoslRadek > 1 Then .Cells(PoslRadek, 1).EntireRow.Delete
End With
End Sub
Použite jeden alebo druhý riadok "If ...", podľa toho, či sa má zmazať celý Excelácky riadok, alebo iba riadok tabuľky (teda či má vpravo od tabuľky všetko ostať alebo nie, teda ak tam niečo je).
EDIT:
Prípadne
If PoslRadek > 1 Then .Cells(PoslRadek, 1).Resize(, 7).Clear
alebo
If PoslRadek > 1 Then .Cells(PoslRadek, 1).Resize(, 7).ClearContents
Záleží na tom, čo myslíte pod slovom "vymazať", a čo pod pojmom "tabuľka".
Príklad možnosti presunu označených riadkov (označenie v hociktorom stĺpci z A:D v rozsahu vyplnených údajov). Je to cez tlačítko, lebo klik na bunku (výber bunky) mi príde zlý nápad.
Skúste:
=INDEX(Hárok2!A:A;(ROW(A1)-1)*6+1)+SUM(OFFSET(Hárok2!$A$1;(ROW(A1)-1)*6+1;;2))*2
=INDEX(Hárok2!A:A;(ŘÁDEK(A1)-1)*6+1)+SUMA(POSUN(Hárok2!$A$1;(ŘÁDEK(A1)-1)*6+1;;2))*2
Načo je tam to "Ano" v A1 ?
Počítate určite hodnoty od A1 ? Nie náhodou až od B1 ?
Načo slúži v makre Dim AnoNe() ?
Ak si ujasníte absolútne a relatívne adresovanie buniek, nepotrebujete podľa mňa žiadny cyklus.
Napr.
Sub pokus()
With Range(Cells(2, 1), Cells(1, Columns.Count).End(xlToLeft).Offset(1, 0))
.Formula = "=COUNTIFS(WINS!$R:$R,A$1,WINS!$S:$S,B$1)"
.Value = .Value
End With
End Sub
Nechce sa mi premýšľať nad všetkým, čo sa tu už popísalo, tak len uvediem pokus na tej prílohe. Keď si dám
WorksheetFunction.VLookup(Vztah * 1, Seznam, 2, 0)
alebo
WorksheetFunction.VLookup(Val(Vztah), Seznam, 2, 0)
tak to fičí.
Jáj :)
Ale okrem zámeny "řádku A:A" s "sloupcem A:A" mi tam do očí bije ešte to, že treba vkladať vzorce do A1, A2, A3, ... na základe riadku 2:2. Čo ale koliduje s vkladaním do A2, keďže je to 1. bunka 2. riadku, ktorý je referenčný pre počet vzorcov.
Alebo podľa druhého príspevku je vraj v sloupci A:A v bunke A1 vzorec X, v bunke B1 vzorec Y, ... Lenže problém je, že bunka B1 nieje v sloupci A:A.
No a do tretice mi neštimuje v B1 vzorec =COUNTIFS(wins!S:S;$C$1;wins!S:S;$B$1), ktorý odkazuje ako kritérium sám na seba, teda B1. A rovnaké to bude v bunke C1 keď bude zase prvé kritérium C1.
Teda ja predpokladám, že keď si dopletiete tie jablkohrušky, tak nám ukážete niečo v tom zmysle, že máte v riadku 2:2 (A2:Axxx) hodnoty, ktoré určujú počet vzorcov v riadku 1:1 (A1:Axxx). A tie vzorce do 1:1 (A1:Axxx) chcete vložiť, pričom ako kritérium bude odpovedajúca hodnota napr. z 2:2 (A2:Axxx). A pod. Proste niečo, čo nebude kolidovať navzájom. :)
Takže Dejwing, šup sem prílohu...
Máte tam už vzorce, a chcete ich nahradiť hodnotami ?
Označte oblasť, Ctrl+C, pklik, Možnosti prilepenia - Hodnoty. Na to nieje treba makro.
Nemáte tam vzorce, a chcete ich vložiť do stĺpca A:A toľko, koľko je v riadku 2:2 hodnôt, a následne previesť na hodnoty ? Na to sa dá makro urobiť, ale vložte prílohu ako to vyzerá, nech vieme ako sú dáta umiestnené, odsadené, typ dát, či je pod tabuľkou niečo iné na čo treba brať ohľad pri zisťovaní počtu riadkov, či sú tam medzery a pod ...
A toto by nešlo ?
Sub NajdiOznac()
Dim PocetU As Long, PocetSD As Long, V, RNG As Range
PocetSD = Sheets("Strategické díly").Cells(Rows.Count, 1).End(xlUp).Row
With Sheets("Urgence")
PocetU = .Cells(Rows.Count, 3).End(xlUp).Row
If PocetU = 1 Or PocetSD = 2 Then MsgBox "Není co řešit :)": Exit Sub
V = Evaluate("=IF(COUNTIF('Strategické díly'!A3:A" & PocetSD & ",Urgence!C2:C" & PocetU & ")>0,True)")
For PocetU = 1 To PocetU - 1
If V(PocetU, 1) Then
If RNG Is Nothing Then Set RNG = .Cells(PocetU + 1, 3) Else Set RNG = Union(RNG, .Cells(PocetU + 1, 3))
End If
Next PocetU
End With
If Not RNG Is Nothing Then RNG.Interior.Color = RGB(0, 255, 0)
End Sub
Sub NajdiReklamace()
Dim rngPrvni As Range, rngPosledni As Range, rngReklamace As Range
With Range("N:N")
Do
If rngPrvni Is Nothing Then
Set rngPrvni = .Find(What:="EBE", After:=.Cells(1), LookAt:=xlPart)
Set rngPosledni = rngPrvni
Else
Set rngPosledni = .Find(What:="EBE", After:=rngPosledni, LookAt:=xlPart)
If rngPosledni.Address = rngPrvni.Address Then Exit Do
End If
If rngPosledni Is Nothing Then Exit Do
If rngReklamace Is Nothing Then Set rngReklamace = rngPosledni.Offset(0, 5) Else Set rngReklamace = Union(rngReklamace, rngPosledni.Offset(0, 5))
Loop
End With
If Not rngReklamace Is Nothing Then rngReklamace = "REKLAMACE"
End Sub
Áno drobná chybka odo mňa pri $D$4 má byť $D4, samozrejme. Pridal som Vám tam vizuálne overenie, a ejhľa. Nielenže Vám nesedia tie hodnoty čo tam máte uvedené v rozsahoch voči meradlám, ale navyše tam máte medzery okolo "-", pričom v zoznamoch medzery niesú. To som upravil. Rovnako pozor na to, že som Vám, tak ako ste chcel, vypustil tie podtržítka.
Napadá ma takáto blbina, len sa mi nezdá, že by to muselo byť až takéto "zložité". Snáď dá niekto niečo kratšie.
=IF(ABS(F37)>H37;(ABS(F37)-H37)*IF(F37<0;-1;1);"-")
=KDYŽ(ABS(F37)>H37;(ABS(F37)-H37)*KDYŽ(F37<0;-1;1);"-")
Tak môže to byť kľudne trebárs aj takto ... ?
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.