Avatar billede pernillemb Nybegynder
03. januar 2006 - 09:14 Der er 22 kommentarer og
1 løsning

Finde ens celler i samme kolonne

Hejsa.

Jeg er igang med opbygningen af en stor database i excel. Ved godt at der findes andre programmer (f.eks. access), der er bygget til formålet, men dem har jeg ikke en brik forstand på, derfor blir det i excel... ;-)

Jeg har nu brug for at kunne sortere/søge efter 2 eller flere ens celler i en kolonne.

I stedet for at sortere i alfabetisk orden og derefter kigge listen igennem manuelt, vil jeg gerne have en eller anden funktion til at gøre det for mig, da listen meget hurtigt kan blive temmelig lang (5.000-10.000 rækker).

Findes der en søge funktion af en slags i excel, der kan finde ens celler i en kolonne, eller skal man lave en knap til det med noget vba-halløj bagved...??

Håber jeg har gjort mig forståelig...

Pernille
Avatar billede b_hansen Novice
03. januar 2006 - 09:23 #1
Den simple løsning vil jo nok være Autofilter, hvis jeg forstår dig ret.

Hvis du skal have listen sorteret på antallet af forekomster, skal du også lige tilføje en kolonne, der tæller antallet af forekomster. Her kan du bruge =TÆL.HVIS()
Avatar billede pernillemb Nybegynder
03. januar 2006 - 09:34 #2
Hmmm... jo måske Autofilter kan bruges til formålet... på en eller anden måde...

Så skal jeg bare ha TÆL.HVIS til at virke. For det er desværre ikke sådan at der måske er 5-10 forskellige værdier i kolonnen, men nærmere 5.000-10.000... :S Så hvordan får jeg fixet den...?
Avatar billede bak Forsker
03. januar 2006 - 09:47 #3
denne vba-kode markerer dubletter som gule.
Du indsætter bare det hele i et modul og kører makroen test_mark_dups
Derefter markerer du første celle i den kolonne du ønsker chekket og trykker ok.


Sub test_mark_dups()
Dim Rng1 As Range
Dim rstart1 As Range

  Set rstart1 = Application.InputBox("Udpeg 1. celle i kolonnen at finde dubletter i ", , , , , , , 8)
  Set Rng1 = Range(rstart1.Offset(1, 0), rstart1.Cells(65536, 1).End(xlUp))

  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 Cell.Value, CStr(Cell.Value)
      If Err.Number <> 0 Then Cell.Interior.Color = lColor
      Err.Clear
  Next Cell
  Application.ScreenUpdating = True

End Sub
Avatar billede b_hansen Novice
03. januar 2006 - 09:51 #4
ok, nu har bak (som sædvanlig *S*) rystet en løsning ud af ærmet....

Men hvis du stadig er interesseret i Autofilter og TÆL.HVIS() løsningen, skal formlen se sådan ud: =TÆL.HVIS(A$1:A$30000;B1)
Formlen læses sådan: tæl antallet af celler i området A1 til A30000, hvor indholdet er lig med indholdet af B1. Husk dollartegnet, specielt foran A1, da dataområdet ellers ændres, når cellen kopieres nedad.
Avatar billede pernillemb Nybegynder
03. januar 2006 - 09:59 #5
bak:
Det er lige præcis sådan noget som det jeg er ude efter... problemet er bare at når jeg kører makroen så siger den "Application-defined or object-defined error"... hvad gør jeg forkert...???

b_hansen:
Hmmm...tror ikke jeg kan bruge TÆL.HVIS løsningen for jeg aner jo ikke hvad jeg skal sammenligne med... altså, jeg aner ikke hvad du i dit eksempel kalder B1 er... Det er en lang liste med forskellige navne, som hurtigt bliver udvidet...
Avatar billede bak Forsker
03. januar 2006 - 10:02 #6
pernille->i hvilken linie melder den fejl ??  (linien bliver gul)
Avatar billede pernillemb Nybegynder
03. januar 2006 - 10:06 #7
bak
i denne linie...
Set Rng1 = Range(rstart1.Offset(1, 0), rstart1.Cells(65536, 1).End(xlUp))
Avatar billede bak Forsker
03. januar 2006 - 10:07 #8
Mens jeg lige laver den lidt om, så prøv at markere overskriften istedet for.
Avatar billede bak Forsker
03. januar 2006 - 10:11 #9
Så er den lavet om. Husk at det stadig er overskriften der skal markeres

