< návrat zpět

MS Excel


Téma: Zápis odkazuna buňku rss

Zaslal/a 26.8.2022 13:11

Zdravím, měl bych dva dotazy.

1) Jak zapsat do buňky odkaz na jinou buňku? Mám buňky AJ2:AJ5, do nich potřebuju napsat odkaz na buňku B5.

Range("AJ2").FormulaR1C1 = "=R[3]C[-34]"
Range("AJ3").FormulaR1C1 = "=R[2]C[-34]"
Range("AJ4").FormulaR1C1 = "=R[1]C[-34]"
Range("AJ5").FormulaR1C1 = "=R[0]C[-34]"


Tak mi to zapíše jen hodnotu té buňky, já potřebuju odkaz na ni, aby tam bylo =B4

2) Jak pak stáhnu buňky AJ2:AJ5 k poslednímu řádku? Pokud je to jeden řádek dělal bych to Range("AJ2").AutoFill Destination:=Range("AJ2:AO" & posledni_radek), Type:=xlFillDefaultJenže u více řádků nevím jak.

Děkuji za rady.

Zaslat odpověď >

#053258
elninoslov
Tak B4 alebo B5? Vo všetkých bunkách AJ rovnaký odkaz? alebo vždy "riadkovanie" v AJ po 4-och riadkoch s odkazom na B4, ďalšie 4 riadky na B5, ďalšie 4 na B6, ...
Vyrobte prílohu, kde MANUÁLNE vypíšte vzorce, aké tam chcete mať.
Pr.
Sub makro2()
With Worksheets("mrp")
posledni_radek = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("AJ2").Resize(posledni_radek - 1, 2).Formula = Array("=INDEX($B:$B,5+INT((ROW()-2)/4)*4)", "=INDEX($B:$B,4+INT((ROW()-2)/4)*4)")
End With
End Sub
citovat
#053260
avatar
Pardon B5.
Příloha: xlsx53260_test.xlsx (12kB, staženo 7x)
citovat
#053262
elninoslov
Upravil som makro vyššie. Ak tam nechcete mať počítaný INDEX na bunku, tak sa dá makrom vytvoriť iba pole odkazov na dané bunky.
Pr.
Sub makro3()
Dim i As Long, Radku As Long, Posun As Long, Vzorce()
With Worksheets("mrp")
Radku = .Cells(Rows.Count, "A").End(xlUp).Row - 1
ReDim Vzorce(1 To Radku, 1 To 2)
For i = 1 To Radku
Posun = Int((i - 1) / 4) * 4
Vzorce(i, 1) = "=B" & 5 + Posun
Vzorce(i, 2) = "=B" & 4 + Posun
Next i
.Range("AJ2").Resize(Radku, 2).Formula = Vzorce
End With
End Sub

alebo jednoduchšie takto:
Sub makro4()
With Worksheets("mrp")
.Range("AJ2:AK5").Formula = Application.Transpose(Array(Array("=B5", "=B5", "=B5", "=B5"), Array("=B4", "=B4", "=B4", "=B4")))
posledni_radek = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("AJ2:AK5").AutoFill Destination:=.Range("AJ2:AK" & posledni_radek), Type:=xlFillDefault
End With
End Sub
citovat
#053265
avatar
Díky moc, druhá verze funguje tak, jak jsem chtěl.

Edit: Můžu se se jen zeptat proč to je s tím with? Když odstraním with a tečky před Range, tak to funguje taky.citovat
#053267
elninoslov
Ak sa Range nevzťahuje na žiadny list pracuje s práve aktívnym listom. To môže spôsobiť nevratné zmeny, ak nevedomky spustíte makro nad iným listom. Preto je bezpečnejšie odkazovať na list, ktorého sa to týka. T tomto prípade Worksheets("mrp"). A aby ste nemusel pred každým Range alebo Cells alebo inou vlastnosťou, metódou, či procedúrou listu používať Worksheets("mrp"), tak je na to príkaz "With", ktorý značí, že všetko čo medzi "With" a "End With" zapíšete bodkovou notáciou (začína bodkou) sa vzťahuje práve k objektu zadefinovanému vo "With". Používa sa to aj ak idete meniť veľa vlastností nejakého objektu (napr. rozmery obrázku na nejakom liste).
Napr.
With Worksheets("mrp").Pictures("obr1")
.Left = 10
.Top = 20
.Width = 100
.Height = 150
End With
citovat
#053268
avatar
Rozumím, děkuji.

Ještě bych měl dotaz. Mám tam vlookup na jiný Excel. Je nějaká možnost, abych ho nemusel mít otevřený při spuštění makra? Zkoušel jsem to pomocí data = GetObject(ThisWorkbook.Path & "\" & "masterdata_test.xlsx")

Ale chtělo to po mě zvolit soubor, když jsem spustil makro.
Příloha: zip53268_test.zip (24kB, staženo 7x)
citovat
#053269
elninoslov
Zápis som sa snažil urobiť "Vašim spôsobom".
Příloha: zip53269_test2.zip (22kB, staženo 11x)
citovat
#053276
avatar
Díky, funguje to. Proškolim se pořádně v těch polích, vypadá to užitečně. 5citovat

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