» »

Excel pomoč

Excel pomoč

Vanadium ::

Pozdravljeni.

V excelu bi rad izvedel neko IF funkcijo (če se da z njo sploh to izvest seveda) skratka imam dve tabeli in sicer:
- v tabeli 1: v celici N12 imam izračunano vrednost pretoka vode 1,04 l/s (enota v katerih je vrednost je popolnoma nepomembna)
- v tabeli 2: sedaj analogno s pomočjo poizkušanja v celici D32 (Vrednost poizkušanja se pa giblje od 0 - 360) želim dobiti v celici I32 enako vrednost kot v prvi tabeli v celici A1 na 2 decimalki natančno.

Torej kako bi če je seveda sploh izvedljivo izvedel operacijo, da excel nekako sam poišče v celici D32 to vrednost npr. na 2 decimalke natančno v odvisnosti od vrednosti iz prve tabele, da ne rabim sam poizkušat?

 excel

excel

  • spremenilo: Vanadium ()

Argonavt ::

Razlaga primera je dokaj nerazumljiva in se v podrobnosti ne spuščam.

Opozarjam samo, da če je v celici D32 formula ali bi lahko bila formula v odvisnosti od N12 / I32 potem ne ugibaj ročno ciljne vrednosti, temveč uporabi Iskanje cilja ( Goal seek) v Podatki - Kaj če analiza - Iskanje cilja. Možno, da je to tudi odgovor na vprašanje.

joze67 ::

Za vprašanja imaš kar visoke standarde. Odgovor pa je pravilen v nulo.

Argonavt ::

Če je za ta primer res pravi odgovor je odvisno od uporabnika in njegove tabele :)

Ajde sam odgovor na temo Iskanja Cilja naj bo pa res v nulo:

Iskanje cilja razlaga

Vanadium ::

@argonavt: v formuli D32 ni formula ampak sam vpisuješ vrednost in s poizkušanjem se potem približuješ enaki vrednosti ki je izračunana v prvi tabeli. Gre se pa za v prvi tabeli izračun količine odpadne vode ki jo povzroča določeno število prebivalcev v tem primeru 1,04 l/s (vrednost N12) v drugi tabeli je pa enačba po Manningu za cevi z delno ponitvijo kjer se na taki način išče višino polnitve in hitrost vode v cevi (se uporablja pri kanalizacijah). Načeloma bi šlo to s solverjem samo sem upal če je opcija, da se nekako v excelu narediti if zanko pač dviguj ali spuščaj npr. vrednost v D32 za korak npr 0.01 ali 0,005 dokler se ne približaš vrednosti v N12 na dve decimalki točno. Nebi rad nekih zunanjih pluginov uporabljal ampak da deluje vse notri na principu vnešene formule v excelu in da je približno trotl zihr :D

Zgodovina sprememb…

  • spremenilo: Vanadium ()

Cr00k ::

Sicer ne vem, kakšna je formula za izračun celice I32, ampak jaz bi v to celico linkal vrednost iz N12 in v izpostavil v formuli kot polnitve in v jo vpisal v D32... nisem siguren če je IF prava funkcija...

hotig ::

Malce OT pa vseeno:
A vam ni asistent povedal, kako boste prišli do končnega rezultata? Mislim, no če se še dobro spomnim, da ni druge možnosti, kot da ročno vnašaš vrednosti v D32, dokler ni vrednost v I32 enaka izračunani vrednosti v N12.

P.S.
Dej napiši ker predmet je to, če ni skrivnost. Hidrologija, vodarstvo ali nekaj takega. Mogoče pa jst najdem kej v arhivu :)

Cr00k ::

Če bi vedeli formulo za I32, bi bilo vse dosti lažje ;)

Vanadium ::

@hotig: Kolega gradbenik? Tako smo naredili na vajah, jaz bi si pa rad vseeno tabelico avtomatiziral, ker pride v prihodnosti prav če kako zadevo na peš računaš. Dobr sej načeloma namenski plugin od Slovenskih razvojnikov ozrioma Hrvaških ima itak modul hidravlike notri ampak včasih je hitreje na peš naredit. Gre se pa za predmet kanalizacije in čiščenje voda. Lahko pošljem na mail vama (kontakt na ZS) pa se malo poigrata, meni pri bolj naprednih zadevah odpove znanje excela nažalost.

Zgodovina sprememb…

  • spremenilo: Vanadium ()

mirator ::

Ena varianta je, da si na drugem listu narediš iteracijo s tangentno metodo. Seveda moraš formulo najprej spremeniti v polinom. V tvoji tabeli bi uporabil celico D34, kamor bi zapisal začetno vrednost, v celici D32 pa bi se ti izpisala željena vrednost, ki bi ti jo izračunala tangentna metoda.
Vem precej komplicirano in je treba poznati numerične metode, vendar ko se to enkrat naredi, je zelo učinkovito.
Sicer pa, ker gre za excel bi te napotil na forum Matjažev.NET.

hotig ::

@Vanadium
Kolega VKI, še iz predbolonjskega časa (danes VOI). Mi je pa takoj padla v oči naloga, ker se je spomnim še iz pred skoraj 15 let. Se spomnim da smo nalogo tudi mi reševali s poskušanjem, torej z ročnim vnosom brez kakršnekoli formule. Sem malce gledal, pa tega žal nimam več v arhivu (no ja, sem študijske zadeve hranil na disku še cca 10 let, ampak tega ni več). Sicer je mirator zgoraj omenil neke možnosti, ampak piont cele naloge ni odkrivanje matematičnih možnosti izračuna in dodatnih formul (boš porabil preveč časa) ampak končni izračun pretoka. Najhitrejši in najenostavnejši je pač ročni vnos vrednosti.

bemfa ::

Narediš si novo tabelo nekje s 3 podatki: kot polnitve, manning, diff (manning - željena vrednosti). Vstaviš za kot cifre 0-360 na poljubnem intervalu, manninga po formuli iz podatkov, rezultate pa sortiraš po diff naraščujoče, odčitaš kot v prvi vrstici.

Vanadium ::

@hotig: lepo srečat še enega kolega, res je, da sem jaz že malo v letih, ko sem se spravil tole delat ampak nikol ni prepozno pravijo baje...

bemfa je izjavil:

Narediš si novo tabelo nekje s 3 podatki: kot polnitve, manning, diff (manning - željena vrednosti). Vstaviš za kot cifre 0-360 na poljubnem intervalu, manninga po formuli iz podatkov, rezultate pa sortiraš po diff naraščujoče, odčitaš kot v prvi vrstici.


Tole bi znala bit opcija, ko bo malo več časa se bom probal to lotit, pa tole bi potem avtomatsko izbralo ustrezno vrednost kota?

Zgodovina sprememb…

  • spremenilo: Vanadium ()

reeves ::

Mogoče jaz kaj ne razumem, ampak v I32 mora biti formula, ki je odvisna od D32.

Zakaj v I32 ne napišeš =N12, formulo pa preoblikuješ in vstaviš v D32?

Vanadium ::

 formule

formule



Evo tuki so formule pa obrni jih če se ti jih da, znan je pa premer, padec in Q. Ostalo so pa potem neznanke :D

Vanadium ::

Bom pa še podal eno vprašanje ali obstaja kje na internetu aplikacija da vneseš notri enačbo in ti sam obrne če iščeš določeni člen? Neki kot npr wolfram alpha, ki ti reši zadeve...

Zgodovina sprememb…

  • spremenilo: Vanadium ()

reeves ::

Vanadium je izjavil:


Evo tuki so formule pa obrni jih če se ti jih da, znan je pa premer, padec in Q. Ostalo so pa potem neznanke :D

Glede na tabelo si že vse sam izračunal. Treba je obrniti formulo v Excelu.

Katero formulo imaš zapisano v Excelu v celici I32?

Ko v D32 ročno spreminjaš vrednosti, se ti v I32 spreminjajo same od sebe. In to počneš dokler se ti vrednost v I32 ne ujema z N12, če jaz prav razumem.

To pomeni, da v celici I32 MORA biti neka formula oz. pogoj, ki je odvisen od vrednosti v D32.
Katera je ta formula oz. pogoj?

kljuka13 ::

