Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  34 35 36 37 38 39 40 41 42   další » ... 289

To Vážne? Toto je tá "príloha"? Popisujete X buniek, ktoré treba kontrolovať a v prílohe je 1. Z toho nie je absolútne zrejmé, ako to má fungovať, keďže ste písal, že hodnota určujúca ktoré makro sa má volať, môže byť vo viacerých bunkách rovnaká. Takže podľa tejto Vašej prílohy čo bude v M13, ak A1=1 a B1=2? V M13 bude "ano" (ako výsledok makra volaného na základe A1) alebo "ne" (ako výsledok makra volaného na základe B1)? A tie makrá, ktoré ste dal na ukážku sú jednoznačne taký druh, ako som popisoval = určite ako jedno makro (či už s parametrom, alebo nie), a nie X makier obdobne podobných.
Očakával som ako prílohu tie makrá. Reálne makrá. Reálne rozloženie buniek v liste/súbore. Jedine čo má byť nereálne (anonymizované) sú dáta samotné. Teda nenapíšete "Ján Novák" ale "První Jméno", nenapíšete "plat 50000" ale "plat 12345". Všetko ostatné má ostať. Podľa Vás nie, ale podľa mňa na tom rozhodne záleží. Napr. či identifikovať číslo makra Indexom alebo Vlookupom. Nebudem popisovať všetky možné varianty riešenia problému ich výhody, podmienky, riziká, logiku apod. Napr. ak sa jedná o zápis nejakej hodnoty do inej bunky na základe zdrojovej bunky, pričom týchto buniek je X a rovnako je X výsledných, a zároveň má každá výsledná bunka Y svojich možných výsledkov, potom nie je potreba makro, stačí vzorec. Vy dodajte čo máte, a my skúsime nájsť riešenie.

Moje nervy ...
Prečo je vždy problém priložiť reálnu prílohu a namiesto toho zahmlievať a neodpovedať na upresňujúce otázky? Napr. ste neodpovedal, či sú tie makrá rovnakého typu (ako ste teraz uviedol v "prílohe").

no ale ono mi to nejde, mám office 2021

nejde to makro, alebo nejde nahrať prílohu?
nahrál jsem jednoduchý sešit

