Avatar billede Henrik_B Praktikant
15. januar 2009 - 11:55 Der er 9 kommentarer og
1 løsning

Cond formattering med formel og værdi blandet

Hejsa.

Jeg er ved at lave et script til Excel 2000. En celle skal formatteres conditional således at hvis det er større end cellen ved siden af, så skal det være grønt, hvis det er mindre end cellen ved siden af, så skal det være rødt, og hvis det selv indeholder en streng med en bindestreg (-), så skal det være gul baggrund. Jeg kan godt lave rød og grøn, men kan ikke lige få formlen til at passe.

Eks: a1 = 3, b1 = 0, a1 skal være grøn
    a1 = 3, b1 = 6, a1 skal være rød
    a1 = 3-3, b1 = (ukendt), a1 skal være gul

Kan nogen hjælpe med et VB-skript til at klare det ?

På forhånd tak.
Henrik.
Avatar billede jkrons Professor
15. januar 2009 - 12:26 #1
Prøv med

    If Selection.Value > Selection.Offset(0, 1) Then
        Selection.Interior.ColorIndex = 4
    ElseIf Selection.Value < Selection.Offset(0, 1) Then
        Selection.Interior.ColorIndex = 3
    ElseIf InStr(Selection.Value, "-") <> 0 Then
    Selection.Interior.ColorIndex = 4
Avatar billede jkrons Professor
15. januar 2009 - 12:27 #2
Placer markøren i den celle, der skal testes inden du afspiller. Og så skal det sidste tal være 6, ikke 4.
Sub BetForm()
    If Selection.Value > Selection.Offset(0, 1) Then
        Selection.Interior.ColorIndex = 4
    ElseIf Selection.Value < Selection.Offset(0, 1) Then
        Selection.Interior.ColorIndex = 3
    ElseIf InStr(Selection.Value, "-") <> 0 Then
    Selection.Interior.ColorIndex = 6
End If

End Sub
Avatar billede jkrons Professor
15. januar 2009 - 13:51 #3
I virkeligheden skal der nok lidt mere på, for at "afformatere" igen, hvis ingen af betingelserne er opfyldt, men lige ovenstående først.
Avatar billede Henrik_B Praktikant
15. januar 2009 - 15:10 #4
Problemet er at jeg benytter ooRexx til at danne mine formler i regnearket. Det er det samme som at bygge et VB-script. Kaldene ser bare lidt anderledes ud.

Det jeg søger er et script til at oprette en conditional format-betingelse, som går på om feltet indeholder en bindestreg eller ikke. Jeg skal altså kunne sætte min conditional format fra mit VB-script, men regnearket skal være uafhængigt af scriptet, når først scriptet virker. Scriptet skal køre een gang, og ikke mere. Når det er kørt, virker regnearket som det skal, og uden scripts.

Jeg skal lave individuelle formler og formater for over 500 felter i flere forskellige ark, så derfor denne approach. I det færdige ark er der ingen scripts, der kører, det hele er sat ved hjælp af funktioner, herunder betingede formattering.
Avatar billede Henrik_B Praktikant
15. januar 2009 - 15:12 #5
Og problemet ligger først og fremmest i at få den rigtige formel lavet. Når jeg kender den, kan jeg bare lave en makro, så kender jeg jo det, der skal ind i min Rexx.
Avatar billede jkrons Professor
15. januar 2009 - 18:43 #6
Du skal oprette tre betingelser på cellen. Den første skal være Celleværdig er lig med "-"  Her er formateringen gul.
Den næste er Formlen er =a1>b1  Her er formateringen Grøn.
Den sidste er Formlen er =a1<b1 HEr er formateringen Rød.

I VBA ville det se således ud:

    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
        Formula1:="=""-"""
    Selection.FormatConditions(1).Interior.ColorIndex = 6
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=F3>G3"
    Selection.FormatConditions(2).Interior.ColorIndex = 4
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=F3<G3"
    Selection.FormatConditions(3).Interior.ColorIndex = 3
Avatar billede jkrons Professor
15. januar 2009 - 18:43 #7
Og så skal det selvfølgelig rettes til A1 og B1.
Avatar billede Henrik_B Praktikant
16. januar 2009 - 17:52 #8
Lige en ting mere, der kræver uddybning.
Cellen indeholder enten en streng, hvoraf eet af tegnene er en bindestreg. Ellers indeholder det et tal, som skal sammenlignes med tallet i en anden celle. Det indeholder altså ikke kun en bindestreg, men f.eks. strengen 7-5.

Det er den condition, der skal sættes op, for at fange bindestregen, jeg har svært ved at sætte rigtigt op i Excel. Det andet har jeg løst, på samme måde som jkrons beskriver ovenfor. Når jeg kan det i ordinær Excel, kan jeg nemt få lavet det til VBA, ved at optage en makro.
Avatar billede jkrons Professor
18. januar 2009 - 17:21 #9
Prøv med

=IKKE(ER.FEJL(FIND("-";A1)))
Avatar billede Henrik_B Praktikant
18. august 2010 - 19:29 #10
Lukkes
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester