Avatar billede stefanfuglsang Juniormester
22. januar 2009 - 13:05 Der er 1 kommentar og
1 løsning

brug af Find i VBA

Jeg forsøger nedenstående funktion til at finde næste værdi i en range, der er forskellig fra en referenceværdi:

Function NextUnique(last As Range, ref As Range)
    'ref must be a sorted range
    Dim c As Range
    Set c = ref.Find(What:=last.Value)
 
    If Not c Is Nothing Then
        Do
            Set c = ref.FindNext(c)
        Loop While Not c Is Nothing
    End If
    NextUnique = c.Offset(1)
End Function

kaldes som =FindUnique(B2;A2:A1000)
c er altid Nothing, selvom værdien i B2 findes i A2:A1000
Har jeg tænkt helt forkert? Nogen ideer?
Avatar billede stefanfuglsang Juniormester
22. januar 2009 - 13:50 #1
Find virker fint i en "sub" - man kan tilsyneladende ikke bruge Find i en function, der kaldes fra regnearket?

Følgende kode gør det jeg vil, selv om det ikke er så effektivt:

=NextUnique(B2, B1, A2:A1000)
Hvor B1 og B2 er to tidligere værdier, der evt. er fundet med et kald til NextUnique
A2:A1000 er den range der skal søges i

Function NextUnique(this As Range, last As Range, ref As Range)
    'ref must be a sorted range
    Dim c As Range
    Dim foundlast As Boolean, foundthis As Boolean
    foundlast = False
    foundthis = False
    For Each c In ref
        If foundlast And foundthis And c.Value <> this.Value Then Exit For
        If foundlast And c.Value = this.Value Then
            foundthis = True
        End If
        If c.Value <> last.Value Then
            foundlast = True
        End If
    Next
    NextUnique = c.Offset(1)
End Function
Avatar billede stefanfuglsang Juniormester
22. januar 2009 - 13:54 #2
En forklaring på at Find ikke virker må være at Find gemmer informationer om kaldet til brug i FindNext. Funktioner som kaldes fra regnearket må ikke have en sådan struktur (skal være reentrant).
Jeg mangler blot at den slags står i hjælpen (det gør det ikke i Excel 2000)
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