Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno excel 2010, proces vytvarania textoveho outputu programu

Pouzivam jeden program, do ktoreho ked manualne zadate texty ako: nazov zoznamu, nazov kodoveho setu, kod1/2, kod2/2; tak urobi zelany dlhy text s korektnou povinnou omackou, co pouziva iny proces toho programu. Ale nie je to dobre, ked robim s desiatkami, stovkami kodovych setov. Preto sa da vytvorit v exceli vzorec, ktory zoberie z buniek pastnute kody a automaticky doplni tu omacku. Chcel som to vymysliet, ale nemam sajn ake funkcie sa musia pouzit. Viem len ako to urobit:
- stlpec A, B bude vyhradeny na paste tych kodov. Nic dalsie.
- niekde pomimo budu dve bunky, kam do jednej napisem vseobecny nazov kodoveho setu (ktory sa bude menit- pridavat +1 increment), a do druhej napisem nazov kodoveho zoznamu(ten bude len jeden a konecny). Funguje to tak, ze bunky jedneho riadka stpcov A, B vytvaraju spolu jeden Kodovy set. Cize A1, B1 = Kodset1. Ak tam pastnem napr. desat riadkov kodov, tak ten vzorecek zoberie skupinu tych desiatich Kodsetov a nazve ich menom co som napisal do bunky Kodoveho zoznamu. A za nazov Kodsetov sa bude automaticky pridavat +1 cislo. Teda ak do bunky zadam nazov kodsetu ze: Kodset_jadro, Tak vsetky kodsety budu mat nazvy: Kodset_jadro1, Kodset_jadro2, Kodset_jadro3, .....
Vsetky budu patrit do spolocneho Kodoveho zoznamu.

Ja budem mat v predpripravenych bunkach pastnute vsetky FixneTexty. Potom vzorec (bude to len jedna bunka na vsetko) odkazem na ne a zviazem ich pomocou & znaku s tymi dalsimi bunkami co vytvorite vy (mini vzorecky).

Rekapitulacia:
Kod je string v A1, A2, A3 ...
Kod je string v B1, B3, B3 ...
Kodovy set je string A1, B1 alebo A2, B2 ....
Kodovy zoznam su vsetky Kodove sety.

Ja zadam:
Vsetky Kody v stlpcoch A, B.
Nazov Kodoveho setu.
Nazov Kodoveho zoznamu.

Mini vzorecky urobia:
Jeden spravi: zoberie pocet vyplnenych riadkov (stlpce A, B) a podla toho upravi nazvy Kodovych setov (vsade prirata jednotku).
Druhy spravi, ze spocita kolko mame vyplnenych riadkov (stlpce A, B) a podla toho urobi rovnaky pocet opakovani:
(Znazornenie struktury vzorca:)

FixnyText1	nazovPrvehoKodovehSetu + 1	FixnyText2	SamotnyKodZoStplcaA1	FixnyText3	SamotnyKodZoStplcaB1	FixnyText4

Treti spravi, ze nakoniec prida toto:
(Znazornenie struktury vzorca:)

FixnyText5	nazovKodovehoZoznamu	FixnyText6

Teda druha polovica vysledku vzorca bude vzdy rovnaka. Pre dane zadanie.

Toto je prva polovica vysledku vzorca (Znazornenie struktury vzorca(to iste co hore)):[XJok3xy.png]. Je to znazornene pod seba, ale vo vzorci to bude vsetko vedla seba. Take dlhe, kolko bude Kodov.

Toto je ta druha polovica (Znazornenie struktury vzorca(to iste co hore))[R91fgJ1.png]. Prilepi sa za prvu polovicu. Total vsetko bude jeden riadok, lepsie povedane jedna bunka - jej vysledok.

