Pozrite sa sem na to ako je riešený variant "variant v zošite, zmenou bunky B1"
Je to pripravené aj na nejaké tie "psie kusy", ako napr. nesprávna hodnota, mazanie, nesúvislá oblasť... vyskúšajte. Nieje to merná minca, ale len návrh.
Ale POZOR, platí pri tom to, čo pri makrách väčšinou : Je to naprogramované presne na túto situáciu ! Teda nemôžete len tak bez úpravy makra meniť poradie stĺpcov, riadkov, atď. Ako sa tu často deje, že človek pripraví na mieru makro, ktoré si užívateľ potom prenesie do úplne inak koncipovaného súboru, a potom nefachá.
Ak budú dáta začínať tak ako ich máte od 14. riadku, a ak budú v rovnakých stĺpcoch ako to máte, a ak v nich budú o 14. riadku po koniec len čísla k násobeniu alebo prázdne, tak napr. :
Sub EUR_CZ()
Dim Kurz As Single, t As String, R As Long, D(), i As Long
t = InputBox("Zadajte kurz EUR->CZ :", "Kurz", 0#)
If t = vbNullString Then MsgBox ("Nebol zadaný kurz."): Exit Sub
If IsNumeric(t) Then Kurz = Val(t) Else MsgBox ("Nesprávna hodnota kurzu."): Exit Sub
With ActiveSheet
R = .Cells(Rows.Count, 1).End(xlUp).Row - 13
If R < 1 Then MsgBox ("Chýbajú data od riadku 14."): Exit Sub
D = .Cells(14, 8).Resize(R, 8).Value
On Error Resume Next
For i = 1 To R
If D(i, 1) <> "" Then D(i, 1) = D(i, 1) * Kurz
If D(i, 4) <> "" Then D(i, 4) = D(i, 4) * Kurz
If D(i, 7) <> "" Then D(i, 7) = D(i, 7) * Kurz
Next i
.Cells(14, 8).Resize(R, 8).Value = D
If Err <> 0 Then MsgBox ("Ukončené s chybou.")
End With
End Sub
Nevadia mu ani tie Vaše divotvorné zlúčenia. Ale predpokladám, že budete mať každý mesiac nový súbor. To bude nepraktické prenášať makro, alebo prekopírovávať dáta do súboru s makrom. Dá sa urobiť doplnok do Excelu, ktorý pridá nástrojovú lištu s tlačítkom. To bude dostupné v každom exceláckom súbore, ale aj v tých, ktorých sa to netýka...
Ak by tých riadkov a listov bolo veľa, tak by som to urobil cez pole a skrýval ich naraz. Napr. takto nejako. Je to Dynamicky nastaviteľné pomocou konštánt a poľa podmienok.
Sub Skryt_Riadky_Podmienene()
Dim Podmienka(), Riadok As Long, TMP As Integer, RNG As Range, aData(), WS As Worksheet
Const PRVY = 50
Const POSLEDNY = 400
Const STLP = 1
Podmienka = Array("254.420", "254.423", "254.424")
Application.ScreenUpdating = False
On Error Resume Next
For Each WS In Worksheets
With WS
aData = .Cells(PRVY, STLP).Resize(POSLEDNY - PRVY + 1).Value
For Riadok = 1 To POSLEDNY - PRVY + 1
TMP = WorksheetFunction.Match(CStr(aData(Riadok, 1)), Podmienka, 0)
If Err = 0 Then
If RNG Is Nothing Then Set RNG = .Cells(Riadok + PRVY - 1, STLP) Else Set RNG = Union(RNG, .Cells(Riadok + PRVY - 1, STLP))
Else
Err.Clear
End If
Next Riadok
If Not RNG Is Nothing Then RNG.EntireRow.Hidden = True: Set RNG = Nothing
End With
Next WS
Set WS = Nothing
Application.ScreenUpdating = True
End Sub
Neviem či to chápem správne...
Len doplním, že ak chcete do bodky zachovať funkcionalitu Vášho vzorca, tak ten VLOOKUP / SVYHLEDAT obalte do IFERROR(VLOOKuP(...vaše hľadanie ...);E4)
NejK tak. Píšem z mobilu na posteli...
Pekne. Nejde mi síce zatiaľ do hlavy ten abs. $B$2 ale pekne. Nevedel som si ešte inak ako pom. stĺpcami predstaviť vytvorenie zoznamu jedinečných hodnôt z A a C spolu. Na to niečo jednoduchšie nieje ?
1. Myslel som okno Watches, podľa tohto obrázku, ale to je jedno viď nižšie.
2. Problém robí parameter xlExcel8, ktorý E2003 nepozná. Je nutné použiť parameter xlNormal v ukladacích príkazoch. Vyskúšal som tento parameter aj v E2016 a funguje, teda nemuseli by sme doprogramovávať kontrolu verzie, ale budiš, je to tam.
3. Podmienka je podľa mňa presne podľa požiadavky, teda upozorní v posledný deň mesiaca po 15:30:00. Ak by sme chceli urobiť, že to prebehne hocikedy po poslednom dni (teda napr. v polke ďalšieho mes.), musíme zabezpečiť niekde v súbore (v bunke) uložený príznak, ktorým makro pri prípadnom ďalšom otvorení súboru spozná, či už bolo vykonané (premazané, prečistené, uložené). Inak by to mohlo spôsobiť nemilé prekvapenie. Ale dá sa to.
4. Malá úprava vzorca v C1 prvého listu, kvôli chybnej interpretácii "yyyy" CZ Excelu (ten požaduje "rrrr").
5. Pridaná kontrola odmietnutia prepísania súboru, lebo to vyvolalo chybu.
6. Musel som si kvôli Vám nahodiť virtuálku s XP a Off2003
1. Keď dáte Debug v hláške a máte ten riadok označený, kliknite pravým na "Subor" a zvolte "Add Watch" a zo spodného okna si dvojitým klikom skopírujte hodnotu Value, a vložte sem.
2. Aká je to verzia Excelu ?
3. Skúste mi nahrať u Vás makro na "Uložiť ako". Teda na karte Vývojár kliknete na "Zaznamenať makro", súbor dáte Uložiť ako, vymyslíte názov a uložíte ho na miesto kde sa nachádza tento súbor. Na karte Vývojár dáte "Zastaviť záznam", a kód toho makra sem skopírujte.
4. Keď budete na kóde toho nahraného makra, zmente v ňom názov súboru za ďalší pokusný, a stláčaním F8 makrom po kroku spúšťajte. Či dobehne bez chyby do konca.
Aby ste si nemýlila "Workbook_Open_Test" s "Workbook_Open", premenujte si "Workbook_Open_Test" na "Skuska_Funkcnosti".
Samozrejme, že Vám to nefunguje, keď "Skuska_Funkcnosti" spustíte s dátumom 18.2.2017. Nič sa neudeje, lebo 18. nieje posledný deň v mesiaci. Posledným februárovým dňom v tomto roku je 28. ! Nie 18. A ešte pozor na ten čas. Obe podmienky musia byť splnené.
Akurát, že makro nemôžete len tak kopírovať do akého chcete súboru. Vedel som, že si to nevšimnete :) Pre potreby ukladania súboru (potreba zistenia mesiaca daného súboru), je nutné niekde v liste uchovávať dátum (stačil by aj mesiac). Preto som zmenil rozloženie v prvom riadku, a teraz nieje zlúčená bunka B1:J1, ale iba C1:J1 a do B1 sa ukladá dátum daného mesiaca. Toto je vkladané do prvého listu, ostatné si to kopírujú. Isteže Vám to potom nefungovalo.
Metóda "Workbook_Open_Test()" je tam iba aby ste si to mohli vyskúšať v iný ako posledný deň a po zadanom čase. Pretože klasická metóda zošitu "Workbook_Open" Vám testuje aktuálny dátum a čas. Teda doobeda Vám to neurobí nič, a ani v dátum menší ako posledný deň v mesiaci to neurobí nič. Mohli by ste to dnes otvárať koľko chcete.
Dal som tam aj krátke popisy. Neviem, či by nebolo vhodné robiť pred výmazom riadkov zálohu do nejakého backup súboru v samostatnom adresári, pre istotu, lebo vymazanie a uloženie má za následok nevratnú editáciu dát. Na to nezabúdajme. To sa mi už ale nechce...
Plus mínus autobus ...
Možné riešenie v G:H s jedinečnými hodnotami z 2 stĺpcov a následným súčtom priradených hodnôt, pomocou vzorcov s 2 pomocnými stĺpcami I:J.
príklad zmazania na všetkých listoch pri otvorení súboru.
príklad.
PS: Inak needitovali ste svoj príspevok ? Mne sa zdá (a tak som urobil verziu 1), že ste chceli dátumy od najbližšieho pondelku...
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.