Vanadium, s katero oznako je v tvojih formulah označen padec? Katero količino pa označuje I? Na prvi pogled formul zelo verjetno ne bo mogoče eksaktno obrniti (prisotni so namreč mešani členi oblike sin(x) in sin(x)^(2/3)), lahko pa poskusimo s kakšnim približkom ali razvojem. V vsakem primeru pa lahko uporabiš - kot so že svetovali - Excelovo vgrajeno orodje za numerično reševanje enačb (Iskanje cilja).

Vanadium ::

ČE se želi še kdo malo poigrat link do tabelice:

https://mega.nz/folder/TctwEZ6A#3ylL1_J...

Do sedaj smo prišli do zaključka, da se da zaenkrat samo z reševalnikom avtomatizirat. Dam za 6 pack pira če komu uspe obrnit formulo tako da deluje :D.

kljuka13 ::

Kot sem že omenil, formule se pač žal ne da eksplicitno obrniti.

Če ne maraš vgrajenega Reševalnika, si lahko napišeš svoj numerični reševalnik v VBA, ki bo tvojo rešitev poiskal numerično z bisekcijo. Primer:

Function Q(theta, D, I, ng)
    R = (D / 4) * (1 - Sin(theta) / theta)
    S = Application.WorksheetFunction.Power(D, 2) * (theta - Sin(theta)) / 8    
    Q = (1000 / ng) * Application.WorksheetFunction.Power(R, 2 / 3) * Application.WorksheetFunction.Power(I, 1 / 2) * S
End Function

Function NajdiKot(Q0, D, I, ng) As Double
    Dim xm As Double
    Dim fxp As Double, fxk As Double, fxm As Double, eps As Double, xp As Double, xk As Double
    
    D = D / 1000
    I = I / 1000
    
    xp = 0.001
    xk = 3
    
    j = 0
    
    Do
        xm = (xp + xk) / 2
        
        fxp = Q(xp, D, I, ng) - Q0
        fxk = Q(xk, D, I, ng) - Q0
        fxm = Q(xm, D, I, ng) - Q0
        
        If fxp * fxm < 0 Then
            xk = xm
        Else
            xp = xm
        End If
        
        j = j + 1
    Loop Until Abs(xp - xk) < eps Or j > 100
    
    NajdiKot = Application.WorksheetFunction.Degrees(xm)
End Function


Funkcijo nato pokličeš v zvezku kot =NajdiKot(Q, D, I, ng)

mirator ::

No, tole pa je konkretna in elegantna rešitev. Jaz sem sicer predlagal tangentno metodo s katero rešujem podobne probleme.

Vanadium ::

Pa tole potem deluje tut pri kopiranju tabele na druge računalnike? Je ta VBA potem fizično v xslx datoteki kot del tabele?

kljuka13 ::

Da. Datoteko je treba shraniti kot Excelovo datoteko z makri (.xlsm) in potem deluje tudi na drugem računalniku.

prtenjam ::

Moram priznati, da tudi jaz ne razumem v celoti te tematike in ne vem kako naj bi z ročnim spreminjanjem vrednosti celice dobili rezultat, če pa računalnik spreminja vrednost te iste celice (iskanje cilja) pa ni rezultata???

No kakorkoli :)! Očitno gre za preračune in v teh primerih se optimizacija programa pozna. V VBA kodi je dobro, da se znebimo VSH zunanjih klicev, saj so počasni in Excel mora preklapljati med VBA in "internimi" Excelovimi funkcijami. VBA (oz. BASIC) pozna POWER operator in to je ^. Namesto Application.WorksheetFunction.Power(j, i) lahko torej uporabimo ^, kar je nekje 15x hitrejše:

#If Win64 Then
  Declare PtrSafe Function GetTickCount Lib "kernel32" Alias "GetTickCount64" () As LongLong
#Else
  Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
#End If

Sub test()
  Dim i, j, k, l, result, timer
  
  timer = GetTickCount
  
  For i = 1 To 100
    For j = 1 To 1000 Step 2.17
      For l = 1 To 100
        k = j ^ i
      Next
    Next
  Next
  
  result = GetTickCount - timer
  Debug.Print "^", result
  
  timer = GetTickCount
  
  For i = 1 To 100
    For j = 1 To 1000 Step 2.17
      For l = 1 To 100
        k = Application.WorksheetFunction.Power(j, i)
      Next
    Next
  Next
  
  result = GetTickCount - timer
  Debug.Print "Application.WorksheetFunction.Power", result
End Sub


