< návrat zpět

MS Excel


Téma: Odkaz na bunku XY s dynamickým názvem listu rss

Zaslal/a 16.6.2015 14:42

Zdravím.
potřebuju do bunky (např. C8) na aktuálním listu vložit číslo z listu jehož název je napsán v bunce (např. A8) (aktuálního listu)
názvy listu mám pojmenované čísly 1 2 3 atd.
cíl: změním název buňky A8 na název jiného listu > dostanu hodnotu z tohoto nového listu
mám excel 2010, snažil jsem se použít funkce indirect a vlookup, ale mám jen české funkce, takže funkci "nepřímý odkaz" jsem našel ale vlookup česky jsem nenašel.. (řešit možno i ve VBA)

Zaslat odpověď >

Strana:  « předchozí  1 2
#025704
avatar
jako kod jsem použil tisíce pro zákl info a jednotky pro doplnujicí info (kde 10xy spadá pod hlavní info od 1000)
tak jsem vytvořil něco takového (ještě jen hodím na začátek příkaz na smazání příslušných bunek a funguje to):

For i = 1 To 6
If Cells(4 + i, 1) Mod 1000 = 0 Then
u = Cells(4 + i, 1) / 1000
Sheets(4 + 2 * u).Cells(12, 4) = Sheets("seznamsmluv").Cells(4 + i, 13)
Sheets(4 + 2 * u).Cells(12, 5) = Sheets("seznamsmluv").Cells(4 + i, 9)
Else
u = (Cells(4 + i, 1) - Cells(4 + i, 1) Mod 1000) / 1000
'tohle souvisí jakoby s poctem dětí
For j = 1 To 10
If IsEmpty(Sheets(5 + 2 * u).Cells(1 + j, 1)) Then
'udaj1
Sheets(5 + 2 * u).Cells(1 + j, 1) = Sheets("seznamsmluv").Cells(4 + i, 1)
'udaj2
Sheets(5 + 2 * u).Cells(1 + j, 2) = Sheets("seznamsmluv").Cells(4 + i, 6)
'udaj3
Sheets(5 + 2 * u).Cells(1 + j, 3) = Sheets("seznamsmluv").Cells(4 + i, 5)
Exit For
Else
End If
Next
End If
Next

kdyby Vás napadla nějaká optimalizace, tak sem s ní(stačí myšlenka, já už to nějak implementuju), protože těch "i" cyklů bude k dobré stovce a v každém cyklu bude pro "i" kopírováno tak 10 zákl. info, těch dodatečných taky klidně až k deseti. :)citovat
#025720
elninoslov
Nehovorili ste pred tým, že listy budú číslované od "1" ? Teraz Vám to čísluje od 6. listu, nie od listu "6". Vaša posledná príloha absolútne nekorešponduje s tým kam pristupuje tento kód (riadky, stĺpce). Bez aktuálnej prílohy a podľa možnosti celého makra, sa radí naozaj veľmi zle.
Čo by som vám, ale poradil aj takto z brucha je:
-na začiatku kódu
With Application
.EnableEvents = False
.ScreenUpdating = False
End With

-na konci kódu
With Application
.EnableEvents = True
.ScreenUpdating = True
End With

Ďalej by som použil konštrukciu
With
...
End With
, tam kde sa Vám opakujú prístupy na rovnaký objekt, napr. :
Sheets(4 + 2 * u)
Sheets(5 + 2 * u)
Do With môžete zjednodušiť iba jednu stranu rovnice, musíte sa rozhodnúť ktorú.

Alebo, by som použil polia. Deklarácia
Dim Sml()
Na začiatku cyklu i by som dal načítať všetky údaje, aj tie ktoré sa nepoužijú.
Sml = Sheets("seznamsmluv").Cells(4 + i, 1).Resize(1, 13).Value 'udaje
a zápis by bol napr. pre:
Sheets("seznamsmluv").Cells(4 + i, 1)
Sheets("seznamsmluv").Cells(4 + i, 6)
Sheets("seznamsmluv").Cells(4 + i, 5)

takýto
Sheets(5 + 2 * u).Cells(1 + j, 1).Resize(1, 3) = Array(Sml(1, 1), Sml(1, 6), Sml(1, 5))
a pre
Sheets(4 + 2 * u).Cells(12, 4) = Sheets("seznamsmluv").Cells(4 + i, 13)
Sheets(4 + 2 * u).Cells(12, 5) = Sheets("seznamsmluv").Cells(4 + i, 9)

by som dal
Sheets(4 + 2 * u).Cells(12, 4).Resize(1, 2) = Array(Sml(1, 13), Sml(1, 9))

Ďalej by som ešte znížil počet volaní bunky
Cells(4 + i, 1)
a nahradil
C = Cells(4 + i, 1)
a použil iba C
Opakujem, že to dávam z brucha, keďže nieje príloha, ani začiatok a koniec procedúry, navyše aj tá asi nieje kompletná, je tam jedno prázdne else. Nevidíme data, nevidíme "číslovanie" listov, a už vôbec nevidím žiadnu blbuvzdornosť. Čo ak niekto premenuje list, alebo prehodí poradie ? Je šanca, že sa niečo také udeje ? Vytvárate tam niekde listy ? Ak nie, čo sa udeje, ak bude viac dát ako listov ?...citovat

Strana:  « předchozí  1 2

Uživatelské menu

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

Menu

Formulář Faktura

Formulář Faktura IV

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

Helios iNuvio

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.

On-line nástroje