Data z jednoho listu do druheho

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Uživatelský avatar
elninoslov
Level 2.5
Level 2.5
Příspěvky: 366
Registrován: červen 13
Pohlaví: Muž
Stav:
Offline

Re: Data z jednoho listu do druheho

Příspěvekod elninoslov » 09 lis 2017 09:21

wsTotalyX - Tak som premenoval Code Name listu "totaly_X". Vo VBA - Properties - Name. Teda na ušku má nápis "totaly_X", ale interný názov pre VBA je wsTotalyX. Interný názov je rýchlejší ako Worksheets("totaly_X"). Pre ostatné listy sa to použiť nedá, lebo nevieme ako budú interne pomenované. Vy si teda vo VBA - Properties - Name zmente na wsDatabase, a samozrejme aj v kóde nahraďte všetky 3 výskyty slova wsTotalyX za wsDatabase.

Stĺpec BB nemá číslo 52 ale 54. Zmena na 4 miestach.

Ten list "Výsledek" tam netuším na čo máte. Asi z predošlých pokusov, tak ho odstráňte zo zošitu, aj zo zoznamu listov pre ignorovanie. A s tým súvisí ešte jedna úprava v makre.

Kód: Vybrat vše

If IgnR > 0 Then IgnL = IgnL & Join(WorksheetFunction.Transpose(.Cells(2, 54).Resize(IgnR).Value2), "•") & "•"

zmeňte Cells(2... na Cells(1..., ale teraz som si ešte uvedovil, že sa nedá transponovať jedna bunka (ak je iba 1 názov listu), takže nahraďte daný riadok za

Kód: Vybrat vše

If IgnR > 0 Then
  If IgnR = 1 Then IgnL = IgnL & .Cells(2, 54).Value2 & "•" Else IgnL = IgnL & Join(WorksheetFunction.Transpose(.Cells(2, 54).Resize(IgnR).Value2), "•") & "•"
End If

A tu

Kód: Vybrat vše

If nIgnR > 0 Then wsDatabase.Cells(IgnR + 2, 54).Resize(nIgnR).Value = WorksheetFunction.Transpose(Split(nIgnL, "•"))

zmente to IgnR + 2 na IgnR + 1.
Lebo iba 1 je určite na vynechanie vždy, a to list Database (prepíšte tam v BB2 tiež to totaly_X na Database).
A tu

Kód: Vybrat vše

.Range(.Cells(1, 54), .Cells(Rows.Count, 54).End(xlUp)).Offset(3).ClearContents

zmente Offset(3) na Offset(2), tu je preto 2 lebo sa ráta aj BB1 s hlavičkou.
Inak medzi listy na ignorovanie sa všetky spracované dávajú automaticky.

Ak je 15 stĺpcov a nie 9, tak treba zmeniť v makre

Kód: Vybrat vše

ReDim Pole(1 To R, 1 To 9)
Pole = LO.DataBodyRange.Columns(1).Resize(R, 9).Value2

na

Kód: Vybrat vše

ReDim Pole(1 To R, 1 To 15)
Pole = LO.DataBodyRange.Columns(1).Resize(R, 15).Value2

Kúsok pod tým je

Kód: Vybrat vše

...Array(Pole(i, 1), Pole(i, 2), Pole(i, 3), Pole(i, 4), Pole(i, 5), Pole(i, 6), Pole(i, 7), Pole(i, 8), Pole(i, 9))...

tam treba doplniť až po 15, teda

Kód: Vybrat vše

...Array(Pole(i, 1), Pole(i, 2), Pole(i, 3), Pole(i, 4), Pole(i, 5), Pole(i, 6), Pole(i, 7), Pole(i, 8), Pole(i, 9), Pole(i, 10), Pole(i, 11), Pole(i, 12), Pole(i, 13), Pole(i, 14), Pole(i, 15))...

Ďalej je ešte jedno

Kód: Vybrat vše

ReDim Pole(1 To R, 1 To 9)

treba zmeniť opäť na

Kód: Vybrat vše

ReDim Pole(1 To R, 1 To 15)

a kúsok pod tým sa načíta výsledok, kde treba opäť doplniť priradenie pre ďalšie stĺpce po 15

Kód: Vybrat vše

Pole(i, 1) = C(0): Pole(i, 2) = C(1): Pole(i, 3) = C(2): Pole(i, 4) = C(3): Pole(i, 5) = C(4): Pole(i, 6) = C(5): Pole(i, 7) = C(6): Pole(i, 8) = C(7): Pole(i, 9) = C(8)

na

Kód: Vybrat vše

Pole(i, 1) = C(0): Pole(i, 2) = C(1): Pole(i, 3) = C(2): Pole(i, 4) = C(3): Pole(i, 5) = C(4): Pole(i, 6) = C(5): Pole(i, 7) = C(6): Pole(i, 8) = C(7): Pole(i, 9) = C(8): Pole(i, 10) = C(9): Pole(i, 11) = C(10): Pole(i, 12) = C(11): Pole(i, 13) = C(12): Pole(i, 14) = C(13): Pole(i, 15) = C(14)

Makro totiž nič nekopíruje, lebo by to bolo mimoriadne pomalé. Makro naraz načíta celé pole dát, urobí porovnania polí a kolekcií, ktoré sú interne v makre (mimo prístupu do listu) veľmi rýchle, a zase naraz zapíše všetky dáta na list. Žiadne kúskovanie a kopírovanie.

Posielam aj upravenú verziu, ale zmeny som popisoval pre Vašu potrebu, ak Vás ešte napadne, že je nepodstatné poskystnúť reálne rozloženie.
Přílohy
Porovnávanie cez Collection bez dát.xlsm
(46.21 KiB) Staženo 24 x

Reklama
Rent_cars
nováček
Příspěvky: 11
Registrován: říjen 17
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Data z jednoho listu do druheho

Příspěvekod Rent_cars » 09 lis 2017 09:28

Ahoj,

teda.... MOC DIKY za velice vyčerpávající odpověď! :-) :-).

