Avatar billede thegenuine Praktikant
27. marts 2008 - 06:57 Der er 14 kommentarer og
1 løsning

Scanne kolonne for gentagelse af tal/varenummer.

Hej Exp.

Jeg har et Excel regneark, hvor jeg har en kolonne med varenumre på otte tegn med udseende som xxx-xxxx eller xxxxxxxx.
Kan jeg lave en makro, der kontrollerer kolonnen for, at der ikke er to ens varenumre, når jeg har oprettet et nyt?
Hvis ja, hvordan?
Vil gerne lære det selv, men hvis der er en venlig sjæl, der hurtigt kan fikse det, så skal personen være velkommen.

/£@$Z
Avatar billede jlemming Nybegynder
27. marts 2008 - 08:15 #1
Prøv denne, starter i A2

Sub test_mark_dups()
  'Kontroller varenavne for dubletter, markeres gule
  Dim Rng1 As Range
  Dim rstart1 As Range

    MsgBox ("Kontroller varenavne for dubletter, markeres gule")
    Set rstart1 = ActiveSheet.Range("A2")
    Set Rng1 = Range(rstart1.Offset(0, 0), Cells(65535, rstart1.Column).End(xlUp))
       
    Rng1.Interior.ColorIndex = 0
    MarkDuplicates Rng1, vbYellow
   
End Sub


Private Sub MarkDuplicates(rlist As Range, lColor As Long)
Dim Cell As Range
Dim Uniqs As Object 'New Dictionary
Set Uniqs = CreateObject("scripting.dictionary")
  Application.ScreenUpdating = False
  On Error Resume Next
  For Each Cell In rlist
      Uniqs.Add UCase(Cell.Value), CStr(UCase(Cell.Value))
      If Err.Number <> 0 And Cell.Value <> Empty Then Cell.Interior.Color = lColor
      Err.Clear
  Next Cell
  Application.ScreenUpdating = True

End Sub
Avatar billede jlemming Nybegynder
27. marts 2008 - 08:31 #2
denne fjerne evt - først

Sub test_mark_dups()
  'Kontroller varenavne for dubletter, markeres gule
  Dim Rng1 As Range
  Dim rstart1 As Range

    MsgBox ("Kontroller varenavne for dubletter, markeres gule")
    Set rstart1 = ActiveSheet.Range("A2")
    Set Rng1 = Range(rstart1.Offset(0, 0), Cells(65535, rstart1.Column).End(xlUp))
       
    Rng1.Interior.ColorIndex = 0
    MarkDuplicates Rng1, vbYellow
   
End Sub


Private Sub MarkDuplicates(rlist As Range, lColor As Long)
Dim Cell As Range
Dim Uniqs As Object 'New Dictionary
Set Uniqs = CreateObject("scripting.dictionary")
  Application.ScreenUpdating = False
  On Error Resume Next
  For Each Cell In rlist
      navnsamlet = ""
      navnsplit = Split(UCase(Cell.Value), "-")
      For t = 0 To UBound(navnsplit)
            navnsamlet = navnsamlet & navnsplit(t)
      Next t
      Uniqs.Add navnsamlet, CStr(navnsamlet)
      'Uniqs.Add UCase(Cell.Value), CStr(UCase(Cell.Value))
      If Err.Number <> 0 And Cell.Value <> Empty Then Cell.Interior.Color = lColor
      Err.Clear
  Next Cell
  Application.ScreenUpdating = True

End Sub
Avatar billede jeppson Nybegynder
27. marts 2008 - 08:36 #3
Du kan så i arket' kode lægge en eventtrigger ind som gør at hver gang du ændrer noget i kolonne 1 (A) så kører makroen:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 Then
        Call test_mark_dups
    End If
End Sub
Avatar billede fojensen Nybegynder
27. marts 2008 - 08:48 #4
Der er dog lige en ulempe ved
Private Sub Worksheet_Change(ByVal Target As Range)...

Virker kun hvis man skriver i cellen.
Fejler hvis hver gang man kopierer eller laver en serie med fyldhåndtaget osv.
Avatar billede jeppson Nybegynder
27. marts 2008 - 09:10 #5
Ja, men det kan man jo komme ud over ved at lade være :-) Nej spøg til side - det er vel til at komme ud over ved at ændre koden så der kontrolleres for om det er en celle eller det er et range

Jeg har ikke lige tid til at lave den kode - men vender tilbage med status senere!
Avatar billede jlemming Nybegynder
27. marts 2008 - 09:30 #6
Skulle vi nu ikke lige vente og se hvad theqenuine siger og ønsker?
Avatar billede jeppson Nybegynder
27. marts 2008 - 09:52 #7
Hej jlemming !

Du har da en fantastisk pointe - tak for lige at få os til at undgå at gå i selvsving! - jeg afventer!
Avatar billede thegenuine Praktikant
27. marts 2008 - 13:22 #8
Hey Guys...

Tak, for den hurtige response og arbejde ;o)
Her kommer en uddybende forklaring til anvendelsen af regnearket.
Det nye varenummer er næsten magen til det eksisterende varenummer, dog med minimale ændringer. Derfor kopieres et eksisterende varenummer og dets underkomponenter til en ny række i Excel, og så erstattes det gamle varenummer i kolonne A med det nye varenummer. Oftest kopieres flere rækker af gangen, hvorfor jeg gerne vil have den "sikring" ind. Der er som minimum en underkomponent i Kolonne B, og der kan være en underkomponent i kolonnne C.
Gav det lidt oplysninger I kan bruge til noget?
Avatar billede jlemming Nybegynder
27. marts 2008 - 13:45 #9
Så ville jeg foretrække, at skulle starte en makro der markere eller sletter de rækker med ens varenummere, hvad siger du til det?

Har du prøvet min 2. kode?
Avatar billede thegenuine Praktikant
27. marts 2008 - 13:54 #10
Jeg vil klart foretrække, at den markerer rækkerne, der skulle være ens, så jeg selv sletter de rækker, der er dobbelt.

Jeg har ikke prøvet koden endnu, da jeg er total novice på området. Skal jeg kopiere koden ind i A2, eller hvad gør jeg?
Avatar billede thegenuine Praktikant
27. marts 2008 - 14:10 #11
A1, B1 og C1 er med drop down menu - ved ikke, om det har noget at betyde. Bare info ;o)
Avatar billede jlemming Nybegynder
27. marts 2008 - 14:15 #12
kode indsættes således:

-højre klik på ark navn i nedeste venstre hjørne, vælg vis program kode

-Der skulle nu dukke et tomt vindue op, med navnet ark1 (code), klister kode ind.


-gå tilbage til excel vinduet
- tryk "alt"+ "F8"
- afspil den marko der hedder test_marks_dups

- Så skulle du gerne have dine data markeret gule !! :o)
Avatar billede thegenuine Praktikant
27. marts 2008 - 14:28 #13
Det er sgu for sejt...! Genialt!

Lægger du et svar?

Kan jeg "slukke" for den igen, så de gule felter forsvinder igen?
Avatar billede thegenuine Praktikant
27. marts 2008 - 14:50 #14
Det må jeg have lært. Hvad vil du anbefale mig at starte med? Kender du et par gode tutorials eller literatur?
Avatar billede jlemming Nybegynder
27. marts 2008 - 14:59 #15
Med hensyn til at "slukke" igen er det nemmeste at markere alle felter og ctrl+1 og skifte farven tilbage.

Hvis du vil have en makro til det, kan du sætte den til at optage mens du gør det, tools,macro,record

Ang. tutorials prøv at søg i dette forum, der er flere henvisninger
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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