Namesto Degrees funkcije pa se lahko napiše lasta funkcija (ampak v konkretnem primeru se ta tako ali tako kliče le 1x in verjetno ni neke pridobitve)

Function radians_to_degrees(radians as Double) as Double 
  radians_to_degrees = radians * (180 / WorksheetFunction.Pi)
End Function


PS: kljuka13, seveda pa kode nikakor ne grajam... le mojih 5 sekund, ki lahko koga še kaj naučijo ;)
Matjaž Prtenjak
https://mnet.si

Vanadium ::

Hvala vsem za pomoč, moram si malo cajta vzet pa pogledat kaj ste spisali tole v "šifrah" :D. Je pa tako da v prvem delu tabele pač preračunaš po standardu količine odpadnih voda, v drugem delu pa po Manningu računaš polnitve cevi in to pač s poizkušanjem se približuješ izračunani vrednosti iz prve tabele. Sej bi načeloma se moralo dat formule obrnit (so v pdfju na linku) samo kako je pa vprašanje za matematike. Men že znanje pri teh VBA odpove in upam, da jih bom sploh znal implementirat v svojo tabelo ;((.

kljuka13 ::

@prtenjam, če prav razumem Vanadiuma, on ne želi ročno odpirati Reševalnika in ustrezno nastavljati parametrov vsakič znova, temveč bi rad to rešil kar z Excelovo formulo. Kar zadeva pa potenciranja: meni operator ^ ne deluje - bojda je to pogost problem na 64-bitnih sistemih, zato sem se tudi zatekel k zunanjemu klicu za power.

@Vanadium, ti bom poskusil povedati še četrtič: tvoje formule se žal ne da eksplicitno obrniti - ne glede na to, kateremu matematiku boš dal problem za reševati :) Ne da se namreč vsake enačbe obrniti tako, da bi rešitev bila "preprosta" (elementarna) funkcija. Kot enostaven primer si lahko zamisliš funkcijo y = sin(x) + x, iz katere želiš izraziti x. Tega se enostavno ne da narediti tako, da bi dobil ven lep, "preprost" izraz (=elementarno funkcijo). Tvoj izraz je oblike Q = (t - sin(t)/t)(1 - sin(t)/t)^(2/3) in se ga - tako kot moj prejšnji primer - pač ne da eksplicitno obrniti, da bi izrazil t.

Zgodovina sprememb…

  • spremenil: kljuka13 ()

prtenjam ::

kljuka13 je izjavil:

@Kar zadeva pa potenciranja: meni operator ^ ne deluje - bojda je to pogost problem na 64-bitnih sistemih, zato sem se tudi zatekel k zunanjemu klicu za power.

O ti bogca, tega pa nisem vedel. Nisem še nikoli naletel na tovrstne zadeve in si sploh ne predstavljam kako je to možno :(

To torej pomeni, da nek moj makro, ki uporablja operator ^, na neki X mašini sploh nebi deloval. Hm....

Pa 64bitni Office tudi uporabljam odkar je zunaj in na kaj podobnega še nisem naletel; je sicer res da ta operator tudi ne uporabljam :):). No vseeno pa mi včerajšnji makro deluje na vseh mojih 64 bitnih računalnikih.
Matjaž Prtenjak
https://mnet.si

Zgodovina sprememb…

  • spremenil: prtenjam ()

reeves ::

Kot so že ostali ugotovili, se formule ne da kar tako obrniti.

Osebno bi uporabil VBA, samo ne bi nič kaj kompliciral:

Sub test1()
Range("I31").GoalSeek Goal:=Range("N12"), ChangingCell:=Range("D31")
End Sub


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Excel obfuscation

Oddelek: Programska oprema
141951 (1646) SeMiNeSanja
»

kako v excelu avtomatsko obarvati celice

Oddelek: Programska oprema
104133 (3906) smetko
»

excell razvrščanje

Oddelek: Programska oprema
214053 (3697) rferrari
»

Delphi - kako prepreči prečiti več zaporednih klikov gumba

Oddelek: Programiranje
51116 (1039) LoneWolf
»

[VB6] Program Odštevalnik - verjetno preprosta rešitev ampak jest je ne najdem (strani: 1 2 )

Oddelek: Programiranje
515208 (4682) Nerdor

Več podobnih tem