< návrat zpět

MS Excel


Téma: Spojit text rss

Zaslal/a 29.4.2015 22:33

Zdravím vás,
potřeboval bych od vás, ExcelMágů, poradit. V sešitu, který posílám, jsou od buňky A2 směrem dolů doplňované buňky. Nikdy přesně nevím, kolik jich bude (ale ne víc jak 20). V buňce B1 bych potřeboval, aby se výrazy ze sloupce A zkopírovaly do této buňky a mezi výrazy by měla být čárka. Spojil jsem to docela neodborně pomocí fcí KDYŽ a CONCATENATE, ale věřím, že to jde i elegantněji (třeba pomocí matice?).
Děkuji mnohokrát za radu(y).
MarťasV.

Příloha: zip24702_spojit-text.zip (8kB, staženo 28x)
Zaslat odpověď >

Strana:  1 2   další »
icon #024704
eLCHa
http://elcha-en.blogspot.com/2014/12/array-formula-cse-in-vba-code.htmlcitovat
#024706
avatar
Zdravím, moc děkuji, ale makra nejsou moje doména, nešlo by to, prosím, vzorcem?
Děkuji moc, MVcitovat
icon #024707
eLCHa
Ne - toto vzorcem nelze (pokud to nechcete dělat metodou, kterou jste nastínil)

popřípadě vymažte B1
do B2 vložte=B1&","&A2a zkopírujte dolů
ve spodní buňce máte výsledek (převeďte na hodnotu a smažte první čárku)

Pokud zkopírujete funkci CONCATENATE_RANGE do modulu, tak ji budete moci používat jako vzorec na listu (vlastní funkce)citovat
#024708
elninoslov
Ja by som to urobil pomocou UDF asi takto
Function fSpoj(ByRef Rozsah As Range) As String
Dim Bunka As Range
For Each Bunka In Rozsah
If Bunka <> "" Then fSpoj = fSpoj & IIf(Bunka.Address = Rozsah.Cells(1).Address, "", ", ") & Bunka
Next Bunka
End Function
citovat
icon #024709
eLCHa
@elninoslov
přečtěte si ten odkaz, není třeba používat cykluscitovat
#024710
elninoslov
Práveže podľa mňa to potrebné kvôli jednoduchosti použitia je. Ak nieje známy počet vyplnených buniek, dá CONCATENATE_RANGE na konci delimiter. To sa dá ošetriť, napr tak, že sa vloží ako parameter už vypočítaná zaplnená oblasť, bez prázdnych buniek na konci. Lenže delimiter dostaneme aj keď bude medzi zaplnenou oblasťou prázdna bunka. Preto som dal cyklus. Možno sa to dá urobiť inak, toto je prvé čo ma napadlo, a ďalej som to už neskúmal :)citovat
icon #024711
eLCHa
přesvědčovat Vás samozřejmě nebudu ;)citovat
#024714
avatar
Děkuji moc všem zúčastněným, funguje to perfektně :) Škoda, že to nejde vzorcem, ale i tak je to geniální (y).
MarťasVcitovat
#024718
avatar
No ak ti nevadí pomocný hárok, tak mne sa to podarilo vzorcom.
A môžeš ich mať aj cez 200 5
Příloha: zip24718_spojit-text.zip (14kB, staženo 28x)
citovat
#024830
elninoslov
Dnes som niečo podobné robil, preto som sa k tomu vrátil.
Skúsil som upraviť aj fnc od eLCHa tak, aby eliminovala zdvojené oddeľovače a oddeľovač na konci, pri prázdnych bunkách:
Function CONCATENATE_RANGE(rRange As Range, Optional sDelimiter As String = ",") As String
Dim pos As Long, DoubleDelimiter As String
DoubleDelimiter = sDelimiter & sDelimiter
CONCATENATE_RANGE = Join(Evaluate("TRANSPOSE(" & rRange.Address & ")"), sDelimiter)
pos = 1
Do Until pos = 0
CONCATENATE_RANGE = Replace(CONCATENATE_RANGE, DoubleDelimiter, sDelimiter)
pos = InStr(pos, CONCATENATE_RANGE, DoubleDelimiter)
Loop
CONCATENATE_RANGE = Left(CONCATENATE_RANGE, Len(CONCATENATE_RANGE) - IIf(Right(CONCATENATE_RANGE, Len(sDelimiter)) = sDelimiter, Len(sDelimiter), 0))
End Function

Ako sa vyhnúť cyklu pri odstraňovaní zdvojených (a viac) oddeľovačov ale neviem.
To s pomocným listom je zaujímavé. Ani jedno ale nedokáže spojiť 2D oblasť.
Preto si myslím, že toto je lepšie a spojí 2D:
Function fSpoj(ByRef Rozsah As Range, Optional Oddel As String = ",") As String
Dim Bunka As Range
For Each Bunka In Rozsah
If Bunka <> "" Then fSpoj = fSpoj & IIf(Bunka.Address = Rozsah.Cells(1).Address, "", Oddel) & Bunka
Next Bunka
End Function
citovat

Strana:  1 2   další »

Uživatelské menu

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

Menu

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