Ehdollinen laskenta

Käytössä xp pro excel 2003.
Yritän tehdä makroa joka laskee solun arvon mukaan kaavalla.
Negatiivisellä arvolla G$7-ko.solun arvo-I$1.
Positiivisellä arvolla G$7 ko.solun arvo I$1.
Nolla-arvolla G$7.
Alla kokeilun tulos (eipä toimi..):

Sub koe()
Dim Lähdealue2 As Range
Dim vika2 As Integer


vika2 = Range("D65536").End(xlUp).Row
Set Lähdealue2 = Range("D5:D" & vika2)
Range("K5").Select

For i = 1 To Lähdealue2.Count
ActiveCell = Lähdealue2(i)

If ActiveCell.Value = "" Then
ActiveCell.FormulaR1C1 = "=R[2]C[-4] RC[-7]"
If ActiveCell.Value > "0" Then
ActiveCell.FormulaR1C1 = "=R[2]C[-4]"
If ActiveCell.Value < "0" Then
ActiveCell.FormulaR1C1 = "=R7C[-4]-RC[-7]-R1C[-2]"
ActiveCell.Offset(1, 0).Select
End If
End If
End If

Next

Range("A1").Select

End Sub

Oliskohan kenelläkään vinkkiä asiaan?
12904
Äänestä

Muut lukivat myös

Vastaukset 12

Vanhimmat

Ainakin lainausmerkit pois nollan ympäriltä.

