Avatar billede nca Juniormester
11. marts 2015 - 15:39 Der er 4 kommentarer og
1 løsning

Kontrol af MAC-adresse format

Jeg har et regneark, hvor den ene kolonne indeholder mac-adresser på flg. format
12:34:56:78:9A:BC
Er der nogen der kan hjælpe med en makro, der gør følgende:
1) Kontrollerer, at der er 17 tegn i cellen
2) At hvert 3. tegn er et :
3) At der kun er brugt hexadecinale tal (1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
  Der er ingen garanti for, at der er brugte store bogstaver
4) At der ikke er 2 ens mac-adresser i listen

Makroen skal markere en evt. fejlbehæftet celle og skrive hvilken fejl, der er fundet i cellen.

Med venlig hilsen

Niels Christian Andersen
Avatar billede jens48 Ekspert
11. marts 2015 - 20:55 #1
Prøv om denne makro kan bruges:

Sub CheckMAC()
Dim c As Range
Range("A1:A15").ClearFormats
For Each c In Range("A1:A15")
c.Offset(0, 1) = ""
If Application.WorksheetFunction.CountIf(Range("A1:A15"), c) > 1 Then
c = ""
GoTo A:
End If
c = UCase(c)
If Len(c) <> 17 Then
c.Offset(, 1) = "MAC adressen skal være 17 karakterer lang"
End If
For x = 1 To 17
Y = Mid(c, x, 1)
Select Case x
Case 1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17
If IsNumeric(Y) Or Y = "A" Or Y = "B" Or Y = "C" Or Y = "D" Or Y = "E" Or Y = "F" Then
Else
c.Offset(0, 1) = " Der må kun bruges tal og ABCDEF i MAC adressen"
With c.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End If
Case 3, 6, 9, 12, 15
If Y <> ":" Then
c.Offset(0, 1) = " Der skal være kolon på hver 3. plads i Mac adressen"
With c.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End If
End Select
Next
A:
Next
End Sub
Avatar billede nca Juniormester
12. marts 2015 - 15:22 #2
Tak for et god forslag.
Jeg har arbejdet lidt videre på det, så kontrollen foregår inden for en afmærket række data.
Jeg kan dog ikke finde ud af at få ændret denne linje, så den kikker efter dubletter i det markerede område i stedet for A1:A15

If Application.WorksheetFunction.CountIf(Range("A1:A15"), c) > 1 Then

Det kunne også være rart, at der kom en messagebox, hvis der ikke var markeret noget i regnearket, når man kalder makroen.

Makroen ser således ud nu:

Sub CheckMAC()
    Dim c As Range
    Dim myRange As Range
    Set myRange = Selection
    myRange.ClearFormats
    For Each c In myRange
        c.Offset(0, 1) = ""
        'Find dubletter
        If Application.WorksheetFunction.CountIf(Range("A1:A15"), c) > 1 Then
            c.Offset(, 1) = " Denne adresse er dubleret"
            With c.Interior
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                .Color = 65535
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
            GoTo A:
        End If
        c = UCase(c)
        If Len(c) <> 17 Then
            c.Offset(, 1) = " MAC adressen skal være 17 karakterer lang"
            With c.Interior
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                .Color = 65535
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
            GoTo A:
        End If
        For x = 1 To 17
            Y = Mid(c, x, 1)
            Select Case x
                Case 1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17
                    If IsNumeric(Y) Or Y = "A" Or Y = "B" Or Y = "C" Or Y = "D" Or Y = "E" Or Y = "F" Then
                Else
                    c.Offset(0, 1) = " Der må kun bruges hexadecimale tal i MAC adressen"
                    With c.Interior
                        .Pattern = xlSolid
                        .PatternColorIndex = xlAutomatic
                        .Color = 65535
                        .TintAndShade = 0
                        .PatternTintAndShade = 0
                    End With
                    GoTo A:
                End If
                Case 3, 6, 9, 12, 15
                    If Y <> ":" Then
                        c.Offset(0, 1) = " Der skal være kolon på hver 3. plads i Mac adressen"
                        With c.Interior
                            .Pattern = xlSolid
                            .PatternColorIndex = xlAutomatic
                            .Color = 65535
                            .TintAndShade = 0
                            .PatternTintAndShade = 0
                        End With
                      GoTo A:
                    End If
                End Select
        Next
A:
    Next
   
End Sub
Avatar billede nca Juniormester
12. marts 2015 - 15:33 #3
Kontrol af om der er celler markeret har jeg løst med disse linjer:

If Selection.Count < 2 Then
        MsgBox ("Du skal markere de celler, der skal kontrolleres!")
        Exit Sub
    End If
Avatar billede nca Juniormester
16. marts 2015 - 13:30 #4
Her er den færdige kode til kontrol af MAC-adresser i et dynamisk markeret område:

Sub CheckMAC()
    Dim c As Range
    Dim myRange As Range
    Dim SelectedRange As String
    Set myRange = Selection
    SelectedRange = myRange.Cells(1).Address(0, 0) + ":" + myRange.Cells(myRange.Rows.Count, 1).Address(0, 0)
    myRange.ClearFormats
    If Selection.Count < 2 Then
        MsgBox ("Du skal markere de celler, der skal kontrolleres!")
        Exit Sub
    End If
    For Each c In myRange
        c.Offset(0, 2) = ""
        'Find dubletter
        If Application.WorksheetFunction.CountIf(Range(SelectedRange), c) > 1 Then
            c.Offset(, 1) = " Denne adresse er dubleret"
            With c.Interior
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                .Color = 65535
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
            GoTo A:
        End If
        c = UCase(c)
        If Len(c) <> 17 Then
            c.Offset(, 2) = " MAC adressen skal være 17 karakterer lang"
            With c.Interior
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                .Color = 65535
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
            GoTo A:
        End If
        For x = 1 To 17
            Y = Mid(c, x, 1)
            Select Case x
                Case 1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17
                    If IsNumeric(Y) Or Y = "A" Or Y = "B" Or Y = "C" Or Y = "D" Or Y = "E" Or Y = "F" Then
                Else
                    c.Offset(0, 2) = " Der må kun bruges hexadecimale tal i MAC adressen"
                    With c.Interior
                        .Pattern = xlSolid
                        .PatternColorIndex = xlAutomatic
                        .Color = 65535
                        .TintAndShade = 0
                        .PatternTintAndShade = 0
                    End With
                    GoTo A:
                End If
                Case 3, 6, 9, 12, 15
                    If Y <> ":" Then
                        c.Offset(0, 2) = " Der skal være kolon på hver 3. plads i Mac adressen"
                        With c.Interior
                            .Pattern = xlSolid
                            .PatternColorIndex = xlAutomatic
                            .Color = 65535
                            .TintAndShade = 0
                            .PatternTintAndShade = 0
                        End With
                      GoTo A:
                    End If
                End Select
        Next
A:
    Next
    MsgBox ("Cellerne i området " & SelectedRange & " er kontrolleret nu!")
End Sub

Tak til Jens48 for stor hjælp.
@Jens48
Læg et svar og du får dine point.
Avatar billede jens48 Ekspert
16. marts 2015 - 13:37 #5
Velbekomme
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