< 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:  « předchozí  1 2 3   další »
#019273
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?

marjankaj teď nerozumím co s tím vzorcem mám dělat?

Npíš ho do bunky, kde chceš mať výsledok.citovat
#019274
avatar

marjankaj napsal/a:

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?

marjankaj teď nerozumím co s tím vzorcem mám dělat?

Npíš ho do bunky, kde chceš mať výsledok.


Bohužel nejde, normálně ho vložit do buňky nemůžu, protože tyhle příkazy excel nezná.. a když ho tam nechám vložit přes makro, tak taky hází chybu 7citovat
#019275
avatar
{=1/SUMA(KDYŽ(G2:G100<>0;1/G2:G100;0))}citovat
#019277
avatar
Tak po několika hodinách tápání jsem na to konečně přišel 3
Worksheet_Change jsem si hodil do listu a z něj jsem pak volal ty příkazy, které jsem dal do module a už to jde jak má 5citovat
icon #019278
avatar
@K.M.
A VB samozřejmě takovou cestu k buňkám nezná, ten zapisuje adresu jako řádek a sloupec takže R1C1 apod.. - nezmysel; záleží na tom, aké inštrukcie do kódu vkladáš. Správny postup je napr. tento:Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyFormula As String, cell As Range
If Not Application.Intersect([G:G], Target) Is Nothing Then
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) & ")"
[P27].Formula = MyFormula
Set cell = Nothing
End If
End Sub


@marjankaj:
0 je tiež vyplnený riadok a to makro vyhodí chybu - nezmysel, makro zapíše vzorec presne podľa zadania OP. To, že delenie nulou nie je prípustné, je už vec iná a nie je chybou makra. Naopak, Tvoj vzorec sa zadania nedrží, v situácii kedy napr.:
-----
[G2]=2
[G3] bude prázdne
[G4]=2
ostatné bunky v stĺpci G budú prázdne
-----
vzorec podľa zadania má byť =1/((1/$G$2)) s výsledkom 2, Tvoj vzorec ale dáva výsledok 1, asi vieš prečo (nedrží sa zadania).
edit:
maticový vzorec, ktorý dáva výsledok odpovedajúci zadaniu, by bol napr:=1/SUM(1/G2:INDEX(G2:G100;MATCH(TRUE;G2:G100="";0)-1))(delenie nulou nie je ošetrené)

edit:
pri snahe trochu ten kód zrýchliť ešte malá úprava:Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyFormula As String, cell As Range, iniRng As Range
Set iniRng = [G2]
Set iniRng = Range(iniRng, iniRng.End(xlDown).Offset(1, 0))
If Not Application.Intersect(iniRng, Target) Is Nothing Then
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) & ")"
[P27].Formula = MyFormula
Set cell = Nothing
End If
Set iniRng = Nothing
End Sub
citovat
#019279
avatar
@AL
Máš pravdu.
Ale na druhej strane iba zadávateľ vie aké je zadanie. Aj keď v tomto prípade nie som istý. 2

PS.
Ale ošetriť v tom makre, či je tam vyplnená nula, to samozrejme ide.citovat
icon #019280
avatar
Ale ošetriť v tom makre, či je tam vyplnená nula, to samozrejme ide. Presne tak 1
okrem toho, ako píšeš, zo zadania nie je jasné, ako s nulou naložiť. Možný spôsob ošetrenia delenia nulou v maticovom vzorci pri splnení ostatných podmienok zadania by mohol byť:=1/SUM(IF(G2:INDEX(G2:G100;MATCH(TRUE;G2:G100="";0)-1)<>0;1/G2:INDEX(G2:G100;MATCH(TRUE;G2:G100="";0)-1);0 )), ale je otázka, či dielčie zlomky s nulami v menovateľoch sa majú do menovateľa hlavného zlomku prenášať ako nuly (striktne vzaté, delenie nulou nie je prípustné a pokusy to následne nejako zaonačiť nemusia viesť k želanému výsledku)citovat
icon #019281
avatar
2 spôsoby ošetrenia delenia nulou v kóde
1. Bunky s nulovou hodnotou sa do vzorca neprenášajú:Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyFormula As String, cell As Range, iniRng As Range
Set iniRng = [G2]
Set iniRng = Range(iniRng, iniRng.End(xlDown).Offset(1, 0))
If Not Application.Intersect(iniRng, Target) Is Nothing Then
MyFormula = "=1/("
Set cell = [G2]
Do While cell <> ""
If cell.Value <> 0 Then _
MyFormula = MyFormula & "(1/" & cell.Address & ")+"
Set cell = cell.Offset(1, 0)
Loop
MyFormula = Left(MyFormula, Len(MyFormula) - 1) & ")"
[P27].Formula = MyFormula
Set cell = Nothing
End If
Set iniRng = Nothing
End Sub

2. zlomok s nulou v menovateli je do výsledného vzorca zapísaný ako nulaOption Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyFormula As String, cell As Range, iniRng As Range
Set iniRng = [G2]
Set iniRng = Range(iniRng, iniRng.End(xlDown).Offset(1, 0))
If Not Application.Intersect(iniRng, Target) Is Nothing Then
MyFormula = "=1/("
Set cell = [G2]
Do While cell <> ""
If cell.Value <> 0 Then
MyFormula = MyFormula & "(1/" & cell.Address & ")+"
Else: MyFormula = MyFormula & "0+"
End If
Set cell = cell.Offset(1, 0)
Loop
MyFormula = Left(MyFormula, Len(MyFormula) - 1) & ")"
[P27].Formula = MyFormula
Set cell = Nothing
End If
Set iniRng = Nothing
End Sub
oba ovšem nejakým spôsobom pôvodné zadanie modifikujú a otázkou naďalej zostáva, čo sa vlastne v pôvodnom zadaní ohľadom delenia nulou chcelocitovat
#019283
avatar
Chtěl jsem, aby se vzorec počítal, jen pokud jsou nějaká čísla v daném sloupci G zapsaná. Pokud tam žádná čísla nejsou, tak by se dělilo nulou a to samozřejmě normálně nejde,takže by měl výsledek vrátit jen 0citovat
#019284
avatar
A celá nula ve sloupci nikdy zapsaná nebude, takže se to tím zjednodušuje 1
Ale mockrát děkuji za příklady a upozornění, hodně mě to naučí 1citovat

Strana:  « předchozí  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