Solu muotoilu jos luku muuttuu + tai -

Moi. Mitenköhän solun värin saisi muuttumaan mikäli solussa oleva luku pienenee tai suurenee? Eli samalla tavalla kuin esim kauppalehden sivuilla jos kurssi laskee niin väri olisi punainen. Koitin ehdollista muotoilua mutta siinä pitää kai olla tietty luku mihin se vertaa kun taas haussa olis että väri muuttuu jos luku kasvaa tai pienenee. Eli siis kurssin mukaan.
131964
Äänestä

Muut lukivat myös

Vastaukset 13

Vanhimmat

Tuohon ei tarvitse muuta kuin solun muotoilussa, kohdassa "Luku" valitsee kohdan "negatiiviset punaisella", etumerkillä tai ilman.

Äänestä

No tässä taas GIF animaatio, joka asettaa taulukon luvun esitystavan niin että negatiiviset luvut näytetään punaisella värillä. https://imgur.com/v0gX3wZ
Kaiketi tämä on tehtävissä Excelilläkin samaan tapaan.

Äänestä
  • kannattaisi lukea kysymys uudestaan, ennenkuin postaa ihan huuhaata...
    kysyjähän haluaa luvun värin muuttuvan sen mukaan pieneneekö se vaiko kasvaa...
    ei onnaa ilman makroa

    Äänestä

taulukon moduuliin
muuta solu ja värit sopiviksi

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Static Vanha As Double
If Not Intersect(Target, Range("A1")) Is Nothing Then
If Target.Value > Vanha Then
Target.Interior.Color = vbGreen
Else
If Target.Value < Vanha Then
Target.Interior.Color = vbRed
Else
Target.Interior.Color = xlNone
End If
End If
Vanha = Target.Value
End If

End Sub

Äänestä
  • Samoilla linjoilla, laitoin vielä mahdollisuuden eräänlaiselle hystereesille, eli muuttujan "muutosraja" arvolla voi vaikuttaa kuinka pieneen muutokseen reagoidaan.

    Värejä voi muutella noiden RGB-funktioiden arvoilla.

    Dim temppi As Double
    Private Sub Worksheet_Change(ByVal target As Range)
    Dim muutosraja As Double: muutosraja = 0.05
    If IsNumeric(target) Then
    ' positiiviset arvot
    If target.Value - temppi > muutosraja Then
    target.Font.Color = RGB(0, 0, 0)
    target.Interior.Color = RGB(0, 255, 0)
    ' negatiiviset arvot
    ElseIf target.Value - temppi < -muutosraja Then
    target.Font.Color = RGB(255, 255, 255)
    target.Interior.Color = RGB(255, 0, 0)
    ' muutoin
    Else
    target.Font.Color = RGB(0, 0, 0)
    target.Interior.ColorIndex = xlNone
    End If
    temppi = target.Value
    Else
    ' jos solussa ei lukuarvo
    target.Font.Color = RGB(0, 0, 0)
    target.Interior.ColorIndex = xlNone
    End If
    End Sub

    Äänestä

  • ei toimi noin oikein, koska ei huomoi solun vanhaa arvoa vaan viimeisen muutoksen arvon missä tahansa solussa ja vertaa siihen eikä solun oikeaan vanhaan arvoon...
    el

    Äänestä

  • Kundepuu kirjoitti:

    ei toimi noin oikein, koska ei huomoi solun vanhaa arvoa vaan viimeisen muutoksen arvon missä tahansa solussa ja vertaa siihen eikä solun oikeaan vanhaan arvoon...
    el

    Heh, olet oikeassa. Olisi kannattanut testata useammalla solulla. Pitää viilata Intersect mukaan. Katson samalla saisiko siihen ympättyä muutaman sekunnin vilkkumisen, jolloin olisi hieman visuaalisempi.

    Äänestä

Tämä muuttaa alueella alue olevan solun väriä, kun sen arvoa muutetaan.
Väri ei muutu, jos arvo muuttuu jonkin muun solun arvon muuttuessa (solussa on kaava).

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim uusi
    Dim kaava As String
    Dim alue As Range

On Error GoTo err:
    Set alue = Range("A1:B5")
    If Not Intersect(alue, Target) Is Nothing Then
        uusi = Target.Value
        kaava = Target.Formula
        Application.EnableEvents = False
        Application.Undo ' katsotaan vanha arvo
        If Target.Value > uusi Then
            Target.Interior.Color = vbRed
        ElseIf Target.Value < uusi Then
            Target.Interior.Color = vbGreen
        Else
            Target.Interior.Color = xlNone
        End If
        Target.Formula = kaava
    End If
err:
    Application.EnableEvents = True
End Sub

Äänestä

Mihin tollaset systeemit laitetaan, johonkin macroon vai? Ei oo tullu koskaan käytettyä..

Äänestä

Kopioi toi kaava, Excelissä sitten klikkaa alhaalta taulukonvalitsinta (esim. Taul1) hiiren oikealla ja valitse "Näytä koodi". VBA editor avautuu. Liitä kopioimasi makro siihen avautuvaan ikkunaan ja sulje Editori.
Huomaa makrosta että toiminto "pelaa" vain alueella A1:B5. Muuta aluetta jos tarvis.

Äänestä

Siis jos tarkkoja ollaan, niin toi alku piti olla "Kopioi toi makro".
Sivullinen3 kiittää "Tämmöistä" . Makro pelaa hyvin. Sille löytyy varmasti käyttöä.

Äänestä

Kiitoksia kaikille, nyt toimii :)

Äänestä

Kommentoi aloitusta


Pötkötin kirjoitti:

Moi. Mitenköhän solun värin saisi muuttumaan mikäli solussa oleva luku pienenee tai suurenee? Eli samalla tavalla kuin esim kauppalehden sivuilla jos kurssi laskee niin väri olisi punainen. Koitin ehdollista muotoilua mutta siinä pitää kai olla tietty luku mihin se vertaa kun taas haussa olis että väri muuttuu jos luku kasvaa tai pienenee. Eli siis kurssin mukaan.

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