< návrat zpět

MS Excel


Téma: Cyklus pro vzorec rss

Zaslal/a 3.5.2014 19:25

Ahoj, mám pod sebou v buňkách G2 až G4 čísla, se kterými potřebuji pracovat...
mám vzorec x = 1/((1/G1)+(1/G2)+(1/Gn))
Ve jmenovali zlomku bude vždy přičteno 1/Gn a to Gn je počet vyplněných řádků v sloupci G2 až G4

V mém případě mám vyplněné momentálně 3 řádky (G2 až G4)
Takže vzorec má vypadat takto
x = 1/((1/G2)+(1/G3)+(1/G4))

Kdybych měl 4 řádky, tak by vypadal takto
x = 1/((1/G2)+(1/G3)+(1/G4)+(1/G5))

Zkrátka počet 1/Gn je závislý na počtu vyplněných řádků..

A můj problém je ten, že nevím, jak takovýto vzorec pomocí makra udělat. Zkoušel jsem vytvořit cyklus, ale asi jsem špatně pochopil princip zápisu a hází mi chybu 7
Zatím jsem to zkoušel udělat tak, že se příkaz vykoná při stisknutí tlačítka, ale rád bych, aby se vykonával neustále v určité buňce.. což je moje další otázka.

Sub zkouska()

For i = 2 To (1 + "=Count(C7)") Step 1

Range("J27").Select
ActiveCell.FormulaR1C1 = "=1/((1/R2C7)+(1/RiC7))"
Range("J28").Select

Next i

End Sub

Jak jste si jistě všimli, tak jsem použil (1/RiC7) a to "i" jsem chtěl aby se podle cyklu zvyšovalo a tím mi vybíralo další a další řádky..
Za příkazem "To" v cyklu jsem chtěl dát příkaz "count", abych zjistil ten počet vyplněných řádků ve sloupci G..

Zaslat odpověď >

Strana:  1 2 3   další »
icon #019261
avatar
Option Explicit
Sub pokus()
Dim MyFormula As String, cell As Range
MyFormula = "=1/("
Set cell = [G2]
Do While cell <> ""
MyFormula = MyFormula & "(1+" & cell.Address & ")+"
Set cell = cell.Offset(1, 0)
Loop
MyFormula = Left(MyFormula, Len(MyFormula) - 1) & ")"
ActiveCell.Formula = MyFormula
Set cell = Nothing
End Sub
citovat
#019263
avatar
Děkuji, akorát tam mělo být na 7 řádku kódu "(1/" aby to bylo co jsem chtěl.. Ale mohl by jsi mi prosím i vysvětlit jak to funguje? Rád bych to pochopil a naučil se 1citovat
#019264
avatar
A ještě jeden dotaz.. Jak docílit toho, že se mí výsledek tohoto vzorce bude zobrazovat v nějaké buňce, aniž bych musel na něco klikat? Resp. jak dostat ten kód do buňky a ne do tlačítka?citovat
icon #019265
avatar
Děkuji, akorát tam mělo být na 7 řádku kódu "(1/" aby to bylo co jsem chtěl.
jj, to bol preklep u mňa
funguje to tak, že cyklus prechádza bunky G2 až Gxxx do momentu, kedy nájde prvú prázdnu bunku. V každom prechode cyklom pridáva k reťazcu uloženému v premennej MyFormula ďalšie znaky. Po ukončení cyklu odstráni plus na konci reťazca a dá miesto neho zátvorku. Takto vytvorený reťazec vloží do aktívnej bunky.

Tlačítko nepotrebuješ. Klikni do bunky, kde chceš mať uvedený vzorec a spusti makro.citovat
#019266
avatar
Aha děkuju 1
Ještě by mě zajímalo co způsobují tyto příkazy :
Option Explicit
cell As Range
Set cell = cell.Offset(1, 0)

A hlavně, když si vyberu buňku, nechám spustit to makro "list1.pokus" tak se mi tam spočítá ta hodnota pouze jednou. Jenže já bych potřeboval, aby se to měnilo neustále, při každém připsání nebo odebrání čísel ze sloupce G... jak na to? 1citovat
icon #019268
avatar
Option Explicit znamená povinnú deklaráciu premenných - je to dobrá prax pri písaní VBA kódu, tak to používam. Pokiaľ Ťa to zaujíma viac, tak použi google.
Dim cell as Range znamená, že som zadeklaroval objektovú premennú cell ako Range
Set cell = (objektovej) premennej priraďuje hodnotu, v tomto prípade nejakú bunku.
Offset je vlastnosť objektu Range, v mojom príklade do premennej cell postupne načíta vždy tú, ktorá sa od predošlej bunky nachádza o jeden riadok pod ňou. Offset má dva argumenty, prvý určuje počet riadkov, druhý počet stĺpcov, o ktorý sa má posun (offset) uskutočniť.

Jenže já bych potřeboval, aby se to měnilo neustále, při každém připsání nebo odebrání čísel ze sloupce G... jak na to?
Buď to makro budeš spúšťať opakovane ručne pri každej zmene, alebo si napíšeš udalostné makro a môj príklad doňho zakomponuješ.
Idem sledovať telku, takže radiť Ti už ďalej v tomto vlákne nebudem, prepáč.citovat
#019269
avatar
Dobře, mockrát děkuji 1

Víte někdo, jak tedy nastavit to událost-ní makro jak mi tady radí AL?
Potřebuji, aby se v dané buňce prováděl ten výpočet neustále, pokud vypisuji nebo mažu čísla z toho sloupce G, tak aby se to hned automaticky přepočítalo...citovat
#019270
avatar
Skús maticový vzorec

{=1/SUM(IF(G2:G100<>0;1/G2:G100;0))}
0 je tiež vyplnený riadok a to makro vyhodí chybu.citovat
#019271
avatar
Zatím jsem přišel na tohle :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then

Dim MyFormula As String, cell As Range
MyFormula = "=1/("

Set cell = [G2]

Do While cell <> ""

MyFormula = MyFormula & "(1/" & cell.Address & ")+"

Set cell = cell.Offset(1, 0)

Loop

MyFormula = Left(MyFormula, Len(MyFormula) - 1) & ")"
Range("P27").Select
ActiveCell.FormulaR1C1 = MyFormula

Set cell = Nothing


End If
End Sub

Problém je, že když na začátku nastavím znaméno rovnáse do řetězce MyFormula = "=1/(" tak mi to pak vyhazuje chybu...Pokud totiž to rovná se odstaním, tak se mi v buňce správně vypíše ten vzoreček co chci při každé změně ve sloupci G.. jenže jak tam mám dostat to rovná se, aby se to chovalo jako vzoreček a né jako text?

Když tam to rovná se nechám jak potřebuji tak se jakoby udělá
ActiveCell.FormulaR1C1 = "=1/(......."
a hned hodí chybu 7

marjankaj teď nerozumím co s tím vzorcem mám dělat?citovat
#019272
avatar
Možná už mi došlo, proč to dělá..
On totiž do té buňky zapíše
1/((1/$G$2)+(1/$G$3)+(1/$G$4))
A VB samozřejmě takovou cestu k buňkám nezná, ten zapisuje adresu jako řádek a sloupec takže R1C1 apod..
Takže teď jak to upravit, aby s tím mohl pracovat?citovat

Strana:  1 2 3   další »

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