jdu to všechno poupravovat.

Uživatelský avatar
elninoslov
Level 2.5
Level 2.5
Příspěvky: 366
Registrován: červen 13
Pohlaví: Muž
Stav:
Offline

Re: Data z jednoho listu do druheho

Příspěvekod elninoslov » 09 lis 2017 09:31

V prílohe je hotový kód, len si premiestnite čudlíky a zoznam listov, prípadne tie kontrolné počty. Samozrejme zmena toho Code Name listu Database. Inak stačí kód iba prekopírovať do Vášho zošitu.

Rent_cars
nováček
Příspěvky: 11
Registrován: říjen 17
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Data z jednoho listu do druheho

Příspěvekod Rent_cars » 13 lis 2017 08:02

Ahoj elninoslov,

vše šlape jak má :-) díky moc :-).

Rent_cars
nováček
Příspěvky: 11
Registrován: říjen 17
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Data z jednoho listu do druheho

Příspěvekod Rent_cars » 24 lis 2017 10:38

Zdravím.

Ještě se pokusím toto vlákno probrat. Narazil jsem na tuto věc. Přikládám opět soubor s daty. Když dám tlačítko aktuializovat, u sloupce Used petrol totaly_1 [L], Used petrol totaly_2 [L], Used petrol totaly_3 [L] se podle funkce SVYHLEDAT doplní data. Ovšem u sloupců Used petrol totaly_2 [L] a Used petrol totaly_3 [L] se napíše #není k dispozici. Chápu, že tam nejsou data. Tak to hodí tuto chybu. Ale mám zde ošetření IFERROR, akorád se místo 0 napíše toto... Nevěděl by jsi, prosím, jak na to? Tato věc mi v tom dělá humbuk, protože pak z toho dělám graf a jelikož tam je náspi #není k dispozici, graf se neudělá...

Díky moc :)
Přílohy
Porovnávanie cez Collection bez dát.xlsm
(42.2 KiB) Staženo 21 x

Uživatelský avatar
elninoslov
Level 2.5
Level 2.5
Příspěvky: 366
Registrován: červen 13
Pohlaví: Muž
Stav:
Offline

Re: Data z jednoho listu do druheho

Příspěvekod elninoslov » 24 lis 2017 12:47