ak je to súbor xlsm (s makrom), treba ho zabaliť do ZIP/RAR. Fórum xlsm nežerie :(

Čo??? 100 makier??? Viď koniec môjho predošlého komentu - príloha aspoň s pár makrami. To máte fakt 100 diametrálne typovo odlišných makier, ktoré sa nedajú parametrizovať, aby ich nebolo toľko?

Veď som to urobil tak, aby ste si oblasť mohol zvoliť.
Toto:
Range("A1:A5")
nahraďte požadovanou oblasťou (inak v príklade máte 2x A2, to má byť asi A1,A2,A3):
Range("A1:A3,B1:B5,C1:C2")
alebo
Range("A1,A2,A3,B1,B2,B3,B4,B5,C1,C2")
A podľa mňa nie je jedno čo robia tie makrá. Teda nemusí to tak byť. Teraz keď zmením A2 na 2, vykoná sa Makro2 (nakopíruje nejaké data), C1 zmením na 2, a znova Makro2 vykoná to tisté (nakopíruje tie isté data). Nie je to divné ??? Preto hovorím o parametrizácii makra.

Kurňa chlapi, to je dnes dohadovanie v oboch témach o prílohu. Ach jaj...

To nebude žiadny problém pre viac sledovaných buniek. Len mi prezraďte čo tie makrá robia. Ak robia podobnú vec, tak stačí jedno, ale posielať sa bude do neho parameter. Myslím to takto nejako:
Makro1 má skryť stĺpce A:C, ostatné odokryť
Makro2 má skryť stĺpce D:F, ostatné odokryť
Makro3 má skryť stĺpce G:I, ostatné odokryť
nebudem robiť 3 rovnaké makrá, ale iba jedno, ktoré bude mať vstupný parameter (názvy stĺpcov), teda ho zavolám napr.
Moje_parametrizovane_makro 2
a v makre bude nadefinované, že typ 2 znamená "D:F" napr. cez pole Array().
Alebo ho zavolám
Moje_parametrizovane_makro "D:F"
a obdobne.
Proste by bolo dobré uviesť, čo presne tie makrá robia, ak sú obdobné. Ak sú typovo diametrálne odlišné, tak nič, a urobím to klasicky.

EDIT: Tak všeobecne, napr. takto:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zmena As Range, Are As Range, Bunka As Range

Set Zmena = Intersect(Target, Range("A1:A5"))
If Not Zmena Is Nothing Then
For Each Are In Zmena.Areas
For Each Bunka In Are.Cells
Select Case Bunka.Value
Case 1: Makro1
Case 2: Makro2
Case 3: Makro3
Case 4: Makro4
Case 5: Makro5
End Select
Next Bunka
Next Are
End If
End Sub

Začať by ste mal predovšetkým odpovedaním na otázky a priložením prílohy.
Všeobecný návrh makra od brucha, nemám dáta, spustil som to iba raz...
Sub Kopiruj_bez_duplicit()
Dim Col As New Collection
Dim Z(), C()
Dim x As Integer, y As Long, r As Long, s As Integer

With wsZdroj
If IsEmpty(.UsedRange) Then MsgBox "Žiadne data na liste " & wsZdroj.Name, vbExclamation: Exit Sub
Z = .UsedRange.Value
End With

s = UBound(Z, 2)
ReDim C(1 To UBound(Z, 1), 1 To s)

On Error Resume Next
For y = 1 To UBound(Z, 1)
Col.Add True, CStr(Z(y, 1))
If Err.Number = 0 Then
r = r + 1
For x = 1 To s
C(r, x) = Z(y, x)
Next x
Else
Err.Clear
End If
Next y
On Error GoTo 0

With wsCiel
.UsedRange.Clear
.Cells(1, 1).Resize(r, s).Value = C
End With
End Sub

Generované dáta? To by šlo asi aj pomocou PowerQuery - bez makra. Záleží na tom, čo sa bude diať potom s List2. Každopádne to sa zle robí bez prílohy.
Takže sa asi jedná o tabuľku a nie Tabuľku.
Takže dáta asi nie sú filtrované (inak treba zisťovať koniec dát, pri filtrovaných sa použije Find, pri nefiltrovaných End(xlUp)).
Takže tam nie sú vzorce.

List2 je vždy prázdny - ten treba vždy v makre premazať. Veď ako by to fungovalo, pri opätovnom spustení makra (trebarz aj nechcene).
"tak aby nebyly duplikované, jako je to v listu1" - teda v List1 sú v stĺpci A duplicity. A ktorý z riadkov sa má kopírovať? Prvý? Posledný? Agregovať (aký typ, min, max, súčet, počet, priemer ???)? Spojiť hodnoty do jednej bunky (zreťaziť ako text)?

A opäť - PRÍKLADOVÁ PRÍLOHA ?

PS: Ak sú tie generované dáta, do List1 importované napr. z nejakého súboru xls, xlsx (vyexportovaného odniekiaľ), tak cez PowerQuery netreba vôbec dáta na List1. Len cestu k súboru.

Isteže pomôže. Keď to pochopí. Takže ide o toto?

-V List1 sú zdrojové dáta o neurčenej šírke (počet stĺpcov) a neurčenej výške (počet riadkov).
-Tieto dáta sa budú kopírovať pod posledný zaplnený riadok v List2 (teda nie prepisovať predchádzajúce dáta v List2, alebo áno???).
-Každý riadok z List1 skopírovať iba vtedy, ak sa jeho hodnota v stĺpci A už nenachádza niekde v stĺpci A v List2. Takže v List2 v stĺpci A sú jedinečné hodnoty.

-Rozloženie stĺpcov v List1 a List2 sedí/nesedí?
-Kopírovať aj farbu, orámovanie a pod, alebo iba hodnoty do predformátovaných stĺpcov (číslo, mena, dátum,...)?
-Jedná sa o tabuľky alebo Tabuľky?
-Hodnoty v niektorom z listov sú filtrované?
-Bunky v List1 obsahujú vzorce? Ak áno, tak vzorce majú byť aj v List2, alebo tam sa majú nakopírovať iba hodnoty? Ak vzorce, majú mať vzťah k adekvátnym odkazovaných zdrojom v List2 podľa List1, alebo pôvodné odkazy na bunky v List1?
...

A ešte príloha. Zmenšená, anonymizovaná, so zachovaním formátov, vzorcov, rozloženia, kde je niečo vyplnené, nech je vyplnené. Pár príkladových dát.

Tie kódy mi prídu ako nezmysel. Najmä posledný. Veď tam testujete či sa Target.Address="$A$1" a následne ak áno, tak či sa rovná "$A$2". Ako sa môže rovnať obom hodnotám??? Ďalej to vyzerá ako výsek z nejakého iného makra, keďže tam chýbajú ukončenia If - teda End If.

To Makro1, Makro2 vyzerá ako? Čo majú robiť? To isté, len s nejakým iným parametrom? Treba jedno parametrizované makro.

Či sa zmení hodnota na 1,2,3,4,5 sa má kontrolovať v jednej bunke? Vo viacerých? V ktorých A1:A5? Zmena v nich môže nastať naraz? Vykonať všetky makrá podľa všetkých zmien vo všetkých bunkách?

Čo myslíte tým (v 2. makre), že keď pridáte ďalšiu hodnotu nič sa nestane???
Case 1: Macro1
Case 2: Macro2
Toto nič nevykoná???

V 1. makre meníte Target - práve zmenenú bunku, ktorej spracovanie ešte neskončilo. Možno preto padá Excel. To nerobte.

Popíšte to podstatne lepšie.

Uveďte príklad (prílohu na GoogleDrive, DropBox, Uložto, ... alebo založte tému, tam pôjde vkladať príloha), neviem čo myslíte. Áno v tom vzorci v J49 je odkaz na O42, v ktorej nič nie je. Vy chcete do iného súboru vzorcom načítať ten čas, čo je súčasťou textu v J49?

If Then Else EndIf sú úplne zbytočné. Môžete to skrátiť
With ws
ListZamcen = .ProtectContents or .ProtectDrawingObjects or .ProtectScenarios
End With

Ale chválim, že niekto hľadá riešenie na svoj problém aj svojpomocne, a následne ho aj zverejní. To sa nestáva.

No a keby to bola takáto trieda, vadilo by malé preblikávanie?

=SUMPRODUCT((COUNTIF(OFFSET(A2:A15;;;ROW(A2:A15)-1);A2:A15)=1)*C2:C15)
=SOUČIN.SKALÁRNÍ((COUNTIF(POSUN(A2:A15;;;ŘÁDEK(A2:A15)-1);A2:A15)=1)*C2:C15)

Nezrozumiteľné. Nájsť cez VLOOKUP s parametrom TRUE správne rozmedzie nie je problém. Čo má spoločné tá spodná "akože tabuľka" s príkladovymi dátami? Iné roky, iné tony, iné rozdelenie (23t nespadá do rovnakej kategórie ako 25t a 26t). Uveďte normálny súbor Excelu, kde máte príkladové dáta, a presne aký má vzniknúť výsledok z tých konkrétnych dát. Teda nie raz také roky, potom iné, nesediace zaradenie ton objednávok do ton cenníkových kategórií, raz oddeľovač "," potom ";", záhadná pomlčka za 23t ... A chýba cena pod 20t.

@lubo: čas som nameral na rovnakej vzorke súborov 229 s (00:03:49). Vedel by ste ako identifikovať súbory, pri ktorých niekde nastane chyba prevodu na číslo?

@jaks.dalibor: Skutočne potrebujete načítať až toľko súborov? Nemôžete ich trochu eliminovať, napr. dátumom?

Ako pretransformovať funkciu na dotaz a naopak ...
No to je ťažké Vám vysvetliť, keď neviete, čo je funkcia. Funkcia sa používa na vrátenie nejakého výsledku (ale nemusí to tak byť vždy). Opakovane, na väčší počet zmien parametrov. A to je to. Do funkcie (väčšinou) vstupuje nejaký parameter, ktorý sa mení, funkcia vyráta čo má, a vráti adekvátny výsledok. V tomto prípade ako parameter funkcie je súbor, a funkcia vráti jeho hodnoty. Teda nemôžete spustiť funkciu bez parametru. To je presný opak dotazu (teraz vynecháme úvahy o inom druhu parametrov vstupujúcich aj do dotazu napr. v tomto príklade Cesta z pomocnej Tabuľky, nazvime ich radšej premenné), do ktorého nevstupujú parametre ako do funkcie. Teda Vy keď chcete urobiť nejakú funkciu na načítanie údajov zo súborov, urobíte si najskôr normálny dotaz, kde si do premennej dáte pevnú cestu k jednému súboru, nastavíte potrebné kroky, ktoré vidíte čo robia. Keď je to funkčné, zmeníte dotaz na funkciu, stačí napísať na začiatok dotazu
(NázovParametru as TypParametru) =>
a nahradiť ten predtým pevne stanovený skúšobný súbor tým parametrom. A máte z dotazu funkciu z ktorej dostanete výsledok ak ju zavoláte
NázovFunkcie(NázovParametru)
Ale funkciu už nemôžete krokovať - ona je krok v obslužnom dotaze. Takže, ak ju chcete upraviť a krokovať, tak si vytvorte prázdny dotaz, vložte tam kód funkcie, odstráňte
(NázovParametru as TypParametru) =>
a zmeňte ten variabilný NázovParametru na pevný súbor. Lenže tu sa treba zamyslieť nad tým typom parametru. V tomto prípade do funkcie vstupuje parameter typu Binary teda Content - obsah súboru, nie iba názov súboru. Takže ten parameter NázovParametru vymeníte za niečo čo urobí obsah (Content) toho súboru teda
File.Contents("E:\Download\test2\PRE_9-A _02_024_22A221011.TXT")

Je to proste ťažké vysvetliť, keď nepoznáte rozdiel medzi dotazom a funkciou či procedúrou a funkciou, a ako v nich pracujú parametre/premenné.


Strana:  1 ... « předchozí  34 35 36 37 38 39 40 41 42   další » ... 289

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse

Týden v roce

Petr92 • 16.7. 15:34

Řazení podle času v kategoriích

veny • 16.7. 11:34

špatný výpočet ze zisku - příčina?

Anonym • 12.7. 22:56

špatný výpočet ze zisku - příčina?

Jakoby • 12.7. 12:35

Řazení podle času v kategoriích

Marekh • 12.7. 9:55

Porovnávací Tabulka

Jess • 8.7. 20:49

Vzorec pro zkopírování obsahu buňky.

veny • 6.7. 8:28