< návrat zpět

MS Excel


Téma: Delka mezer rss

Zaslal/a 14.11.2012 15:48

Ahoj, řeším jeden problém, přes který se nemůžu dostat.
Mám dlouhý seznam podmínek, kdy při splnění se mi zobrazí 0 a při nesplnění podmínky naopak 1 (samozřejmě, to co se mi zobrazuje se dá změnit, pokud to pomůže).
Takže ten list vypadá asi nějak takhle:
110111100101111011111

No a já potřebuji spočítat jaká je nejdelší série nesplněných podmínek (tj. jedniček) za sebou.
Popřípadě počet, kolikrát se vyskytuje 1x jednička, 2x jednička za sebou, 3x jednička za sebou, atd.

Dá se tohle nějakým vzorcem vypočítat? Děkuji!

Zaslat odpověď >

Strana:  1 2   další »
icon #010322
avatar
Najjednoduchšie sa mi javí napísať si pre túto úlohu užívateľskú funkciu. Jej argumentom by bol uvedený reťazec, funkcia by si zistila počet znakov a pre každý znak vyhodnotila, či je rovný jednej. Počet jedničiek by si postupne kumulovala, v nejakej pomocnej premennej držala predošlé maximum, t.j. počet jedničiek idúcich za sebou. Pokiaľ si na to netrúfneš, tak daj vedieť, skúsil by som to potom spíchnuť :)citovat
#010323
avatar
Public Function zisti(bunka As Range) As Long
a = Split(bunka, "0")
Max = 0
For i = LBound(a) To UBound(a)
If a(i) > Max Then Max = a(i)
Next i
zisti = Int(Log(Max) / Log(10) + 1)
End Function
citovat
icon #010324
avatar
Keďže som to medzitým napísal, tak prikladám svoju verziu (tá Marianova je nádherná a určite ju preštudujem :))

Function NajdlhsiaSeria(bunka As Range) As Integer
Dim i, N As Integer
N = 0
NajdlhsiaSeria = 0
For i = 1 To Len(bunka)
If Mid(bunka, i, 1) = 1 Then
NajdlhsiaSeria = NajdlhsiaSeria + 1
Else:
N = WorksheetFunction.max(NajdlhsiaSeria, N)
NajdlhsiaSeria = 0
End If
Next i
If NajdlhsiaSeria < N Then NajdlhsiaSeria = N
End Function
citovat
#010325
avatar
Tu je to bez makra a dolu v žltom s tou funkciou.
Příloha: zip10325_znaky.zip (27kB, staženo 26x)
citovat
icon #010327
avatar
Marian, nejaký borec by to dal ešte i nejakým maticovým vzorcom, mám tušenie, že to by šlo tiež nejak, ale hlava už neslúži.
Rozhodne som rád, že som vďaka Tebe objavil funkciu split.
Našiel by si si moment a objasnil to kúzlo s delením logaritmov? Zo školy som už nejaký ten rok preč a toto bez nakopnutia asi nepoberiem :)citovat
#010328
avatar
@AL
To som našiel v nápovede.
VBA nepozná dekadický logaritmus iba prirodzený. A ja som potreboval dekadický. Samozrejme dalo sa to aj inak vypočítať. Na liste mi dekadický išiel, tak som chcel aj v makre.

teda
Log(x)=ln(x)/ln(10)

ln je logaritmus pri základe e=2,71.......
Log(1)=0
log(10)=1
log(100)=2
log(1000)=3
Takže ak sa pripočíta 1 tak máš výsledokcitovat
icon #010329
avatar
jj, už som to medzitým našiel, fakt ma občas neskutočne štve, koľko vecí človek pozabúda, o logaritmoch som naposledy počul tak pred 10 rokmi, to určite nepreháňam. Takže, cez dekadický logaritmus chceš spočítať rád toho najdlhšieho reťazca v desiatkovej sústave a používaš doleuvedený prevod
Log(x)=ln(x)/ln(10)
čo je samozrejme povolená matematická operácia, akurát človek zabúda a nespomenie si, že čosi také existuje. Díky moc, bolo to poučné :)citovat
icon #010330
avatar
marjan, ešte ma napadlo, že nemusíš logaritmovať (i keď, teda, fakt klobúk dolu), ale stačí zisťovať dĺžku jednotlivých reťacov ktoré získaš tým splitom, čiže šlo by to takto: Public Function ZistiMod(bunka As Range) As Long
Dim a, i As Integer
a = Split(bunka, "0")
ZistiMod = 0
For i = LBound(a) To UBound(a)
If Len(a(i)) > ZistiMod Then ZistiMod = Len(a(i))
Next i
End Function
citovat
#010331
avatar
Veď som písal, že sa to dalo aj inak. 1
Ja som to chcel najprv bez makra. Samozrejme, že funkcia LEN je efektívnejšia ako logaritmus.
Maticový vzorec na jednu hodnotu si teraz akosi neviem vybaviť. 7
Ale neviem, na čo to bude zadávateľovi slúžiť. 4citovat
#010332
avatar
Asi sme niečo prehliadli. Mňa picne. 2
Napísal
Takže ten list vypadá asi nějak takhle:
110111100101111011111

Nenapísal
Takže ta buňka vypadá asi nějak takhle:
110111100101111011111

Takže asi to treba najprv napchať do jednej bunky. 4citovat

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