Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Range select

Sivun loppuun

Hopo [29.01.2010 21:31:30]

#

"Summa"-alueesta läpikäydään Excelissä solut ja ne joissa on sisältöä pitäisi saada valittua summafunktioon.
Alla olevalla virityksellä saan muita tapahtumia aikaan mutta kuinka kyseiset solut saa valittua summafunktioon?

Private Sub CommandButton5_Click()
Const a As Integer = 0
For Each x In Range("Summa").Cells
If x.Value <> a Then
x.????????????????
End If
Next x
End Sub

Mod. lisäsi kooditagit

Grez [29.01.2010 21:40:03]

#

Tyhmä kysymys, mutta eikö tulos olisi ihan sama, vaikka nollat ottaisi mukaan summaan?

Sitten toinen tyhmä kysymys, että miksei summa.jos - funktio käy?

Eli siis =SUMMA.JOS(Summa;"<>0")

Jos nyt kuitenkin väkisin haluat tehdä summan, jolle annat ohjelmallisesti listan soluja, niin Formulaksi tulee tehdä jotain seuraavan tyylistä "=SUM(A1,B3,C3,C4,D2)"

Hopo [29.01.2010 22:13:13]

#

Kysymys ei ole summasta vaan loppuviimeksi summafunktion rangen määrityksestä. Summattavien rivien määrä vaihtelee ja summafunktion sisältävä solu pannaan kohdalleen offsetilla mutta summattavien rivien määrää ei tiedetä.
=SUMMA(Rangen solut joissa sisältöä) ja offsetillä viimeisen summattavan arvon jälkeen (esim. offset 3,0) summasolu.
Joku saattaisi keksiä tähän toisenkin ratkaisun...

Grez [29.01.2010 22:55:23]

#

Niin no järkevimpiä vastauksia on mahdoton keksiä kun ei kerrota mitä oikeasti halutaan tehdä.

Eli jos kerran ei ole kyse summafunktiosta niin sitten ilmeisesti on kyse jostain muusta funktiosta ja jostain syystä haluat pimittää mistä funktiosta on kyse eli mitä olet oikeasti tekemässä.

Noilla lähtökohdilla et varmasti tule saamaan parasta ratkaisua.

Hopo [29.01.2010 23:15:14]

#

Tarkoitukseni ei todellakaan ole pimittää tietoa.
Summafunktioon on tarkoitus saada summafunktion kaipaama alue(Range) josta summa muodostetaan. Koska summafunktion sisältävä solu sijoittuisi offsetilla 3 riviä alemmas kuin viimeinen summattava solu, pitäisi summattavien rivien määrä saada selvitettyä jotta valittavien solujen alue saataisi selville.
Summattavien rivien määrää ei todellakaan tiedetä ennakkoon.
"Summa"-alue on yhdessä sarakkeessa.
Miten saataisi aiemmassa VB:ssä solut, joissa on sisältöä (x), valittua...(?????????)
Toivon osanneeni selvittää asian...

Grez [29.01.2010 23:29:55]

#

No, kuten jo aikaisemmin kirjoitin, että jos tosiaan haluat VB:llä valita tietyt solut summafunktiolle, niin teet vaan koodin, joka tuottaa sopivan summafunktion sisältävän formulan siihen soluun. Eli jos siellä suomeksi pitäisi lukea =SUMMA(A1;B3;C2:D8) niin sitten ohjelmallisesti laitat sinne formulaksi =SUM(A1,B3,C2:D8)

Siis tuo on esimerkki, osannet soveltaa sitä omaan tilanteeseesi.

Toisaalta jos tarkoitus on tehdä näyttämäsi koodin mukaan, että summaan otetaan mukaan sellaiset solut, joissa arvo on muu kuin tietty vakio, niin en edelleenkään ymmärrä mikset käytä summa.jos -funktiota, kun se on juuri siihen tarkoitettu.

Hopo [29.01.2010 23:38:41]

#

Ei tiedetä onko =SUMMA(F5:F12) vai =SUMMA(F5:F75).
Olennainen: miten määrittää solut, jotka täytävät ehdon (solu ei ole tyhjä) valittavaksi (select). Arvo ei ole vakio!
x.Select ei sovellu... Mitä muuta???

Grez [30.01.2010 11:57:03]

#

No siis sitähän sä siinä VB-koodissa käsittääkseni olit tekemässä. Selvittämässä niitä soluja.

Jos se koodi selvittää, että esimerkiksi solut F5:F12 pitää ottaa mukaan niin silloin sen koodin pitäisi muodostaa esimerkiksi formula =SUM(F5:F12)

Hopo [30.01.2010 14:51:19]

#

Olennainen:
Koodin 5. rivi,

x._____.Select

Mitä puuttuu välistä ? Cells ei toimi...
Tarkoitus saada haettu alue valituksi/aktiiviseksi summafunktiota varten.
SUMMA.JOS sekoaa koska summafunktio asetetaan "Summa"-alueelle.
En varmaankaan yritä hommaa helpoimman kautta mutta aloittelijan täytyy lähes kaikkea kokeilla.
Kiitos tähänastisesta kärsivällisyydestä.

