Třeba takto:
Sub VytvorList()
Dim JmenoListu As String
Application.ScreenUpdating = False
Sheets.Add After:=Worksheets(Sheets.Count):
Range("B2").Value = "Aktualizováno:"
Range("B3").Value = WorksheetFunction.Text(Sheets("Zadávací_list").Range("F7").Value, "d.m.yyyy h.mm.ss")
JmenoListu = Range("B3").Value
On Error Resume Next
ActiveSheet.Name = JmenoListu
If Err.Number = 1004 Then
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
MsgBox "Nelze provést! => List s požadovanými daty již existuje!" & vbNewLine & "Proveďte novou aktualizaci dat tlačítkem Načti data na záložce Zadávací_list.", vbCritical, "!!! VAROVÁNÍ !!!"
Sheets("Zadávací_list").Select
Exit Sub
End If
On Error GoTo 0
Range("A11").Select
ActiveWindow.FreezePanes = True
Application.ScreenUpdating = True
End Sub
Jelikož se mi už chce spát, moc sem na tom nepřemýšlel. Určitě to půjde udělat i jinak.
Edit: Koukám, že elninoslov taky nemohl zabrat. Není nad to udělat refresh stránky Dobrou.
Něco sem narychlo spíchnul. Pokud sem tedy správně pochopil zadání viz soubor
Použiješ funkci NEPŘÍMÝ.ODKAZ
=MAX(NEPŘÍMÝ.ODKAZ("B"&A1):NEPŘÍMÝ.ODKAZ("B"&A2))
@David123
Jelikož se jedná o složitější program, nechtěl jsem ho hned celý nahodit
A to je právě ono, na co jsem Tě chtěl upozornit. To že budeš celý problém dávkovat po kapkách je kontraproduktivní.
Myslel jsem, že jestli program tahá data z externího souboru nebo z toho kde je makro, je jedno.
Ano programu je to jedno, ale někdo ten kód přece musí napsat je dost rozdíl tahat data z listu onoho souboru kde je makro umístěno a nebo tahat data z externích souborů - je zde několik problémů, které je třeba ošetřit (jméno souboru, jméno listu, co se stane pokud se soubor nenalezne tam kde by měl být atd).
To že jsem přidal porovnání třetího sloupce, není přece změna, na změnění celého kódu, ale na připsání další podmínky...
Opět záleží jak je dosavadní kód sepsán. Může a nemusí, ono přece nejde o to jen kupit pod sebe nějaké podmínky, ale je potřeba ošetřit případné chybové stavy, ale to už Ti tu elninoslov psal.
S tou ironií sem to mysle tak, že poděkuješ za čas věnovaný Tvému problému s tím, že není potřeba kód přepisovat pro úsporu času (běhu makra 20s vs 40s), ale jak už sem psal na začátku, zadání dávkuješ po kapkách.
Jelikož se jedná o veřejné fórum a lidi zde radí zcela dobrovolně a ve svém volném čase, myslím, že poděkování na místě je...
Ano s tím naprosto souhlasím.
Vše vychází z toho, že nemáš s makry (programováním) zatím zkušenosti. Jen sem Tě chtěl upozornit na to, že polovičaté zadání je na dvě věci nic víc. Pak už jen záleží na rádci, jek se k tomu postaví (čti než v něm bouchnou saze a vyse*e se na to).
Přeji Ti, ať má elninoslov pevné nervy
a podaří se dosáhnout kýženého výsledku.
@David123
Měl bych pro tebe jednu informaci. Pokud chceš aby Ti někdo udělal řešení tzv. na klíč nebo chceš od někoho radu, tak základem všeho je přiložit vzorový soubor a popsat problém - zadání.
Ten popis má být kompletní !!! Nikoliv na etapy co tu předvádíš.
Elninoslov tu vytvoří nějaký kód a pak přijdeš s dost zásadní změnou - s tím, že data se vlastně mají tahat z externích souborů. Přepíše kód a ty znovu přijdeš s další změnou. Elninoslov je evidentně dobrák, že se tomu dále věnuje i když se mu snažíš házet klacky pod nohy. Ono se může stát, že trpělivost jednou přeteče a někdo se Ti na to .....
Ona pak Tvá věta:
"vážně si vážím Tvého času a snahu mi pomoci."
vyznívá tak nějak ironicky.
Ono tohle zadávání úkolů po částech je horší než lepší.
Vím, že s makry jsi na úplném začátku, ale je to stejné jako kdyby za Tebou v zaměstnání někdo přišel, zadal Ti práci a pak v průběhu měnil ono zadání a Ty jsi to stále předělával od začátku.
Nemáš použít funkci SUMIF ale SUMIFS
Jedno kritérium datum, druhé produkt.
Ne, funkce resize mění velikost vybrané oblasti. Proto sem ve videu vložil do kódu ty selecty, aby bylo vidět co se děje na listu.
Day1 = .Cells(2, 1).Resize(R1).Value2
Pole Day1 načte hodnoty z oblasti A2:A7.
Cells(2,1) vybere buňku A2 a funkce rezize roztáhne oblast o 6 (hodnota proměnné R1) řádků včetně. Tedy z oblasti A2 je pomocí resize oblast A2:A7
Co se týče vypsání obsahu pole do listu např:
Cells(1, 2).Resize(UBound(Day1)).Value = Day1
Opět Cells (1,2) vybere buňku B1 resize rozšíří oblast(funkce UBound(Day1) určí horní mez pole - kolik jmen je v poli, tedy 6) na B1:B6 a vloží se hodnoty z pole Day1.
Ještě přiložím upravený soubor ať se v tom můžeš štourat
Ahoj Pole není nutné plnit postupně cyklem, ale je možné naplnit ho "hromadně". Udělal sem video, kde sem doplnil kód o funkci select jen z toho důvodu, aby bylo vidět co se děje na listu. Koukni co se děje na listu a v okně Locals v editoru VBA.
Ještě odkaz na video
http://leteckaposta.cz/902336012
=COUNTIFS($C$6:$AF$6;"<="&$D$4;C7:AF7;"X")
Edit: Nebo ještě maticově
=SUMA((($C$6:$AF$6)<=$D$4)*(C7:AF7="X"))
Záložka DATA a tlačítko TEXT DO SLOUPCŮ (oddělovač čárka).
Když je elninoslov mimo zkusím to.
Sub SkutecnyDluh()
Dim POLE_X
Dim POLE_V
Dim POLE_P
Dim i As Long
POLE_X = Range("X3:X2000").Value
POLE_V = Range("V3:V2000").Value
POLE_P = Range("P3:P2000").Value
For i = LBound(POLE_X) To UBound(POLE_X)
If POLE_X(i, 1) = "*" Then
POLE_V(i, 1) = POLE_P(i, 1)
End If
Next
Cells(3, 22).Resize(UBound(POLE_V)).Value = POLE_V
End Sub
Např:takto
Ps: bacha na Criteria1 vs Criterial (1 vs L)
Pracoval sem z listem "CETR IN". Popravdě se mi moc nechtělo studovat vzorce ve sloupcích D, J a P tak sem jen upravil tak, aby pokud není vyplněn "Realný příjezd" nevracel hodnotu -42.... . Jelikož jsou sloupce D, J, P textové není možné počítat průměr, proto jsou použity vedlejší sloupce, kde je text převeden na číslo. Podle tohoto sloupce se počítá průměr a slouží i pro podmíněné formátování.
Opět matice
=SUMA(KDYŽ(HODNOTA(A6:A16)<=$E$4*(C6:C16=$F$4);B6:B16))
Maticově
=SUMA(KDYŽ(HODNOTA(A6:A16)<=3;B6:B16))
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
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.