Stránka 1 z 1

Excel VBA - Makro rozkopírovaní vzorce

Napsal: 13 říj 2015 23:03
od msabrsula
Ahoj všem,

potřeboval bych poradit s jedním makrem v Excelu. V příloze je vložen ukázkový soubor.

Do sloupce A (A2:A..) importuju data z externího zdroje - každý import dat má jiný počet hodnot a sloupec A má tedy pokaždé jiný počet řádků.

Ve sloupci B chci provádět úpravu dat ze sloupce pomocí funkce. Potřeboval bych to udělat tak, aby makro vždycky rozkopírovalo určitý vzorec jen do tolika řádků, kolik je ve sloupci A dat.

Povedlo se jen udělat makro, které má fixně nastavenou oblast ("B2:B15") do které se vzorec rozkopíruje. Nepodařilo se mi úspěšně odkaz na buňku B15 nahradit něčím inteligentnějším, co by počítalo počet řádků ve sloupci A. S tím bych potřeboval pomoci.

Děkuji za pomoc a doufám, že jsem to napsal srozumitelně.

Moje vytvořené makro:
Sub Makro1()
'
' Makro1 Makro
' vlozeni vzorce
Range("B2").Select
ActiveCell.FormulaR1C1 = "=RIGHT(RC[-1], LEN(RC[-1])-1)"
' rozkopirovani vzorce
Range("B2").Select
Selection.AutoFill Destination:=Range("B2:B15"), Type:=xlFillDefault
Range("B2:B15").Select
Range("A1").Select
End Sub

Re: Excel VBA - Makro rozkopírovaní vzorce

Napsal: 13 říj 2015 23:50
od guest
Ach jo, hlavně že se uživatelé cpou do VBA, aniž znají list. Co vám říká Tabulka, co funkce POČET, POČET2, POSUN, budiž, ve VBA metody Offset, Resize?

Re: Excel VBA - Makro rozkopírovaní vzorce

Napsal: 14 říj 2015 00:13
od lubo.
Nastavte si to ve vlastnostech importu.

Re: Excel VBA - Makro rozkopírovaní vzorce  Vyřešeno

Napsal: 19 říj 2015 16:05
od msabrsula
Tak Konečně se mi podařilo dát makro dohromady :-)
Kdyby někdo řešil něco podobného, tak tady je výsledek:

Kód: Vybrat vše

Sub Makro()
' Zpracovani souvislych dat v jednom liste a Rozkopirovani vzorce do sloupce
Dim I As Integer

I = 2
Do While Not IsEmpty(ActiveSheet.Cells(I, 1))
 I = I + 1
Loop ' opakování cyklu
ActiveSheet.Cells(2, 2).Select
ActiveCell.FormulaR1C1 = "=RIGHT(RC[-1], LEN(RC[-1])-1)"

ActiveCell.Copy ' kopírování obsahu aktuální buňky
Range(Cells(2, 2), Cells(I - 1, 2)).Select ' výběr oblasti
ActiveSheet.Paste Selection ' rozkopírování do oblasti
End Sub