Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  76 77 78 79 80 81 82 83 84   další » ... 122

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)

@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

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áč.

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.

AL to je v podstatě ten vzorec, když si to vypíšeš na papír
áno 1 , akurát mi nie je jasné, prečo sa pýtaš na veci, ktoré zvláda žiak na ZŠ 1

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

Panebože 1 . Ako by si to riešil s papierom a tužkou?
Je potrebné spočítať, koľko kusov vyrobí každá výrobňa za minútu. Celkový čas je potom:
Požadovaný počet kusov / súčet kusov vyrobený všetkými za minútu.
Toto pmn riešia žiaci na prvom stupni ZŠ 1

Máš u mňa cenu za najväčšieho komplikátora jednoduchých úloh za dnešný deň 6

Vysvetlím ešte raz a naposledy, páč ma nebaví donekonečna vysvetľovať triviality:
Pokiaľ sa reťazec 445|479 nachádza medzi hodnotami b7:b106 na 37. mieste a v stĺpci A máš poradové číslo od 1 do 100, tak stačí použiť môj vzorec (samozrejme, pokiaľ tvoj excel nepozná iferror, tak si ho musíš upraviť).
Iba za predpokladu, že v stĺpci A sa nebudú nachádzať poradové čísla od 1 do 100, tak je treba vyrobiť iný vzorec, napr. =IF(D7=0;"";IF(COUNTIF($B$7:$B$106;D7)=0;"nenalezeno";INDEX($A$7:$A$106;MATCH(D7;$B$7:$B$106;0)))) V českom exceli IF nahraď KDYŽ, MATCH nahraď POZVYHLEDAT

Mal som za to, že je zrejmé, že v prípade českej lokalizácie si musíš vzorec preložiť do češtiny, pokiaľ máš verziu excelu nižšiu než 2007 tak nahradiť i IFERROR...

český 2007 a vyšší:
=IFERROR(POZVYHLEDAT(D7; $B$7:$B$106;0);"nenalezeno")

ako sa môžete púšťať do VBA keď si neviete ani preložiť funkciu?

Netvrdím, že rozumiem tomu, čo potrebuješ získať (príloha do toho príliš svetla nevniesla). Ale pokiaľ som ten problém pochopil správne (a myslím, že veľmi pravdepodobne áno), tak môj vzorec funguje. Nefungoval by len za predpokladu, že by čísla v stĺpci A neboli radené vzostupne od 1 do 100 s krokom 1. V tom prípade by bolo treba vzorec trochu modifikovať, ale na základe dát poskytnutých v príklade to nutné nie je.
Môj vzorec samozrejme použiť nemusíš, nie je to povinnosť 1

Prečo takú prkotinu riešiš makrom, v ktorom sa ani nedá vyznať a nepoužiješ miesto toho vzorec? Do bunky G7 zapíš:=IFERROR(MATCH(D7; $B$7:$B$106;0);"nenalezeno") a skopíruj dolu a do stĺpca H.

Bol som naozaj zvedavý, za čo si sa pochválil, ale musím uznať, že to nevyzerá úplne špatne :)

Pokiaľ našikmo znamená napr. z ľavého horného do pravého dolného rohu obrazovky, tak okrem vlastnosti Left musíš v cykle meniť i vlastnosť Top objektu Shape (obrázku).

V prílohe posielam funkčné riešenie, čus.

Sheet1 máš vo svojom projekte pomenovaný ako List1, takže v kóde to potom musí byť tiež List1. Okrem toho, musíš si skontrolovať diakritiku, správne v kóde má byť "Veselý obličej 5", ten editor na wall to zobrazuje v mojom príklade špatne. Chlape, to sú základy, než makro slepo nakopíruješ, tak sa ho snaž pochopiť! To je Tvoja domáca úloha, nie moja...

Inak, keby panáčik nemal precházdať z jedného domu do druhého, ale iba od jedného k druhému, tak alternatívne potom trebárs takto:Option Explicit

Sub MovePic()
Dim tillLft As Single
With Sheet1
tillLft = .Shapes("Obdélník 4").Left - .Shapes("Veselý obličej 5").Width
End With
With Sheet1.Shapes("Veselý obličej 5")
Do
.Left = .Left + 10
Application.Wait (Now + 0.0000057)
Loop While .Left < tillLft
.Left = tillLft - 5
End With
End Sub
Sub ResetPicPos()
With Sheet1
.Shapes("Veselý obličej 5").Left = .Shapes("Obdélník 1").Left + .Shapes("Obdélník 1").Width + 5
End With
End Sub


Strana:  1 ... « předchozí  76 77 78 79 80 81 82 83 84   další » ... 122

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