Dakujem pekne !

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Po troske sa mi dari napredovat aj samemu, ale ked toto nevyriesim dalej sa neviem pohnut: - prva ca… nový
IT_lamiak 21.07.2015 15:14
IT_lamiak
Docital som sa, ze funkcia CONCATENATE podporuje maximalne string o dlzke 255 znakov, co by mi nesta… nový
IT_lamiak 21.07.2015 17:39
IT_lamiak
Tady asi poc nepochodíš. Doporučuji ti nějaké odborné forum, třeba forum#!forum/excelcz-forum nový
Stepanek100 21.07.2015 17:54
Stepanek100
Niektori ludia, ktori toto forum pravidelne navstevuju a prispievaju sem; mi vedia v tomto urcite po… nový
IT_lamiak 21.07.2015 18:07
IT_lamiak
Lenže ty si si sem neprišiel po radu, ale po hotové riešenie. Tvoje zadanie je tak komplikované, že… nový
los 21.07.2015 21:50
los
1, Nerozumiem preco toto nefungovalo ako je to na obrazku vysie. =IF(A2=NOT(FALSE);(A2&A3)) =IF(A2=N… nový
IT_lamiak 22.07.2015 16:07
IT_lamiak
Hele, stejně jako ostatní, ani já jsem zadání nepochopil, hlavně to tvoje kouzlení s FALSE je pro mě… nový
Zdenál 22.07.2015 17:25
Zdenál
Bohuzial to svedci o ich detinskosti a nekulturnosti tohto fora. za letošní rok si nepamatuju tvůj… nový
lední brtník 21.07.2015 22:31
lední brtník
Oni len nechcu, trucuju skratka. Já třeba netrucuji. Ovšem jsem na tom podobně jako los - přečetl j… nový
MachR55 22.07.2015 08:21
MachR55
Jak už Ti tu psali jiní, ač sem celé zadání několikrát přelouskal netuším ani zbla o co se má jednat… nový
Siki83 22.07.2015 16:30
Siki83
Uprimne ma to mrzi, ked to tak vidite vsetci evidentne. Ale dost dlho som to pisal a premyslal som,… nový
IT_lamiak 22.07.2015 17:35
IT_lamiak
len potrebujem vediet preco mi nejde skopirovat vysledok zretazenia ? Pokud sem nevložíš soubor s u… poslední
Siki83 25.07.2015 12:00
Siki83

Po troske sa mi dari napredovat aj samemu, ale ked toto nevyriesim dalej sa neviem pohnut:
- prva cast struktury vzorca robi to, ze spaja dokopy vsetky zadane Kody + cast omacky. Teda sa to nabaluje jedno na druhe. Skusal som to vyriesit takto, ale excel to nezobral, kde mam chybu ?
A dalsia vec, skusil som tu funkciu =CONCATENATE bez podmienky, len ze ako funguje, a nefunguje tak ako potrebujem. Neberie do uvahy predosle bunky, iba poslednu.
Ina podobna funkcia v exceli neexistuje tak neviem co mam robit. A zase urobit makro aby vpisalo do bunky toto: A1&A2&A3&A4....az po 500-ty riadok je nezmysel aj neviem, ci by bunka zobrala tolko znakov naraz ako vzorec.
[kt0hBpT.png]
D-ckovy stlpec je ilustracny, ako by mal vyzerat B stlpec.

Co teraz ?

Docital som sa, ze funkcia CONCATENATE podporuje maximalne string o dlzke 255 znakov, co by mi nestacilo.
Cestou operatora &, by toto obmadzenie tam byt nemalo.
Inak toto mi neislo urobit s CONCATENATE funciou: =CONCATENATE(A27:A32) (vlastne islo, az ked som pouzil Array vlozenie, ale aj tak vysledok bol zly), tak som vygooglil tuto funciu:

Function concat(useThis As Range, Optional delim As String) As String
' this function will concatenate a range of cells and return one string
' useful when you have a rather large range of cells that you need to add up
Dim retVal, dlm As String
retVal = ""
If delim = Null Then
dlm = ""
Else
dlm = delim
End If
For Each cell In useThis
if cstr(cell.value)<>"" and cstr(cell.value)<>" " then
retVal = retVal & cstr(cell.Value) & dlm
end if
Next
If dlm <> "" Then
retVal = Left(retVal, Len(retVal) - Len(dlm))
End If
concat = retVal
End Function

Ale stale potrebujem vyriesit, aby vynechavalo bunky ktore obsahuju FALSE hodnotu.
Je rozdiel ak je v bunke manualne napisane FALSE a ak je FALSE ako vysledok vzorca ?
Testoval som tuto novu funkciu a funguje. Ale zas nie ak to pisem cez IF a NOT(FALSE). Neviem kde mam chybu, tak by som potreboval upravit tuto novu makrovu funkciu, aby do nej bolo mozne zadat treti parameter, ktory by vynechaval danu hodnotu. Cize by to vyzeralo asi:
=CONCAT(A1:A500;"";"FALSE") alebo iba FALSE, ak je to keyword pre excel. "" znaci ze ziadny delimiter tam nebude. Ale je to nepovinny parameter, tak ho mozem vynechat.

Podme pani, uz to skoro mame !!

Niektori ludia, ktori toto forum pravidelne navstevuju a prispievaju sem; mi vedia v tomto urcite poradit(lebo mi v exceli radili aj predtym). Oni len nechcu, trucuju skratka. Bohuzial to svedci o ich detinskosti a nekulturnosti tohto fora.

Link, ktory si mi dal, som prezeral, ale vyzera to ze tam chodi malo radcov a celkovo sa tam prispieva poriedko. Ja poznam aj nenake zahranicne velke excel fora, ale tam moc nechcu pisat makra 'zadarmo'. Vzdy je tam sekcia ze Platena pomoc alebo tak...
Lenze tam chcu od nich velke veci, no ja tu len drobnosti. Nevidim v tom problem

Lenže ty si si sem neprišiel po radu, ale po hotové riešenie. Tvoje zadanie je tak komplikované, že som to nepochopil ani po dvoch prečítaniach. Ale vidím, že potrebuješ zreťaziť 500 buniek, a to už zaváňa buď chybou v návrhu alebo zvolením nevhodného nástroja.

K otázke, ako sa líši manuálne zadané FALSE od FALSE, ktoré je výsledkom vzorca: Nijako. Môžeš si to jednoducho vyskúšať tak, že do A1 napíšeš "FALSE", do B1 napíšeš "=FALSE" a do C1 napíšeš "=A1=B1" - výsledkom bude "TRUE".

K úprave funkcie: Sprav tú zmenu postupne, keď to nevieš naraz. Najprv doplň riadok, v ktorom sa testuje hodnota bunky, o kontrolu voči False:

... And cell.Value <> False

A potom si to môžeš vytiahnuť do parametra (použiješ typ Variant), to už nebude nič ťažké.

Ináč neviem, odkiaľ sa ti tam to FALSE nabralo, ale mohol by si ho nahradiť za prázdny reťazec a nemusel by si riešiť to, s čím teraz nevieš pohnúť.

Nakoniec zopár postrehov k tvojim vzorcom. Keď máš vzorec v tvare "=IF(NejakyVyraz;FALSE;TRUE)", tak to je to isté ako "=NOT(NejakyVyraz)". Podobne vzorec "=IF(NejakyVyraz;TRUE)" je ekvivalent "=NejakyVyraz". Keď si toto uvedomíš, tak tvoje vzorce sa podstatne zjednodušia.

1, Nerozumiem preco toto nefungovalo ako je to na obrazku vysie.
=IF(A2=NOT(FALSE);(A2&A3))
=IF(A2=NOT(FALSE);CONCATENATE(A2;A3))
Vysvetlis ? (oba sposoby nefunguju)
edit: prave ma napadlo ze NOT(FALSE) je TRUE. Ale ja som to myslel tak, ze vsetko ine okrem FALSE tam moze byt. Lebo napr "fg334" nie je FALSE, cize NOT, cize nie je nieco v zatvorke (ale nema to automaticky znamenat, ze opak. To som nechcel),ale hentam to tam ma iny zmysel. Skusal som aj napr. NOT("c") ale hlasi chybu, tak tipujem ze excel ma pre tento ucel nieco ine. Co ?

2, To, ci je FALSE excelovsky keyword som sa pytal preto, ze ked to budem pisat do vzorca, ci to ma byt bez dvojitych uvodzoviek alebo s nimi.

3, To co riesim by sa dalo vsetko naraz jednym makrom. Ale kedze to neviem a neviem ani co si napisal o makre(ked mi pises makrove veci len v indiciach, tak sa to neda spojit do celku. Ked to neviem tak si nemozem ako vycucat z prsta syntax a pod), tak som si chcel spravit 3 pomocne stplce, ktore maju vzorce, co sa daju potiahnut dole po 500-ty riadok(prvy stlpec robi meno Kodoveho setu +1, druhy stlpec spaja Kodovy set + vysledok prveho stplca + cast omacky. Treti stlpec mal byt ten akumulacny{mal spajat vysledky druheho stplca}, ale neviem ho spravit.) Tento treti co mal postupne akumulovat zretazenie sa neda v exceli vytvorit ? (bez toho aby sa manualne vpisovalo A1&B1 - prvy riadok. A1&B1&A2&B2 - druhy riadok atd ...
[1heQrPE.png]
Nieco podobne ako sa da v programovani ze: a = b + 1 v loope. Ale napisat to do vzorca. V makre sa to asi da urcite.

4, Nemam striktne zadane kolko riadkov budem retazit. Zalezi ze kolko Kodovych setov potrebujem mat pokope v jednom stringu. Raz 10, niekedy 50, .... 500 som dal od brucha, pretoze ked neviem urobit vzorec, ktory staci potiahnut dole a bude robit svoju pracu, tak som musel najst sposob ako makru zadat fixne hranice aby to zretazil. Ked aj budem mat 10 Kodovych setov a UserDefinedFunkciu na 500 riadkov, tak blanks vynechavaju alebo su ako "", takze stale nic na zretazenie.

5, Uz som to spravil a funguje to. Pouzil som toto:

Function concat(useThis As Range, Optional dlm As String) As String
' this function will concatenate a range of cells and return one string
' useful when you have a rather large range of cells that you need to add up
Dim retVal As String
Dim cell As Range
retVal = ""

For Each cell In useThis
   'Omit cells with blanks and that equal FALSE

    If CStr(cell.Value) <> "" And _
    CStr(cell.Value) <> " " And _
    UCase(CStr(cell.Value)) <> "FALSE" Then
        retVal = retVal & CStr(cell.Value) & dlm
    End If
Next
concat = Left(retVal, Len(retVal) - Len(dlm))

End Function

Je to tam natvrdo zadane ze omituje iba false.
Napisal som, ze to funguje, ale nemozem si nijako skopirovat ten output, neviem preco. Vidim ho ako text co presahuje tu bunku, ale ked ju oznacim a skopirujem, tak to robi hovadiny. Neviem preco ??
A tiez to pastne ine veci, ked to pastujem do inych miest pod tym vzorcom v rovnakom stplci. Co to ma znamenat
Tie pomocne stlpce som skryl, ale keby to sposobovalo problem, tak by nefungoval vzorec ale funguje. Ked nan nakliknem vidim: =F1&E2&F9&H1&F11

Oni len nechcu, trucuju skratka.

Já třeba netrucuji. Ovšem jsem na tom podobně jako los - přečetl jsem to asi 5x zepředu i zezadu, ale stále nějak nechápu, čeho chceš dosáhnout. A tvoje postupné kroky mi to spíš ještě více zatemňují.
Mohl bys tedy uvést: Co to je a jak vypadají kódy ve sloupcích A a B? Jak vypadá kódový set? Jaký je jeho název? Co to je a jak vypadá kódový seznam a jeho název? Kam a kdy se přičítá ta jednička? A co má pak z toho všeho vyjet na výstupu?
Nejlepší by bylo, kdybys u všeho uvedl nějaké příklady, takhle obecně napsáno to vypadá opravdu šíleně složitě a stále netuším, co si pod tím mám představit.

K funkci CONCATENATE - následující dva vzorce jsou zcela totožné, dají naprosto stejný výsledek:

= CONCATENATE(A2;A3)
= A2&A3

Z hlediska přehlednosti a jednoduchosti zápisu vzorců je vždy lepší používat "&" místo CONCATENATE.

Dále - vzorec:

= CONCATENATE(A1:A500)

Je jednak nesmysl (argumenty funkce CONCATENATE musí být texty, nikoli oblast) a jednak si nedokážu představit, k čemu bys potřeboval spojit 500 buněk?

O TRUE/FALSE už psal los.

Pořád se potýkáš s tím, že neumíš základy Excelu, na což jsi tady byl už několikrát mnohými lidmi upozorněn...

Jak už Ti tu psali jiní, ač sem celé zadání několikrát přelouskal netuším ani zbla o co se má jednat.
Takže sem reagoval na tvůj post z 21.07.2015 15:14 viz soubor.

Když by si sem vložil vzorový SEŠIT místo těch přiblblých obrázků s jasně popsaným "problémem" z kterého bude jasně patrné oč jde, tak by někdo snad i poradil.

Uprimne ma to mrzi, ked to tak vidite vsetci evidentne. Ale dost dlho som to pisal a premyslal som, ako by ste to co najlepsie pochopili. To, co potrebujem sa neda dokonale vysvetlit, pretoze ste nic podobne neriesili ani nevideli niekoho ineho pouzivat. A aj keby som sem dal subor a predpripravenymi vecami, stale by to bolo dost bezo zmyslu. Skusal som to urobit aj v Pythone3, ale ked tam pastujem data z excelu, tak to priniesie so sebou aj tabulator a cele to je pokrivene.
Ked idem cez input('fdsfsdf') funciu, tak ta zoberie len prvy riadok paste.

Ale je to uz jedno, ked to mam hotove, len potrebujem vediet preco mi nejde skopirovat vysledok zretazenia ?

Zpět do poradny Odpovědět na původní otázku Nahoru