Äänestä
  • Otin lainausmerkit pois, eipä auttanut.
    Tulos tuli vain K5 soluun (ja sekin väärin).

    Olisiko lisää ehdotuksia, kaikki vinkit otetaan kiitollisuudella vastaan.

    Äänestä

  • \\kyselee apuja kirjoitti:

    Otin lainausmerkit pois, eipä auttanut.
    Tulos tuli vain K5 soluun (ja sekin väärin).

    Olisiko lisää ehdotuksia, kaikki vinkit otetaan kiitollisuudella vastaan.

    Pari elseä lisää: Else If ActiveCell
    Toinen ongelma on, että kaava sijoitetaan samaan soluun, jossa on luku ennestään.

    Äänestä

  • ... kirjoitti:

    Pari elseä lisää: Else If ActiveCell
    Toinen ongelma on, että kaava sijoitetaan samaan soluun, jossa on luku ennestään.

    Lähtötiedot ovat solusta D5 alaspäin, tulokset laskennasta haluaisin solusta K5 alaspäin. Ennen laskentaa solu ompi tyhjä.

    Äänestä

  • \\kyselee apuja kirjoitti:

    Lähtötiedot ovat solusta D5 alaspäin, tulokset laskennasta haluaisin solusta K5 alaspäin. Ennen laskentaa solu ompi tyhjä.

    For Each solu In Lähdealue2
    arvo = solu.Value

    If arvo = 0 Then
    ActiveCell.FormulaR1C1 = "=R[2]C[-4] RC[-7]"
    Else If arvo > 0 Then
    ActiveCell.FormulaR1C1 = "=R[2]C[-4]"
    Else If arvo < 0 Then
    ActiveCell.FormulaR1C1 = "=R7C[-4]-RC[-7]-R1C[-2]"
    End If
    End If
    End If
    ActiveCell.Offset(1, 0).Select
    Next
    ?

    Äänestä

  • ... kirjoitti:

    For Each solu In Lähdealue2
    arvo = solu.Value

    If arvo = 0 Then
    ActiveCell.FormulaR1C1 = "=R[2]C[-4] RC[-7]"
    Else If arvo > 0 Then
    ActiveCell.FormulaR1C1 = "=R[2]C[-4]"
    Else If arvo < 0 Then
    ActiveCell.FormulaR1C1 = "=R7C[-4]-RC[-7]-R1C[-2]"
    End If
    End If
    End If
    ActiveCell.Offset(1, 0).Select
    Next
    ?

    tulipa compile error for without next.

    hmm..ei tämä ollutkaaan helppoa...mitähän seuraavaksi....netistä yrittänyt apua löytää, ilman mainittavaa menestystä..

    Äänestä

  • \\kyselee apuja kirjoitti:

    tulipa compile error for without next.

    hmm..ei tämä ollutkaaan helppoa...mitähän seuraavaksi....netistä yrittänyt apua löytää, ilman mainittavaa menestystä..

    kyllä se siitä treenaamalla...

    Sub koe()
    Dim Lähdealue2 As Range
    Dim vika2 As Integer

    vika2 = Range("D65536").End(xlUp).Row
    Set Lähdealue2 = Range("D5:D" & vika2)
    For Each solu In Lähdealue2
    Select Case solu
    Case Is > 0
    solu.Offset(0, 7) = Val(Range("G7")) Val(solu) Val(Range("I1"))
    Case Is < 0
    solu.Offset(0, 7) = Val(Range("G7")) - Val(solu) - Val(Range("I1"))
    Case 0
    solu.Offset(0, 7) = Val(Range("G7"))
    End Select
    Next
    End Sub

    Äänestä

  • kunde kirjoitti:

    kyllä se siitä treenaamalla...

    Sub koe()
    Dim Lähdealue2 As Range
    Dim vika2 As Integer

    vika2 = Range("D65536").End(xlUp).Row
    Set Lähdealue2 = Range("D5:D" & vika2)
    For Each solu In Lähdealue2
    Select Case solu
    Case Is > 0
    solu.Offset(0, 7) = Val(Range("G7")) Val(solu) Val(Range("I1"))
    Case Is < 0
    solu.Offset(0, 7) = Val(Range("G7")) - Val(solu) - Val(Range("I1"))
    Case 0
    solu.Offset(0, 7) = Val(Range("G7"))
    End Select
    Next
    End Sub

    Kokeilenpa huomenna, kun saan widoosakoneen taas käsiini.

    Kiitän makrosta jo etukäteen.

    Kunde, muistaakseni avaat omat excel-sivut jossain vaiheessa?

    Äänestä

  • \\kyselee apuja kirjoitti:

    Kokeilenpa huomenna, kun saan widoosakoneen taas käsiini.

    Kiitän makrosta jo etukäteen.

    Kunde, muistaakseni avaat omat excel-sivut jossain vaiheessa?

    joo kyllä Kunden portaali aukeaa virallisestikin kevään aikana. Varmuuskopiot serveriltä vaan menivät "vituiksi" ja joudun manuaalisesti tekeen juttuja uusiksi. Portaaliin tulee aluksi osiot CAD/CAM/CNC, EXCEL(myöhemmin muut officejutskat) ja MATKAILU lähinnä nyt THAIMAA (Khorat ja Pattaya). Varsinkin CAD/CAM/CNC osaajat voisivat lähettää mulle mailia [email protected]

    KEEP EXCELING
    Kunde

    Äänestä

  • kunde kirjoitti:

    joo kyllä Kunden portaali aukeaa virallisestikin kevään aikana. Varmuuskopiot serveriltä vaan menivät "vituiksi" ja joudun manuaalisesti tekeen juttuja uusiksi. Portaaliin tulee aluksi osiot CAD/CAM/CNC, EXCEL(myöhemmin muut officejutskat) ja MATKAILU lähinnä nyt THAIMAA (Khorat ja Pattaya). Varsinkin CAD/CAM/CNC osaajat voisivat lähettää mulle mailia [email protected]

    KEEP EXCELING
    Kunde

    Kerro sitten tarkemmin kun saat portaalin auki, kiitos.

    Makrosta vielä:
    D6 0.03 G7 236.02 I1 9.44 tulokseksi antaa (K5) 236.00

    Olisiko mahdollista saa desimaaleja mukaan?

    Äänestä

  • \\kyselee apuja kirjoitti:

    Kerro sitten tarkemmin kun saat portaalin auki, kiitos.

    Makrosta vielä:
    D6 0.03 G7 236.02 I1 9.44 tulokseksi antaa (K5) 236.00

    Olisiko mahdollista saa desimaaleja mukaan?

    nyt desimaalitkin mukana ;-)

    Sub koe()
    Dim Lähdealue2 As Range
    Dim vika2 As Integer

    vika2 = Range("D65536").End(xlUp).Row
    Set Lähdealue2 = Range("D5:D" & vika2)
    For Each solu In Lähdealue2
    Select Case solu
    Case Is > 0
    solu.Offset(0, 7) = CDbl(Range("G7")) CDbl(solu) CDbl(Range("I1"))
    Case Is < 0
    solu.Offset(0, 7) = CDbl(Range("G7")) - CDbl(solu) - CDbl(Range("I1"))
    Case 0
    solu.Offset(0, 7) = CDbl(Range("G7"))
    End Select
    Next
    End Sub

    Äänestä

  • kunde kirjoitti:

    nyt desimaalitkin mukana ;-)

    Sub koe()
    Dim Lähdealue2 As Range
    Dim vika2 As Integer

    vika2 = Range("D65536").End(xlUp).Row
    Set Lähdealue2 = Range("D5:D" & vika2)
    For Each solu In Lähdealue2
    Select Case solu
    Case Is > 0
    solu.Offset(0, 7) = CDbl(Range("G7")) CDbl(solu) CDbl(Range("I1"))
    Case Is < 0
    solu.Offset(0, 7) = CDbl(Range("G7")) - CDbl(solu) - CDbl(Range("I1"))
    Case 0
    solu.Offset(0, 7) = CDbl(Range("G7"))
    End Select
    Next
    End Sub

    Toimii hienosti, eikä ole mitään anteeksipyydettävää vapaaehtoisesta avusta.

    Äänestä

Kommentoi aloitusta


\\kyselee apuja kirjoitti:

Käytössä xp pro excel 2003.
Yritän tehdä makroa joka laskee solun arvon mukaan kaavalla.
Negatiivisellä arvolla G$7-ko.solun arvo-I$1.
Positiivisellä arvolla G$7 ko.solun arvo I$1.
Nolla-arvolla G$7.
Alla kokeilun tulos (eipä toimi..):

Sub koe()
Dim Lähdealue2 As Range
Dim vika2 As Integer


vika2 = Range("D65536").End(xlUp).Row
Set Lähdealue2 = Range("D5:D" & vika2)
Range("K5").Select

For i = 1 To Lähdealue2.Count
ActiveCell = Lähdealue2(i)

If ActiveCell.Value = "" Then
ActiveCell.FormulaR1C1 = "=R[2]C[-4] RC[-7]"
If ActiveCell.Value > "0" Then
ActiveCell.FormulaR1C1 = "=R[2]C[-4]"
If ActiveCell.Value < "0" Then
ActiveCell.FormulaR1C1 = "=R7C[-4]-RC[-7]-R1C[-2]"
ActiveCell.Offset(1, 0).Select
End If
End If
End If

Next

Range("A1").Select

End Sub

Oliskohan kenelläkään vinkkiä asiaan?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu