Avatar billede perhol Seniormester
10. december 2007 - 11:43 Der er 14 kommentarer og
1 løsning

Betinget formatering, Betingelser >4

Jeg har brug for at formatere celler hvis betingelser i en nabocelle er opfyldt.

B4:B41 skal formateres hvis betingelse i C4:C41 er opfyldt
D4:D41 skal formateres hvis betingelse i E4:E41 er opfyldt
F4:F41 skal formateres hvis betingelse i G4:G41 er opfyldt
H4:H41 skal formateres hvis betingelse i I4:I41 er opfyldt
J4:J41 skal formateres hvis betingelse i K4:K41 er opfyldt
L4:L41 skal formateres hvis betingelse i M4:M41 er opfyldt
N4:N41 skal formateres hvis betingelse i N4:N41 er opfyldt

Cellerne i alle kolonnerne er formateret med formatet Standard.
Indholdet fremtræder som en tekststreng (selv om det mest er tal)
Betingelserne er hvis indholdet i området starter med noget andet end + eller A eller B eller C skal indholdet i nabocellen formateres med overstreget font.

Jeg kender godt brugen af Formater-Betinget formatering, men her er for mange betingelser.
Hvordan laver man det i VBA?
Avatar billede jkrons Professor
10. december 2007 - 13:34 #1
Det kan nu g9odt klares med betinget formatering:

Marker B4 til B41. Indsæt følgende formel:
=OG(VENSTRE(C4;1)<>"+";VENSTRE(C4;1)<>"A";VENSTRE(C¤;1)<>"B";VENSTRE(C4;1)<>"C")

Genag for D4:D41. Ret til E4 i stedet for C4., og så fremdeles for de øvrige områder.
Avatar billede supertekst Ekspert
10. december 2007 - 13:37 #2
VBA - eksempel på 1 område:

Sub Testbetingelser()
    Set r1 = Range("C4:C41")
   
    For Each c In r1.Cells
        førstetegn = Left(c.Value, 1)
        If InStr("+ABC", førstetegn) = 0 Then
            adr = c.Address
            Range(adr).Offset(0, -1).Select
            ActiveCell.Font.Strikethrough = True
        End If
    Next
End Sub
Avatar billede kabbak Professor
10. december 2007 - 13:45 #3
Enig med Jkrons, min formel er bare

=IKKE(ELLER(VENSTRE(C4;1)="+";VENSTRE(C4;1)="A";VENSTRE(C4;1)="B";VENSTRE(C4;1)="C"))
Avatar billede perhol Seniormester
10. december 2007 - 14:25 #4
OK, her har jeg fået et problem.
Jeg glemte at fortælle at området heller ikke må være tomt.

Jeg har selv sat det ind i jkron's og kabbak's formler, og de virker - for så vidt.
Men hvis man vender tilbage og ændrer en celle der giver overstreget font i nabocellen så den ikke skal give overstreget font, bliver det ikke ændret.
Supertekst, kan ikke få din VBA til at virke. Har sat den ind i et modul og kalder den med F8 - Sub-navn. Den formaterer alle celler i kolonne B der har indhold, uanset om der står noget i kolonne C eller ej og uanset hvad der står i kolonne C
Avatar billede perhol Seniormester
10. december 2007 - 14:28 #5
supertekst, kan det tænkes at der også skal være en betingelse der angiver hvornår teksten i kolonne B skal ændres til ikke-overstreget?
Avatar billede supertekst Ekspert
10. december 2007 - 14:30 #6
-B-    -C-
b4    +xxx
b5    Axx
b6    Fxx <- overstreges
b7    Cxx
b8    Bxx
b9    Gxx <- overstreges
b10    Bxx
b11    Cxx

Testdata og resultatet efter kørsel
Avatar billede perhol Seniormester
10. december 2007 - 14:40 #7
Hvad så hvis du f.eks. derefter ændrer B5 til Fxx og B6 til Axx og kører makroen igen?
Jeg tager på arbejde nu. Får måske tid til at kigge ind igen ved 8-tiden.
Avatar billede supertekst Ekspert
10. december 2007 - 15:27 #8
Sub Testbetingelser()
    Set r1 = Range("C4:C11")
   
    For Each c In r1.Cells
        førstetegn = Left(c.Value, 1)
        adr = c.Address
        Range(adr).Offset(0, -1).Select
       
        If InStr("+ABC", førstetegn) = 0 Or førstetegn = "" Or IsEmpty(førstetegn) = True Then
            ActiveCell.Font.Strikethrough = True
        Else
            ActiveCell.Font.Strikethrough = False
        End If
    Next
