Voisiko joku vba:n hallitsija kirjoittaa seuraavan ehdon mukaisen kaavan;
Jos sarakkeessa C on tekstinä *halpa* (eli myös silloin kun sana on vain tuo halpa tai tuo halpa on osana jotain sanakokonaisuutta, kuten vaikka halpa-halli) niin kaava etsisi sarakkeista D-T siihen kohdistuvan summan. Jos D-T sarakkeissa on useammassa summa joka on samalla rivillä, niin nuo summat tulisi vielä laskea yhteen. Siis haluaisin nimenomaan vba:na nuo ehdot täyttävän lausekkeen.
Jos sarakkeessa C on tekstinä *halpa* (eli myös silloin kun sana on vain tuo halpa tai tuo halpa on osana jotain sanakokonaisuutta, kuten vaikka halpa-halli) niin kaava etsisi sarakkeista D-T siihen kohdistuvan summan. Jos D-T sarakkeissa on useammassa summa joka on samalla rivillä, niin nuo summat tulisi vielä laskea yhteen. Siis haluaisin nimenomaan vba:na nuo ehdot täyttävän lausekkeen.
Vastaukset 3
Vanhimmat
Ilman VBA:ia:
=IF(ISNUMBER(SEARCH("halpa";C2));SUM(D2:T2);"")
VBA-koodi:
Function halpa(h As String, r As Range)
On Error GoTo err
If WorksheetFunction.Search("halpa", h) 0 Then
halpa = WorksheetFunction.Sum(r)
End If
Exit Function
err:
halpa = ""
End Function
Funktion kutsu:
=halpa(C2;D2:T2)
Miksihän tämä ei enää toimikaan. Tuo ylläoleva toimii kun tiedot ovat vain rivillä 2. Jos yritän laajentaa hakua, kuten alla riviväleille 2-10, niin ei enää toimikaan.
=JOS(ONLUKU(ETSI("halpa";C2:C10));SUMMA(D2:T10);"")
Yritin laittaa tuon vban moduuliin, muttei toimi. Johtuuko siitä että mulla on suomenkielinen excel ?
Ymmärsin tehtävän väärin. Tässä on koodi, joka laskee yhteissumman koko alueelta:
Function halpa(r)
sarakkeet = r.Columns.Count
rivit = r.Rows.Count
For i = 1 To rivit
If InStr(r(i, 1).Text, "halpa") > 0 Then
For j = 2 To sarakkeet
result = result r(i, j)
Next
End If
Next
halpa = result
End Function
Esimerkki kutsusta:
=halpa(C2:T8)
En tiedä, olisiko Officessa jokin mahdollisuus käyttää standardi-VBA:a kökköjen kieliversioiden sijaan. LibreOfficessa vaihto ainakin taulukkofunktioiden osalta onnistuu.