Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Excelin kaavan muuttamien ComboBoxien mukaan

Jamro [26.10.2019 20:41:05]

#

Mikä olisi yksinkertaisin tapa Vba:lla toteuttaa seuraava laskenta

ComboBox 1, 2, 3 sisällön ja rivien A1:A25 arvoista saadun vakion perusteella lasketaan lukuarvot riveille B1:B25 seuraavasti:

ComboBox
off = 0
on = 1

A1...A25 = arvoista saatu Vakio, vakion suuruus riippuu A1...A25 arvoista

esim.

Sarake A = 2
Vakio = sarakkeen A:n lukuarvoa vastaava arvo esim. 5,98

Sarake A = 5
Vakio = sarakkeen A:n lukuarvoa vastaava arvo esim 8,63


Laskentaesimerkki:

ComboBox1 = on ComboBox2 = off ComboBox3 = off

B1...B25 = Vakio(A1...A25) * 1 * 0 * 0


ComboBox1 = on ComboBox2 = on ComboBox3 = off

B1...B25 = Vakio(A1...A25) * 1 * 1 * 0


ComboBox1 = on ComboBox2 = on ComboBox3 = 0n

B1...B25 = Vakio(A1...A25) * 1 * 1 * 1

jne. (kaikille riveille kaikilla vaihtoehdoilla)

If tai elseif lausekkeella toteutettuna ei tunnu järkevältä

Grez [26.10.2019 21:12:19]

#

Noista laskentaesimerkeistä näkyy, että jos mikä tahansa combobox on "off", niin tulos on 0 (koska mikä tahansa 0:lla kerrottuna on 0), jos taas kaikki comboboksit on "on" niin tulos on suoraan Vakio(A1...A25) (koska ykkösillä kertominen ei vaikuta tulokseen).

Ei tuohon tarvitse missään kohti VBA:ta, senkun vaan lätkii B1-sarakkeeseen kaavan ja kopioi B2..B25 sarakkeisiin. Vakio() -funktion voi toki toteuttaa VBA:lla halutessaan.

Jamro [27.10.2019 10:39:50]

#

Aivan totta, mutta jos tehdään Vba:lla, mikä olisi yksinkertaisin tapa. Vakion laskennassa on kirjoitusvirhe, pitäisi olla seuraavasti

ComboBox1 = on ComboBox2 = off ComboBox3 = off

B1...B25 = Vakio(A1...A25) * 1

ComboBox1 = on ComboBox2 = on ComboBox3 = off

B1...B25 = Vakio(A1...A25) * 2

ComboBox1 = on ComboBox2 = on ComboBox3 = 0n

B1...B25 = Vakio(A1...A25) * 3

Grez [27.10.2019 11:49:42]

#

Tässäpä täsmälleen oudon tarvekuvauksesi mukainen koodi sillä oletuksella että tuollaisia "ComboBox1 = on" tarkistuksia voisi tehdä:

Sub Toiminto()

Dim kerroin As Integer
Dim rivi as Integer

kerroin = 0
If ComboBox1 = on Then kerroin = 1
If ComboBox2 = on Then kerroin = 2
If ComboBox3 = on Then kerroin = 3

For rivi = 1 To 25
   Cells(rivi, 2).Formula = Vakio(Cells(rivi, 1).Value) * kerroin
Next

End Sub
Public Function Vakio(arvo As Double) As Double
    Vakio = (arvo * 2.65 + 12.64) / 3
End Function

Jamro [27.10.2019 18:33:40]

#

Kiitos vastauksesta

Jamro [28.10.2019 18:16:40]

#

Tarkennetaampa vielä mitä olisi tarkoitus hakea.

Lasketaan jokaiselle B-sarakkeen riville lukuarvo A-sarakkeen vastaavan rivin lukuarvon ja vakion perusteella. Sarakkeen A lukuarvot vaihtelevat 1...15 välillä ja kyseistä lukuarvoa vastaa jokin vakio.

Esim.
Solu A1 = 2, haetaan lukuarvoa 2 vastaava vakio = 5,98 (Private Const)
Solu B1 = vakio * ComboBoxien 1, 2, 3 tila (kerrotaan yhdellä, kahdella tai kolmella riippuen onko 1/0)

Solu A2 = 5, haetaan lukuarvoa 5 vastaava vakio = 8,63 (Private Const)
Solu B2 = vakio * ComboBoxien 1, 2, 3 tila (kerrotaan yhdellä, kahdella tai kolmella riippuen onko 1/0)

Solu A3 = 4, haetaan lukuarvoa 4 vastaava vakio = 7,00 (Private Const)
Solu B3 = vakio * ComboBoxien 1, 2, 3 tila (kerrotaan yhdellä, kahdella tai kolmella riippuen onko 1/0)

Jne. riville 25

Vastaus

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

Tietoa sivustosta