Sub test_mark_dups()
Dim Rng1 As Range
Dim rstart1 As Range

  Set rstart1 = Application.InputBox("Udpeg 1. celle i kolonnen at finde dubletter i ", , , , , , , 8)
  Set Rng1 = Range(rstart1.Offset(1, 0), Cells(65536, rstart1.Column).End(xlUp))

  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 Cell.Value, CStr(Cell.Value)
      If Err.Number <> 0 Then Cell.Interior.Color = lColor
      Err.Clear
  Next Cell
  Application.ScreenUpdating = True

End Sub
Avatar billede pernillemb Nybegynder
03. januar 2006 - 10:13 #10
bak... det virker nu... det var bare det der skulle til... he he... ;-)

Markerer den så den 2. (og evt. 3. osv.) fra oven af...??? altså, listen behøves ikke være alfabetisk...?

Taaaaaaaark for hjælpen... :-)

smid et svar så får du point... *S*
Avatar billede pernillemb Nybegynder
03. januar 2006 - 10:14 #11
bak... hmmm... hvad er forskellen på de to stykker koder...??

Er det muligt at ændre farven (og hvor gør man det) hvis det blir nødvendigt...??
Avatar billede bak Forsker
03. januar 2006 - 10:21 #12
Forskellen er at databasen ikke kode nummer 2 ikke behøver at starte i række 1.

Det er muligt at ændre farven i denne linie
MarkDuplicates Rng1, vbYellow

her kan vbYellow ændres til vbBlue, vbRed, vbGreen, vbBlack, vbCyan, vbMargenta og vbWhite
Avatar billede bak Forsker
03. januar 2006 - 10:23 #13
Listen behøver ikke være sorteret og den markerer 2. forekomst af en værdi/tekst og alle efterfølgende
Avatar billede pernillemb Nybegynder
03. januar 2006 - 10:26 #14
takker mange gange for hjælpen bak... :-)

smid et svar... ;-)
Avatar billede pernillemb Nybegynder
03. januar 2006 - 10:27 #15
hov forresten... kan man ikke gøre så den altid starter øverst...??? så man er fri for at markere start cellen først...???

overvejer nemlig at sætte makroen ind under en knap så det er nemt for andre at bruge den... *S*
Avatar billede bak Forsker
03. januar 2006 - 10:39 #16
jo sagtens, men skal man ikke stadig kunne vælge kolonnen eller vil det altid være den samme ?
Avatar billede pernillemb Nybegynder
03. januar 2006 - 10:41 #17
i dette tilfælde vil det altid være den samme kolonne, der skal ikke sorteres (ikke på den måde i hvert fald) på andre kolonner... *S*
Avatar billede bak Forsker
03. januar 2006 - 10:45 #18
ok, hvilken kolonne ?
Avatar billede pernillemb Nybegynder
03. januar 2006 - 10:45 #19
kolonne B
Avatar billede bak Forsker
03. januar 2006 - 10:48 #20
Sub test_mark_dups()
Dim Rng1 As Range
Dim rstart1 As Range

  Set rstart1 = ActiveSheet.Range("B1")
  Set Rng1 = Range(rstart1.Offset(1, 0), Cells(65536, rstart1.Column).End(xlUp))
 
  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 Cell.Value, CStr(Cell.Value)
      If Err.Number <> 0 Then Cell.Interior.Color = lColor
      Err.Clear
  Next Cell
  Application.ScreenUpdating = True

End Sub
Avatar billede pernillemb Nybegynder
03. januar 2006 - 11:01 #21
weeeeeeeeehuuuuuuuuuu... det virker... tusinde tusinde tak... :-)
Avatar billede bak Forsker
03. januar 2006 - 11:03 #22
Jeg vil foreslå at du erstatter den første sub med denne her.
Den fjerner de gamle farver først, inden den laver sammenligningerne.

Sub test_mark_dups()
  Dim Rng1 As Range
  Dim rstart1 As Range

  Set rstart1 = ActiveSheet.Range("B1")
  Set Rng1 = Range(rstart1.Offset(1, 0), Cells(65536, rstart1.Column).End(xlUp))
  Rng1.Interior.ColorIndex = 0
  MarkDuplicates Rng1, vbYellow
End Sub
Avatar billede pernillemb Nybegynder
03. januar 2006 - 11:15 #23
hmmmm... tror ikke det er nødvendigt... for der skulle ikke gerne være andre farver i dokumentet på det tidspunkt.

hvis der er fundet dubletter på et tidligere tidspunkt (og disse er blevet markeret vha den makro) så skal de slettes helt fra listen...

Det kan måske bygges ind i den eksisterende makro at dubletten bliver slettet fra listen...??? Den skal så lige kopieres ind i et nyt ark så man jo kan se hvilke der skal fjernes... ;-) eller det er måske et nyt spørgsmål...???
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

IT-JOB