Avatar billede sije-1976 Nybegynder
09. september 2010 - 11:39 Der er 6 kommentarer og
1 løsning

Udsøgning på eksakte - unikke værdier

Hejsa

Jeg er ny her på eksperten, men jeg har en problemstilling, som jeg har store problemer med.
Jeg har nogle Excel ark med en masse linier, hvor jeg skal udhente alle de unikke ord og tal fra de respektive celler,.
E.g.: Et felt med "Banan blomst 35"
bliver opdelt i tre felter til: "Banan"
                                "blomst"
                                "35"
Hvor hver tekststreng (alt skal være tekst), står i sin egen celle.
Dertil har jeg denne smarte makro, som næsten løser opgaven:

Option Explicit
Sub Word_List()
Dim F  As Object
Dim MyRG As Range
Dim LASTROW As Long

    Columns("A:A").Copy Destination:=Range("Q1")           

    Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(1, 2), TrailingMinusNumbers:=True

       
    Range("A1").Select             
    LASTROW = Range("O" & Rows.Count).End(xlUp).Row
    Set MyRG = Range(Range("O1"), Range("O" & LASTROW))
    For Each F In Range("A1").CurrentRegion
        If (Application.WorksheetFunction.CountIf(MyRG, F.Value) = 0) Then
            Cells(LASTROW + 1, "O") = F.Value
            LASTROW = Range("O" & Rows.Count).End(xlUp).Row
            Set MyRG = Range(Range("O1"), Range("O" & LASTROW))
        End If
    Next F
    Range("A1").CurrentRegion.Clear
    Columns("Q:Q").Copy Destination:=Range("A1")
    Columns("Q:Q").Clear
End Sub

Problemet er, at funktionen ikke tager hensyn til case, hvilket i mit tilfælde er EKSTREMT vigtigt.
E.g.
Blå blå BLÅ skal blive til:

Blå                      Den nuværende funktion giver mig: BLÅ
blå
BLÅ

Hvordan får jeg bygge en eksakt funktion ind i makroen?
Avatar billede tjp Mester
09. september 2010 - 13:49 #1
Problemet skyldes at CountIf ikke er case-sensitiv.

Det kan klares ved at tilføje denne funktion:

Public Function CountIfCaseSensitive(rngEvaluate As Range, strCriteria As String) As Long
    Dim rng        As Range
    Dim lngCount    As Long
    lngCount = 0
    For Each rng In rngEvaluate
        If rng = strCriteria Then lngCount = lngCount + 1
    Next rng
    CountIfCaseSensitive = lngCount
End Function
(fundet på http://www.ozgrid.com/forum/showthread.php?t=27658&page=1)

Og ændre linjen:
    If (Application.WorksheetFunction.CountIf(MyRG, F.Value) = 0) Then

Til:
    If (CountIfCaseSensitive(MyRG, F.Value) = 0) Then
Avatar billede sije-1976 Nybegynder
09. september 2010 - 15:41 #2
Perfekt!
Syntes ellers at jeg havde kørt ozgrid.com igennem. Åbenbart ikke :).
Tak for hjælpen.
Avatar billede tjp Mester
09. september 2010 - 16:00 #3
U R welcome... :-)
Avatar billede tjp Mester
10. september 2010 - 10:19 #4
Hov, du tog pointene selv?! :-)
Avatar billede sije-1976 Nybegynder
10. september 2010 - 14:46 #5
Svipser.
Hvordan "bytter" jeg om på pointgivningen?
Avatar billede tjp Mester
10. september 2010 - 15:12 #6
Det kan man ikke - shit happens.. :-)
Avatar billede sije-1976 Nybegynder
10. september 2010 - 18:26 #7
Pokkers!
Jeg beklager.
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
Kurser inden for grundlæggende programmering

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