Grez [30.01.2010 15:03:32]

#

En kyllä yhtään käsitä miksi haluat tehdä valintoja (.Select), mutta voit laittaa alkuperäiseen koodiisi riville 5: x.Select

Tällöin se jokaisella loopissa käyntikerralla valitsee sen yhden solun.

Mutta jotenkin minusta tuntuu että sinulla ei ole ihan perusjutut excelistä nyt hallussa. Kokeile laittaa päälle makron nauhoitus, tee ihan taulukon puolella käsin se, mitä haluat ohjelmasi tekevän, ja katso minkälaista koodia makroon tulee.

Hopo [30.01.2010 16:06:02]

#

Kiitos tästä, täytynee koettaa keksiä jotakin muuta...

Grez [30.01.2010 16:36:16]

#

Ai niin, ei minulla tuo summa.jos funktio sekoillut mitenkään vaikka laitoin sen osoittamaan Summa nimiselle alueelle.

Ja en nyt ymmärrä tuotakaan miksi pitäisi keksiä jotain muuta, teet vaan niin kuin olen tässä pariin kertaan neuvonut (jos siis tuo summa.jos ei tosiaan kelpaa)

Hopo [30.01.2010 23:26:55]

#

Laitahan "Summa"-alueelle summafunktio soluun 'viimeinen summattava offset(3,0)' eli 3 solua viimeisen summattavan alapuolelle.
Summattavia voi olla esim. 3 tai 40 tai jtn eli minulla summa-alue on sen mukaan riittävän laaja. Summa funktion sisältävä solu kopioidaan paikalleen Buttonilla.
Näkemykseni mukaisia ratkaisuvaihtoehtoja:
-rajata koodilla (nimetä) range summien lukumäärän mukaan jolloin summasolun sijainnilla ei ole väliä. Tällöin pitäisi alkuperäisen viestin mukaan saada valittua kyseinen koko summattavien alue.
-saada summasolu rajaamaan itsensä pois laskuista ettei summa tuplaannu.
Muutkin ratkaisut huomioidaan. Toivottavasti tämä selvittäisi ongelmaa.

Lainaus Greziltä "Mutta jotenkin minusta tuntuu että sinulla ei ole ihan perusjutut excelistä nyt hallussa."
Exceliä olen pyörittänyt jonkin verran työn ohessa ja harrasteena, VB:tä vähän koettanut tutustua... Aloitteleva harrastaja toki jonka ei pidä helpoimmalla tavalla edetä, kantapään kautta kivun kanssa edeten.

Grez [30.01.2010 23:54:30]

#

Minulla oli ehdotuskin tuohon ongelmaan että perusjutut ei ole hallussa, mutta et ilmeisesti noudattanut sitä(kään) ohjetta.

Eli kai sitten teen sen puolestasi:

- Laitan taulukkoon vähän lukuja (kun minulla ei ole valmiina taulukkoa kuten sinulla olisi)
- Laitan makron nauhoittumaan
- Valitsen solun johon haluan summan
- Valitsen että haluan ko. soluun summafunktion
- Valitsen solut, jotka haluan mukaan summaan
- Lopetan makron nauhoituksen

Kas näin, Excel väänsi minulle rautalangasta miten homma tehdään ohjelmallisesti.

Sub TestiMakro()
'
' TestiMakro Makro
' HoPon puolesta tehty nauhoitus
'

    Range("B11").Select
    ActiveCell.FormulaR1C1 = _
        "=SUM(R[-6]C:R[-3]C,R[-6]C[1]:R[-4]C[1],R[-5]C[2],R[-4]C[3]:R[-3]C[3])"

End Sub

Eli jos haluaisit tehdä saman niin, että ohjelma valitsee mitkä solut summaan otetaan, niin muodostat vaan ohjelmallisesti tuon kaltaisen Formulan tai suhteellisen FormulaR1C1:n (kuten olen jo neuvonutkin).

Hopo [01.02.2010 18:47:39]

#

Kiitos, Grez, sisukkaasta väännöstä.
Tässä on lopulta se mitä hain:

Private Sub CommandButton6_Click()
    Application.ScreenUpdating = False
'Hintojen valinta
    Dim Hinnat As Range
    Range("H18", Range("H65536").End(xlUp)).Select
    Selection.Name = "Hinnat"
'Funktio ynnä-soluun
    Range("AC3").Select
    Selection.Formula = "=SUM(HINNAT)"
'Kopioidaan ynnä-solu laskulle
    Application.Goto Reference:="Laskuala"
    Selection.Copy
    Range("A65536").End(xlUp).Offset(4, 0).Select
    ActiveSheet.Paste
End Sub

Kanta(-kin)päät kipeänä mutta mieli huojentunut.
Ketjun varrella oli väärinkäsityksiäkin mutta nyt on hyvä.
Jatketaan...


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta