< návrat zpět

MS Excel


Téma: podmínka vždy splněna rss

Zaslal/a 3.7.2021 20:24

Dobrý den, jak ve VBA nastavím do podmínky If then to, že podmínka je splněna vždy? V klasickém excelu se zadává "<>", což však ve vba nejde.

Kus kódu:

V prvním případě chci, aby to sečetlo údaje ze 7.sloupce bez ohledu na to, co je v 6. sloupci, v druhém pouze v případě, že je v 6. sloupci číslo jedna.

If ThisWorkbook.Sheets("výsledek").ComboBox1.Value = "všechny druhy důchodově pojištěných vztahů" Then
Volba1 = "všechno" '(je to 39 různých hodnot, text i číslo)
Else
Volba1 = 1
End If

Do While Len(Listzdroj1.Cells(Radek1,3).Value)>0

If ListZdroj1.Cells(Radek1, 6).Value = Volba1 Then
VyslHodnoty1 = VyslHodnoty1 + ListZdroj1.Cells(Radek1, 7).Value
End If

Radek1=Radek1+1

Loop

Prosím, nesnažte se nějak přepsat kód, je to jen jeho zjednodušená verze, ve skutečnosti se ještě všechno dále dělí podle dalších kritérií, tj. kód je daleko delší. Opravdu mi jde jen o to, jak to zapsat do té podmínky, pokud je to možné.
moc děkuji za radu M. Hodek

Zaslat odpověď >

#050926
Stalker
Porovnávací operátor <> (Nerovná se) ve VBA samozřejmě funguje.
Problém bude v deklaraci nebo převodu datových typů - (je to 39 různých hodnot, text i číslo)
Je to číslo opravdu číslo? Nebo je to text?citovat
#050927
avatar

Stalker napsal/a:

Porovnávací operátor <> (Nerovná se) ve VBA samozřejmě funguje.
Problém bude v deklaraci nebo převodu datových typů - (je to 39 různých hodnot, text i číslo)
Je to číslo opravdu číslo? Nebo je to text?


Díky za reakci, trochu nerozumím otázce. Mělo by to snad být jedno. Podmínka by měla být splněna vždy. Ale Volba1 je definována jako Variant a s číslem jedna funguje.
Přesně tedy: jak to zapsat? Když jsem zapsal Volba1= "<>", tak nebylo splněno nikdy. A přitom přesně tak bych to zapsal v excelové funkci =sumifs(A:A; B:B;"<>") a sečetlo by to celý sloupec A, bez ohledu na hodnotu sloupce B.citovat
#050928
Stalker
Aha, takže Tvůj problém je, že neumíš vyhodnotit podmínku. Do proměnné Volba1 si můžeš narvat co je libo, nebo ji klidně nechat prázdnou (Volba1 = ""). Tvůj zápis Volba1 ="<>" (proměnná tedy obsahuje textový řetězec <>.

If ListZdroj1.Cells(Radek1, 6).Value = Volba1 Then
Tedy:
If ListZdroj1.Cells(Radek1, 6).Value = <> Then
Což je samozřejmě blbost.
Tedy pokud buňka v šestém sloupci neobsahuje hodnotu <>

Vyhodnocovací operátor je přeci v tomto případě =, nikoliv <>.

PS:
Pokud hodláš vyhodnocovat 39 různých hodnot v proměnné, místo IF THEN ELSE, používej SELECT CASE.citovat
#050929
avatar
Není to blbost, protože přesně tak to funguje v běžném excelu. Např. ">5" v countifs znamená, že se zjistí počet čísel větší, než 5 a právě toto "<>" znamená, že se sečtou všechna. Tj. tento znak v tomto případě nefunguje jako nerovnítko, ale jako "vždy splněno". tj. není u něj už nic dalšího uvedeno (třeba např. "<>0" by spočítalo všechno kromě nuly, zatímco pouhé "<>" vše včetně nuly. A mě jde o to, jakou hodnotu nastavit do Volba1, aby to fungovalo stejně. Nebudu vyhodnocovat všech 39 kritérií. Uživatel si vybere buď pouze pracovní poměry (1) anebo vše. Ostatní nepotřebuji.
Díky za pomoccitovat
#050930
avatar
funkce listu např. countifs
mívají jinou syntaxi než ve VBA
lze použít Application.WorksheetFunction.CountIfs(...)citovat
#050936
avatar
Takže, díky za pomoc, nakonec jsem to obešel úpravou if

If Volba1=1 and ListZdroj1.Cells(Radek1, 6).Value = Volba1 Then
VyslHodnoty1 = VyslHodnoty1 + ListZdroj1.Cells(Radek1, 7).Value
Else If If Volba=0 Then
VyslHodnoty1 = VyslHodnoty1 + ListZdroj1.Cells(Radek1, 7).Value
End If
Tj. pokud je volba1=1 vyhodnotí ještě sloupec 6, pokud je volba 0, tak řádek 6 nevyhodnocuje a sečte vždy. Není to to, co jsem chtěl, ale funguje to.
Pěkný dencitovat

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