Šmarja, čo to zase s tým súborom robíte. Najskôr chcete urobiť súbor na 9 stĺpcov, potom z Vás vypadne, že ich je v skutočnosti 15, ja Vám to prerobím a vysvetlím, a Vy použijete aj tak neupravené makro na 9 stĺpcov pre súbor s 11 stĺpcami, kde navyše stĺpce 10 a 11 odnikiaľ nenačítate, ale chcete vypočítavať, pričom v makre zapisujete 9 stĺpcové pole do 11 stĺpcov. Preto Vám tam dáva chybu. Ďalej netuším čo majú znamenať tie stĺpce Used petrol totaly_1 [L], Used petrol totaly_2, Used petrol totaly_3. To má mať každý list svoj stĺpec ? To je nezmysel, načo by sa potom robil celý humbuk pre to aby boli všetky listy pod sebou, keď majú byť ešte aj vedľa seba. Aj keby Vám tam chyba "#není k dispozici" nevznikla rovno pri vkladaní výsledku makrom, vznikne Vám tam chyba (opravená na 0 pomocou IFERROR) kvôli tomu, že používate prehľadávanie tabuľky z nejakého listu v nejakom stĺpci, aj pre riadky z úplne iného listu, kde sa tabuľka volá úplne inak, ale vzorec prehľadáva úplne inú tabuľku. Nepoužívate poslednú verziu, čo som Vám spravil. A to nehovorím o vzorci v I2, ktorý tam nemá čo robiť, keď to je posledný stĺpec zapisovaný makrom. To ste manuálne prepísal len jeden riadok v stĺpci výslednej tabuľky ??? Kumulujete problém za problémom. Celé zle. Celé.

Kompletne prekopte prístup, popis, prílohy, požadované výsledky, spôsob používania. V žiadnom prípade sa ale nespoliehajte na to, že ak dáte nový podrobný popis, premyslené požiadavky, prerobené reálne prílohy, ... že sa Vám na to ešte pozriem.

Nehnevajte sa, ale to je akoby sa rozprával hluchý s nemým, pričom hluchému sa nechce kecať.

Rent_cars
nováček
Příspěvky: 11
Registrován: říjen 17
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Data z jednoho listu do druheho

Příspěvekod Rent_cars » 24 lis 2017 13:56

Zdravím.

příjde mi, že jste nyní popsaný problém špatně pochopil (nebo možná vůbec). Makro jsem pro svou databázi použil takové, jak jste mi poslal ve druhé verzi. To že tam mám sloupce jako used petrol totaly 1 atd, tam prostě mám :). není důvod řešit proč, prostě tam jsou. Přiložený soubor pouze demonstruje problem, protože si myslím, že v makru chyba není. Jen se mi prostě při importu dat z listů nevypíšou do buňek čísla, ale text #není k dispozici. když odentrujete první buňku ve sloupci used petrol totaly_2, tak se Vám tam zobrazí modrý čtvereček (viz. příloha) a po jeho potvrzení, se #není k dispozici zmení na číslo (také viz příloha). Otázka je, proč musím potvrzovat, že chci vzorec použít pro celý sloupec, ale rovnou se sám nepoužije.

když nechám pomocí tlačítka - vyplnit vzorcem všechny buňky sloupec aktualizovat, funguje to. jenže bych potřeboval, aby sje po přidání řádků nemusel na toto vůbec klikat a rovnou by se doplnily čísla...

Ano, musí být data v listech a ano, musí pak být ještě vedle sebe. Věšechny sloupce které tam jsou tam musí být, ať se to zdá sebevíce zbytečné :)... makro od vás funguje dobře. Data kopíruje 100%. Jenom bych potřeboval, aby v řádcích nebylo #není hodnota ale číslo...

to přece není jiný problém, ne? Narazil jsem na to teď. Nemohl jsem tedy na začátku zadávání předpokládát, že by k tomu mohlo dojít... Jaké problémy kumuluji? Nikdy jsem ve VBA nic nedělal. Nenapadlo mě, že když místo 15 sloupců dám 9 (aby byly rychleji vymyšlená fiktivní data), tak bude v programu takový rozdíl. Myslel jsem, že prostě nekdě z oblasti A:H udělám třeba A:R... tento problém se vyskyl teď. Nemyslím si, že kumuluji, nebo špatně popisuji problémy... Spíše mi příjde, že reágjete naštvaně na uplně jiné věci, naž na které jsem se ptal...

Díky
Přílohy
2.PNG
1.PNG


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů