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ä
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.
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
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
Kiitos vastauksesta
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.