Ani najväčším omylom to neodstráni všetku diakritiku. Ani len slovenskú nie (ŕ,ô,ľ,ĺ). O iných ani nehovorím (ń,ñ,ć...). Pozrite sa na Mapu znakov, koľko ich tam ešte je.
Vzorcom ? Stačí dať prepočítať list na karte Vzorce, a čísla sa zmenia. Alebo akákoľvek zmena v bunkách spôsobí prepočet čísel. Ak potrebujete presný opak, aby sa čísla neprepočítavali samé pri nejakej zmene, tak potom jedine makrom.
OT:
Darbujan: Presne s takýmito "popismi" sa často stretám, fantázia musí často len tak hučať, a tak som možno zvyknutý.
Alindros: Chvalabohu ste ani jedno netrafil. Tému som nezaložil ani nepamätám, Čaka zrovna nemusím, a ako Sheldon by som byť nechcel, ale mám ho rád
marjankaj: Hádať riešenie ? No, áno je to často lotéria :)
Tak toto sú prkotiny. Čo je horšie, že nemám elán/čas na komplikovanejšie veci čo som prisľúbil (a týmto sa aj ospravedlňujem tým čo som niečo rozpracoval/sľúbil a stále nič). Posledné 3-4 mesiace ... no bieda so mnou. Neviete zohnať pod rukou nejaký kryptonit ? Ten by bol asi v dnešnej dobe rozchytaný co-by-dup.
Áno, v tom prípade by to mohlo byť takto nejako:
=IF(ISERROR(SEARCH(","&A2&",";","&$C$1&","));"";B2)
=KDYŽ(JE.CHYBHODN(HLEDAT(","&A2&",";","&$C$1&","));"";B2)
a malo by to obsiahnuť všetky mysliteľné eventuality čo ma napadajú.
Si myslím, že som to uviedol správne, či nie ???
=IF(ISERROR(FIND(UPPER(A2);UPPER($C$1)));"";B2)
=KDYŽ(JE.CHYBHODN(NAJÍT(VELKÁ(A2);VELKÁ($C$1)));"";B2)
Vylúči chybu pri zadaní malého písmena, ale aj tak odporúčam výberový zoznam (Overenie dát) pre zápis mena.
Môže nastať exotický problém, ak v C1 bude Alfredo a A bude Edo. Nájde ho, aj keď tam je Alfredo.
EIDT: SEARCH/HLEDAT ošetruje malé/veľké:
=IF(ISERROR(SEARCH(A2;$C$1));"";B2)
=KDYŽ(JE.CHYBHODN(HLEDAT(A2;$C$1));"";B2)
Konkrétne SUMIF()
=SUMIF(A2:A7;"*"&D2&"*";B2:B7)
Dajme tomu, že v D2 máte to čo chcete hľadať a zrátať.
SUMIFS()
=SUMIFS(B2:B7;A2:A7;"*"&D2&"*";C2:C7;"a")
V stĺpci C je ďalšia podmienka pre SUMIFS.
Sub posun_radek_sloupec()
Dim RNG As Range, Bunka As Range, Pocet As Long
Application.ScreenUpdating = False
For Each Bunka In Columns("D:D").SpecialCells(xlCellTypeBlanks).Offset(0, -1).Cells
Bunka.Copy Bunka.Offset(-Pocet, -1)
Pocet = Pocet + 1
If Pocet = 1 Then Set RNG = Bunka.Resize(, 2) Else Set RNG = Union(RNG, Bunka.Resize(, 2))
Next Bunka
RNG.Delete Shift:=xlShiftUp
Application.ScreenUpdating = True
End Sub
A ešte je možnosť použiť aj na nájdenie poslednej jedničky nematicový vzorec:
=INDEX(ROZSAH_DATUM;;LOOKUP(2;1/(ROZSAH_DAT=1);COLUMN(ROZSAH_DATUM)-6))+6
=INDEX(ROZSAH_DATUM;;VYHLEDAT(2;1/(ROZSAH_DAT=1);SLOUPEC(ROZSAH_DATUM)-6))+6
Tú chybu Vám dá, ak použijete maticový vzorec obyčajným stlačením Enter. Maticový vzorec sa zadáva Ctrl+Shift+Enter. Je určený na to, aby našiel poslednú jedničku v prípade, že nejdú po sebe, ale že sú medzi nimi medzery.
Naopak ten druhý vzorec, je obyčajný (nematicový), a počíta s tým, že jedničky idú po sebe, v jednej jedinej skupine v riadku.
Máte si len vybrať, lebo nevieme, ako presne zapisujete dáta.
Mám nové auto. A div sa svete, nieje na ňom všetko lepšie ako na starom (rovnaký model). Teda odpoveď znie : Samozrejme! Vždy môže byť niečo "špatně". Ale pokiaľ nepoviete, čo je zle, ja to hľadať nebudem. Tu máte oba varianty. červený je matica, zelený je normál vzorec. Zodpovedajú Vami požadovaným výsledkom. Tak priložte príklad, nech sa to upraví.
Pre prehľadnosť si nadefinujte 2 Definované názvy:
ROZSAH_DATUM
=OFFSET(List1!$G$2;;;;COUNT(List1!$3:$3))
=POSUN(List1!$G$2;;;;POČET(List1!$3:$3))
a ROZSAH_DAT
=OFFSET(ROZSAH_DATUM;ROW()-2;)
=POSUN(ROZSAH_DATUM;ŘÁDEK()-2;)
Štart nájdite napr (obyčajný vzorec : Enter):
=INDEX(ROZSAH_DATUM;;MATCH(1;ROZSAH_DAT;0))
=INDEX(ROZSAH_DATUM;;POZVYHLEDAT(1;ROZSAH_DAT;0))
End nájdite (maticový vzorec : Ctrl+Shift+Enter):
=INDEX(ROZSAH_DATUM;;MAX(IF(ROZSAH_DAT=1;COLUMN(ROZSAH_DATUM);0))-6)+6
=INDEX(ROZSAH_DATUM;;MAX(KDYŽ(ROZSAH_DAT=1;SLOUPEC(ROZSAH_DATUM);0))-6)+6
Ak sú jedničky vždy za sebou, a tvoria iba jednu oblasť, tak potom (normálny vzorec : Enter)
=D5+COUNTIF(ROZSAH_DAT;1)*7-1
Tak teda ešte raz. Tu máte všetky 3 verzie funkčné. Každá verzia má svoj list aj svoj modul s makrami. Nechajte si len ktorú chcete. Máte tam popis ako sa používajú, pridávajú, upravujú.
K predošlej otázke, ktorá je ale už irelevantná:
Ak sa jedná o F:G (susedné stĺpce), tak to fungovať musí
With .Range("F:G").Resize(R)
.Value = .Value
End With
Ak sa jedná o nesúvislé stĺpce napr. E a G tak treba obdobné makro zopakovať 2x.
With .Range("E:E").Resize(R)
.Value = .Value
End With
With .Range("G:G").Resize(R)
.Value = .Value
End With
Každopádne si vyberte ale verziu, kde nemusíte makro upravovať. Dá sa tam ešte doplniť kontrola nezadania parametrov a pod.
Tu máte príklad, ako by to šlo riešiť. Najväčšia komplikácia je, odkiaľ zobrať a ako poslať makru zoznam stĺpcov na mazanie a zoznam stĺpcov na prevod vzorcov na hodnoty. Určite sa to nebude riešiť kopírovaním rovnakého makra iba so zmenenými stĺpcami pre každé tlačítko zvlášť.
Takže je tu parametrizovaná procedúra ExportList(), kde parameter:
Tlacitko - je "Application.Caller", teda identifikátor tlačítka, ktoré bolo stlačené. Na ktorom riadku sa tlačítko nachádza nieje problém potom zistiť, podľa bunky v ktorej je (TopLeftCell). A aj keď si potom prečítame z A:A podľa toho názov listu, ktorý treba spracovať, je nám to prd platné, keď chcete mať rôzne nastavenia pre rôzne listy.
Vzorce - zadávate v ňom názvy stĺpcov oddelené čiarkami, ktoré chcete previesť na hodnoty, teda napr. "E,G"
Mazat - to isté čo Vzorce, len ide o mazanie hodnôt.
Toto riešenie síce zníži rozsah makier, ale stále vyžaduje zásah do makier, a pridanie nového volajúceho makra a priradenie tohto makra novému tlačítku pri pridaní nového listu do zoznamu.
Lepšie by bolo to riešiť tak, aby ste nemusel do makra vôbec ísť. Ponúka sa pridať do zoznamu vedľa 2 stĺpce, kde bude v bunkách k daným listom uvedené ktoré stĺpce sa majú prevádzať, a v ďalšom stĺpci bude uvedené, ktoré stĺpce sa majú mazať. Makro by si tieto infošky prečítalo samé, a nič by ste nemusel pri pridaní listu v makrách meniť. Len skopírovať tlačítko na nový vyplnený riadok.
Ďalšou možnosťou ako použiť parametrizovanú uni-procedúru by bolo, keby ste mal 1 výberový zoznam a 1 tlačítko. To by volalo procedúru vždy so správnymi parametrami, uvedenými v nastavovacej tabuľke.
Dúfam, že ma chápete. Povedzte, ako to chcete, nech to neprerábam X krát.
Pridal som pre ukážku ako by to mohlo vyzerať listy Seznam2 a 3. Sú nefunkčné, to len pre pochopenie.
Šmarjá, treba si ujasniť pojmy.
1. Na iný list sa odkážete
Worksheets("Meno listu").Range("A1").Value = "Hello World!"
2. Koľko listov sa má naraz kopírovať do iného súboru ?
3. Ovládanie bude teda z nejakého riadiaceho listu ?
4. Raz vravíte o stĺpcoch F a H (tam som sa ja pomýlil a dal F a G), potom vravíte o E a F. Tak ešte raz, ktoré stĺpce ?
5. Zmazať vzorce ??? Čo tým myslíte ? Snáď myslíte prekonvertovať vzorec na jeho výsledok, tak ako je to teraz.
6. Čo znamená zmazať stĺpce N a O? Vymazať ich obsah (ako s Delete), alebo ich odstrániť úplne, teda zvyšok tabuľky sa posunie doľava ?
7. Stĺpce majú hlavičky, alebo akékoľvek iné odsadenie od vrchu listu ? Ak áno, koľko riadkov ?
8. Ktorý stĺpec sa dá použiť na určenie výšky dát ? Alebo je to variabilné ?
9. Ak sa to má hneď uložiť, odkiaľ sa má brať názov súboru a cesta ? Má sa Vás to opýtať na cestu a názov ?
10. Ak pôjdu tie listy samostatne ukladať, tak sa má pýtať na meno a umiestnenie pre každý list zvlášť ?
11. Nereagoval ste na ten príklad so stĺpcom P. Teda ak zmažete/odstránite stĺpce N a O, nie sú na ne náhodou naviazané nejaké vzorce ?
...
Treba aj nad zadaním stráviť nejaký čas...
a priložiť príklad.
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.