Avatar billede Laugesen1 Mester
22. september 2014 - 02:05 Der er 5 kommentarer og
1 løsning

Find match med dubletter

Jeg har en makro der tjekker for ens værdier i to separate kolonner, hvor jeg bruger "for each - metoden".

Den fungerer på den måde, at der først tjekkes for korrekt dato, derefter om et beløb i kolonne F (udgangskolonne) findes i kolonne D (compareRange).
Hvis beløbet findes, sættes der et kryds i cellen til højre for beløbet i kolonne F.

Altså er der tale om en egentlig afstemning af beløb.

Det fungerer fint, så længe der ikke er dubletter i udgangskolonnen.
Hvis den samme værdi forekommer flere gange her, men kun én gang i compareRange, så bliver der alligevel sat et kryds til højre for de værdier der matcher.

Eksempel:
Beløbet 100 forekommer 2 gange i udgangskolonnen, men kun én gang i compareRange.
Makroen sætter alligevel et kryds til højre for begge beløb (100) i udgangskolonnen. Hvilket der jo ikke skal, da beløbet mangler én gang i compareRange.

Er der nogen der har et bud på hvordan jeg ændre i makroen, så den tager højde for at der kan forekomme dubletter?

Eller måske er der en helt anden metode til at tjekket for match med dubletter?


På forhånd tak

Laugesen


Koden:

Sub FindMatchTest()

Dim CompareRange1 As Variant, X As Variant, Y As Variant
Dim Dato As Date


Set CompareRange1 = Application.ThisWorkbook.Sheets("Ark3").Range("D4:D23")

Dato = Sheets("Ark3").Range("A2").Value

        Range("F4:F23").Select
       
        For Each X In Selection
            For Each Y In CompareRange1
       
If Y.Value > 0 And Y.Offset(0, -1).Value = DateValue(Dato) And Y = X Then x.Offset(0, 1) = "x"
 
        Next Y
            Next X

                End Sub
Avatar billede kabbak Professor
22. september 2014 - 15:30 #1
Sub FindMatchTest()

    Dim CompareRange1 As Variant, X As Variant, Y As Variant
    Dim Dato As Date


    Set CompareRange1 = Application.ThisWorkbook.Sheets("Ark3").Range("D4:D23")

    Dato = Sheets("Ark3").Range("A2").Value

    Range("F4:F23").Select

    For Each X In Selection
        For Each Y In CompareRange1

            If Y.Value > 0 And Y.Offset(0, -1).Value = DateValue(Dato) And Y = X Then
                X.Offset(0, 1) = "x"
                Exit For
            End If
        Next Y
    Next X

End Sub
Avatar billede Laugesen1 Mester
22. september 2014 - 16:57 #2
Hej kabbak

Tak for dit input.

Jeg har testet ændringen i makroen, men desværre er resultatet det samme. Der bliver stadig sat et kryds til højre for alle de tal der matcher i udgangskolonnen.

Jeg har også en tilføjelse til min beskrivelse af problemet:

Hvis beløbet findes fx 2 gange, både i udgangskolonne og i compareRange, så skal der sættes et kryds til højre for begge tal i udgangskolonnen.

Jeg skal bruge makroen til afstemning af beløb i mit ark med beløb fra en bank-konto. Jeg downloader et kontoudskrift i Excel, og skal så lave en afstemning med de indtastet tal i mit ark, for at tjekke at beløbene er kommet ind på kontoen.

Det fungerer fint med den makro, men kun hvis alle beløbene i  transaktionerne er forskellige.
Når der er flere transaktioner med det samme beløb, så fungerer det ikke efter hensigten.
Avatar billede kabbak Professor
22. september 2014 - 18:53 #3
Vi prøver at bytte om på løkkerne

Sub FindMatchTest()

    Dim CompareRange1 As Variant, X As Variant, Y As Variant
    Dim Dato As Date


    Set CompareRange1 = Application.ThisWorkbook.Sheets("Ark3").Range("D4:D23")

    Dato = Sheets("Ark3").Range("A2").Value

    Range("F4:F23").Select

  For Each Y In CompareRange1
    For Each X In Selection
     

            If Y.Value > 0 And Y.Offset(0, -1).Value = DateValue(Dato) And Y = X Then
                X.Offset(0, 1) = "x"
                Exit For
            End If
        Next x
    Next y

End Sub
Avatar billede Laugesen1 Mester
22. september 2014 - 20:39 #4
Det har givet et skridt i den rigtige retning :)

Nu bliver kun sat kryds til højre for et af beløbene, hvis der er flere med samme værdi i udgangskolonnen.

Men hvis de samme beløb findes i udgangskolonnen (fx 100 to gange), og de to beløb også findes i compareRange, så bliver der kun sat kryds til højre for det første beløb i udgangskolonnen.

I det tilfælde skal der sættes kryds ved begge beløb, da begge beløb er kommet ind på kontoen.
Avatar billede kabbak Professor
22. september 2014 - 20:53 #5
Vi prøver igen

Sub FindMatchTest()

    Dim CompareRange1 As Variant, X As Variant, Y As Variant
    Dim Dato As Date


    Set CompareRange1 = Application.ThisWorkbook.Sheets("Ark3").Range("D4:D23")

    Dato = Sheets("Ark3").Range("A2").Value

    Range("F4:F23").Select

  For Each Y In CompareRange1
    For Each X In Selection
     

            If Y.Value > 0 And Y.Offset(0, -1).Value = DateValue(Dato) And Y = X  and  X.Offset(0, 1) <> "x"Then
                X.Offset(0, 1) = "x"
                Exit For
            End If
        Next x
    Next y

End Sub
Avatar billede Laugesen1 Mester
23. september 2014 - 11:37 #6
Nu fungerer det efter hensigten. Den sidste ændring var lige det der skulle til.

Der bliver nu korrekt sat et kryds til højre for beløbene i udgangskolonnen, også når der er flere ens transaktioner i compareRange.

Jeg har tilpasset makroen og det fungerer nu som det skal i mit ark.

Mange tak for hjælpen  -  eller endnu en gang mange tak for hjælpen :)

Laugesen
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