Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  65 66 67 68 69 70 71 72 73   další » ... 289

Sub TiskDoPdf()
Dim Mesic As Integer
Mesic = Sheets("Měsíc").Range("A1").Value

Sheets("Doplnění").PageSetup.PrintArea = Range("A1:G50").Offset(0, (Mesic - 1) * 8).Address
Sheets(Array("sm. A", "sm. B", "sm. C", "sm. D", "Doplnění")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
Sheets("Měsíc").Range("A2").Value & Mesic & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
Sheets("Docházka").Select
End Sub

Evidentne sa jedná o rovnako veľké oblasti a sú len posunuté. Ak sú posúvané rovnomerne, tak stačí jednoduchý Offset.
Niečo na spôsob:
PRVÁ_CIEĽOVÁ_OBLASŤ.Offset(0, X - 1).Value = ZDROJOVÁ_OBLASŤ.Value
a nie je treba pole...

??? Pole oblastí ??? Alebo o čo ide ?
Sub Kopiruj_do_oblasti_X()
Dim OBLAST() As Range
Dim X As Integer

ReDim OBLAST(1 To 3)
With List16
Set OBLAST(1) = .Range("D8:D19") 'naplnenie poľa oblastí, pri väčšom množstve cyklom
Set OBLAST(2) = .Range("E8:E19")
Set OBLAST(3) = .Range("F8:F19")

X = .Range("D4").Value 'index oblasti X

If IsNumeric(X) Then 'zápis zdroju do oblasti X
If X >= LBound(OBLAST) And X <= UBound(OBLAST) Then OBLAST(X).Value = .Range("C8:C19").Value
End If
End With

'Ak ide len o priradenie zdroju C9:C19 do premennej Range podľa X, a nie o kopírovanie hodnôt potom stačí:
'Set OBLAST(X) = List16.Range("C8:C19")
'ale tu nepoznáme presné použitie, o čo ide ...
End Sub

foundRange je 1 bunka? Je v tom istom riadku ako dátum? Je to naozaj dátum alebo text? ... Malo by to fungovať ...
Príloha

Cez OFFSET/POSUN sa dá nastaviť veľkosť oblasti (3. a 4. parameter), alebo INDIRECT/NEPŘÍMÝ.ODKAZ.
Príklad:
=AVERAGE(IF(WEEKDAY(OFFSET($N$1;;;D2);2)=C5;OFFSET($M$1;;;D2)))
=PRŮMĚR(KDYŽ(DENTÝDNE(POSUN($N$1;;;D2);2)=C5;POSUN($M$1;;;D2)))

No tak dajte priemer všetkých hodnôt (maticovo):
=AVERAGE(IF(data!B:B=A3;data!E:E))
=PRŮMĚR(KDYŽ(data!B:B=A3;data!E:E))

alebo väčšia konštrukcia bez matice a s kontrolou iba skutočne zaplnených oblastí, nie celých stĺpcov (pretože dátumy sú zoskupené):
=AVERAGE(OFFSET(data!$E$2;MATCH(A3;OFFSET(data!$B$3;;;COUNT(data!B:B));0);;COUNTIF(OFFSET(data!$B$3;;;COUNT(data!B:B));A3)))
=PRŮMĚR(POSUN(data!$E$2;POZVYHLEDAT(A3;POSUN(data!$B$3;;;POČET(data!B:B));0);;COUNTIF(POSUN(data!$B$3;;;POČET(data!B:B));A3)))

Prípadne to zjednodušiť tak, že sa dá aspoň ten jeden OFFSET do def. názvu OBLAST
=OFFSET(data!$B$3;;;COUNT(data!B:B))
=POSUN(data!$B$3;;;POČET(data!B:B))

a následne
=AVERAGE(OFFSET(data!$E$2;MATCH(A3;OBLAST;0);;COUNTIF(OBLAST;A3)))
=PRŮMĚR(POSUN(data!$E$2;POZVYHLEDAT(A3;OBLAST;0);;COUNTIF(OBLAST;A3)))

prípadne obdobne ...

Áno, v nových Office to je, v starších treba nahradiť maticovým vzorcom.

Ak je to tak ako si predstavujem, tak to sa musí dať skrátiť, a to podstatne. Ak chcete pošlite vzorku dát, bez citlivých údajov. Aj s makrom. Keď bude čas pozriem.

Koľko Vám také makro trvá, ak idete po jednej bunke/riadku pri 500K Read a 250k Write?

To záleží na mnohých veciach. Príklad:
let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabuľka1"]}[Content],
#"Zmenený typ" = Table.TransformColumnTypes(Zdroj,{{"Meno", type text}, {"Počet", Int64.Type}}),
PoslednyStlpec=List.Last(Table.ColumnNames(#"Zmenený typ")),
PrvaHodnota = Table.Transpose(Table.SelectColumns(#"Zmenený typ", PoslednyStlpec)){0}[Column1],
#"Pridané vlastné" = Table.AddColumn(#"Zmenený typ", "Vlastné", each PrvaHodnota)
in
#"Pridané vlastné"

Skúste
Range("E1:R1").Offset(RadekVysledek1 - 1, 0).Value = VyslCetnost1
alebo upravte premennú "RadekVysledek1", aby mala hodnotu nie riadku, ale posunu. Teda o koľko musím E1:R1 posunúť dole.
Ale 250K riadkov, to sa načakáte.
To by bolo lepšie urobiť 2 rozmernú maticu (ak viete počet riadkov), alebo (ak neviete dopredu počet) najskôr dočasnú kolekciu či dočasné pole matíc, a na konci ich v cykle spojiť do už známej veľkosti. Zapísať naraz, alebo aspoň vo veľkých blokoch. To sa ale najlepšie rieši s prílohou.

Ak sa nespracováva tá premenná aj niekde inde, tak ju netreba:
Worksheets("List2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Worksheets("List1").Cells(1, 1).Value

Nedovolí to systém. Ten v systémovej zložke Users, kvôli prístupovým právam, nedovolí zápis do iných zložiek, ako je Vaše konto. Ak dám súbor inde, do nesystémovej zložky, na iný disk, alebo do svojej zložky v Users, tak to prejde.

Možno zbytočne komplikované čáry-máry so stĺpcami, ale funkčné. Takto som to pochopil ja.

Ten dátový model je obrovský. Úpravy už len bez neho. Prekopaný kód na GoogleDrive.


Strana:  1 ... « předchozí  65 66 67 68 69 70 71 72 73   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