End Sub
Avatar billede perhol Seniormester
10. december 2007 - 16:06 #9
Det ser interessant ud supertekst. Jeg er på arbejde og får ikke tid til at teste før i morgen.
Måske skulle den starte med at sætte formatet til normal font (uden overstregning) for området.
Arket bruges til at hente data fra et andet ark i formatet [t]:mm, lave dem om til tekstformat og afkorte dem.
Hvis din makro startede med at lave formatet til normal kunne jeg flette den ind i den makro der henter og indsætter data.
Avatar billede supertekst Ekspert
11. december 2007 - 00:04 #10
Endnu et bud:

Private Sub SætTilStandard()
    GennemLøb False
End Sub
Private Sub TestOverstregning()
    GennemLøb True
End Sub
Private Sub GennemLøb(opgave As Boolean)
    udfør "C4:C41", opgave
    udfør "E4:E41", opgave
    udfør "G4:G41", opgave
    udfør "I4:I41", opgave
    udfør "K4:K41", opgave
    udfør "M4:M41", opgave
    udfør "O4:O41", opgave
   
End Sub
Private Sub udfør(område, opgave)
Dim rr
    Application.ScreenUpdating = False
   
    Set rr = Range(område)
    For Each c In rr.Cells
        adr = c.Address
        Range(adr).Offset(0, -1).Select
       
        If opgave = False Then
            ActiveCell.NumberFormat = "General"
            ActiveCell.Font.Strikethrough = False
        Else
            førstetegn = Left(c.Value, 1)
            If InStr("+ABC", førstetegn) = 0 Or førstetegn = "" Or IsEmpty(førstetegn) = True Then
                ActiveCell.Font.Strikethrough = True
            Else
                ActiveCell.Font.Strikethrough = False
            End If
        End If
    Next
    Application.ScreenUpdating = True
End Sub
Avatar billede perhol Seniormester
11. december 2007 - 01:00 #11
Det blev lidt sent, men jeg testede alligevel.

Makroen kan ikke ses i makro-oversigten (alt+F8), er det fordi der er anvendt 'Private Sub...'?

Makroen renser for gennemstreget font, men sætter ikke gennemstreget font hvor den skal.
Avatar billede supertekst Ekspert
11. december 2007 - 09:05 #12
Sidste version er opbygget - således at du kan "flette den ind" - som du ønsker - men korrekt - når der står Private - kan ændres til Public.

Min udgave virker - måske skulle du sende en kopi af din fil:
pb@supertekst-it.dk
Avatar billede perhol Seniormester
11. december 2007 - 14:30 #13
supertekst>
OK, sender.
Filen fylder 1,35 MB
Alle ark er beskyttet på grund af funktionalitet overfor brugere.
Der er ikke kodeord i beskyttelsen, og jeg har lavet en lille makro til at beskytte og en til at låse op (BeskytAlle - ÅbenAlle).
Er først hjemme ca. 23:30
Avatar billede perhol Seniormester
12. december 2007 - 14:44 #14
Her er den makrokode jeg har modtaget fra supertekst:

Public Sub SætTilStandard()
    GennemLøb False
End Sub
Public Sub TestOverstregning()
    GennemLøb True
End Sub
Private Sub GennemLøb(opgave As Boolean)
    udfør "C4:C41", opgave
    udfør "E4:E41", opgave
    udfør "G4:G41", opgave
    udfør "I4:I41", opgave
    udfør "K4:K41", opgave
    udfør "M4:M41", opgave
    udfør "O4:O41", opgave
   
End Sub
Private Sub udfør(område, opgave)
Dim rr
    Application.ScreenUpdating = False
   
    Set rr = Range(område)
    For Each c In rr.Cells
        adr = c.Address
        Range(adr).Offset(0, -1).Select
       
        If opgave = False Then
            ActiveCell.NumberFormat = "General"
            ActiveCell.Font.Strikethrough = False
        Else
            førstetegn = Left(c.Value, 1)
            If InStr("+ABC", førstetegn) = 0 Or førstetegn = " " Or IsEmpty(førstetegn) = True Then
                ActiveCell.Font.Strikethrough = True
            Else
                ActiveCell.Font.Strikethrough = False
            End If
        End If
    Next
    Application.ScreenUpdating = True
End Sub


Den virker efter hensigten.

Tak for indsatsen jkrons og kabbak.
Avatar billede supertekst Ekspert
12. december 2007 - 15:12 #15
Her er så et svar..
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
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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