< návrat zpět

MS Excel


Téma: VBA - Sumif rss

Zaslal/a 20.12.2016 16:06

Zdravím, nevím si rady.
Do práce potřebuju udělat jednoduchou evidenci zmetkovitosti. Zkráceně, mám určitý seznam zaměstnanců a firem. Na úvodním listu kliknu na seznam, vyberu jméno zaměstnance, poté na druhý seznam v další buňce na seznam firem. Vyplním počet zmetků.
Kliknu na tlačítko s jednoduchým makrem "uložit" tím se mi přidá nový list s vyplněným obsahem předešlého úvodního listu.
Dále mám list "přehled". Zde bych rád jednoduše vybral zaměstnance ze seznamu a viděl v buňce sečtený počet zmetků co kdy udělal.
Zde vzniká problém se vzorcem.
=součin.skalární(nepřímý.odkaz(sumif.......
vzorec funguje, v seznamu vyberu zaměstnance jako podmínku, podtrženo sečteno, vidím celkový počet zmetků. ALE, jakmile uložím nový list, ten už ve vzorci zahrnutý není a musím přidávat ručně - to nechci.
Pokračoval jsem dále přes VBA. Nastavil jsem at se mi každý nový list ukládá s názvem pouze holého čísla (1;2;3;4;5...) poté napsal vzorec pro sumif, do závorek vložil proměnnou pro všechny listy.

Kliknu na tlačítko, vypíše se mi vzorec, ale bez "="
když tam "=" dopíšu potom ručně, vzorec funguje. Ale jakmile "=" dopíšu do vzorce ve VBA, vzorec se stane neaktivní.
Je tu někdo ochotný mi poradit? Vím, že to není žádná námaha, tam rovná se dopisovat růčo, ale přece jen bych rád, aby to nějak vypadalo. Navíc bych se aspoň posunul dál a věděl bych pro příště, děkuji :-)

Zaslat odpověď >

Strana:  1 2 3   další »
#033953
avatar
tím se mi přidá nový list s vyplněným obsahem předešlého úvodního listu
To je zmetek. Můžeš zaevidovat.
vypíše se mi vzorec, ale bez "="
Tak ho tam napiš. Range.Formula = "=FORMULA(...)"
Zde vzniká problém se vzorcem.
=součin.skalární(nepřímý.odkaz(sumif.......

Takto to ve VBA zapsat nemůžeš. Anglické(origo) názvy funkcí.citovat
#033954
avatar
Děkuju za odpověď.
Že VBA existuje vím tři dny, takže trochu tápu..
Každopádně jsem to přepsal a nic, takže možná bude lepší sem vložit ukázku:

Dim i As Long
Dim t As String

A = "SUMPRODUCT"
B = "Sumif"
C = "indirect"
d = "(""""&{" & t & "}&"
R = "="

For i = 2 To Worksheets.Count
If i = 2 Then
t = Worksheets(i).Name
Else
t = t & ";" & Worksheets(i).Name & ""


End If
Next i

indirect.Formula
sumif.Formula
SumProduct.Formula

range("c2") = "=formula(sumproduct(Sumif(indirect(""""&{" & t & "}&""!A2"");b12;indirect(""""&{" & t & "}&""!A1""))))"

Dále se do buňky C2 vypíše tento text:
sumproduct(Sumif(indirect(""&{1;2;3;4;5;6;7}&"!A2");b12;indirect(""&{1;2;3;4;5;6;7}&"!A1")))

opět bez "="
chápu, že to pro Vás je hračka, pro mě zatím bohužel ne... Díky :-)citovat
#033955
avatar
samozřejmě ty proměnné A,B,C,d,R mají být smazané, to jsem jen zkoušel :Dcitovat
#033956
Jeza.m
Určitě by bylo lepší vidět přímo ten soubor, protože z popis mám pocit, že se tam dělá něco zbytečně složitě a že by to šlo řešit jedinou tabulkou, než kupou listů. Ale jak říkám, chtělo by to vidět.

Každopádně když se chce zapsat do buňky vzorec, tak, to nejde dělat formou range("c2") = "=formula ale měl by to být range("c2").formula =
případně R1C1 formula (jak co vyhovuje), excel snese i range("c2")= "=sumif(A:A," & Chr(34) & "A" & Chr(34) & ",B:B)" (jen příklad)

M@citovat
#033957
avatar
Já myslím, že to chápete správně. Samozřejmě by to šlo "nacpat" do jednoho listu

A B
1 Jméno počet
2 Marcel 5
3 Jeza 1
4 Marcel 3

6 jméno Marcel

=sumif((A2:A4);B6;(B2:B4))

Na pohodu. Ale. Po mě se chce, abych měl list formou formuláře, kde vyplním potřebné údaje a uložím jako nový list (Kvůli tisku formuláře z důvodu potřeby podpisu zaměstnance, který škodu způsobil), proto hromada těch listů. Bohužel, přes listy sčítat pouze s holou sumou, bez podmínky. Sumif funguje pouze přes skalární součin, ale tam pro mě nastává právě ten problém, že do vzorce nelze zahrnout neznámou (1.list - poslední přidaný list)..citovat
icon #033958
avatar
ad: ale tam pro mě nastává právě ten problém, že do vzorce nelze zahrnout neznámou (1.list - poslední přidaný list)
To sa rieši tak, že na začiatok a koniec spreadsheetu sa pridajú prázdne listy (tie je možné skryť) - pomenujem ich napr. A a B. Nové listy sa pridávajú medzi listy A a B. Vo vzorci sa potom môžem odkazovať na všetky listy od A do B. Medzi A a B mám umiestnené iba listy, ktorých hodnoty potrebujem sčítať. Keďže v listoch A a B nie sú žiadne data, vzorec zosúčtuje fakticky iba to, čo sa nachádza medzi uvedenými dvomi listami.citovat
#033960
avatar
Ale, to by bylo celkem elegantní řešení..
bohužel pokud do vzorce zapíšu neexistující list, tak mi to vyhodí #ODKAZ!

=SOUČIN.SKALÁRNÍ(SUMIF(NEPŘÍMÝ.ODKAZ(""&ŘÁDEK(NEPŘÍMÝ.ODKAZ("2:B"))&"!A2");B12;
NEPŘÍMÝ.ODKAZ(""&ŘÁDEK(NEPŘÍMÝ.ODKAZ("2:B"))&"!A1")))

"2" je první list, "B" poslední.
je jedno jestli se jmenuje B nebo 1000, každopádně to nepobere, nevím proč..citovat
icon #033962
avatar
Postup, ktorý som uviedol, určite funkčný je. Pokiaľ nefunguje, bude nejaký problém vo vzorci, ktorý tvoríš. Chcelo by to ale vidieť prílohu. Zaregistruj sa, potom sem môžeš vložiť prílohu (zazipovanú).
Podľa mňa máš špatne napísanú tú časť INDIRECT (nepriamy odkaz), ale nechce sa mi bádať, v čom je problém. Vytvor ten vzorec natvrdo (nie makrom) a daj ho do prílohy, potom sa na to niekto pozrie/pomôže.citovat
#033979
avatar
Posílám příklad.
Příloha: rar33979_priklad.rar (30kB, staženo 35x)
citovat
icon #033983
avatar
Cez ten skalárny súčin by to asi šlo, ale musel by si si vytvoriť a udržiavať pomocný zoznam listov, tá moja metóda listy A až B bohužiaľ nefunguje pre sumif nad 3D oblasťou.
Skús prípadne pozrieť sem, je tam uvedené funkčné riešenie, ako hovorím, budeš si musieť udržiavať zoznam listov:
https://exceljet.net/formula/3d-sumif-for-multiple-worksheets
Mynda to má pekne popísané tu:http://www.myonlinetraininghub.com/excel-3d-sumif-across-multiple-worksheetscitovat

Strana:  1 2 3   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