Avatar billede gammer Nybegynder
13. oktober 2006 - 22:37 Der er 7 kommentarer og
1 løsning

VBA – find værdi i celleområde - hvordan?

Jeg skal bruge en funktion (VBA), der kan tjekke om en given tekst-streng findes i et fast område af celler (altid B9:B14).

Hvis tekst-strengen, f.eks. A, findes i området B9:B14 skal funktionen returnere værdien TRUE.

Hvordan skrives denne funktion???
Avatar billede excelent Ekspert
13. oktober 2006 - 23:06 #1
=xFind("A")


Function xFind(Værdi As String)
Dim v, x
Application.Volatile
For v = 9 To 14
If Cells(v, 2).Value = Værdi Then
xFind = "TRUE": GoTo ud
End If
Next
xFind = "FALSE"
ud:
End Function
Avatar billede kabbak Professor
13. oktober 2006 - 23:29 #2
excelent > du skal nok lave denne

If Cells(v, 2).Value = Værdi Then
om til

If InStr(Cells(v, 2).Value, Værdi) > 0 Then

det er jo en tekstreng , så det menes måske en del af teksten.
Avatar billede gammer Nybegynder
14. oktober 2006 - 07:30 #3
Troede ikke jeg fik svar samme dag, da tidspunktet var lidt fremskredent :0)

excelent
din funktion gør det den skal, så læg et svar.  Jeg har dog ændret lidt på den, da der nok manglede en beskrivelse af hvor (og hvordan) jeg bruger funktionen.

Jeg skal bruge den returnerede værdi (TRUE/FALSE) i en anden VBA funktion, hvor jeg med en If/Then tester værdien. Tekststrengen der testes på er altid "A".

Jeg har kigget lidt på funktionen og ændret den. Her er hvad jeg er kommet frem til, som virker:

Public Function xFind() As Boolean
Dim v, x
Application.Volatile

For v = 9 To 14
    If Cells(v, 3).Value = "A" Then
    xFind = True: GoTo ud
    End If
Next
xFind = False
ud:
End Function
Avatar billede gammer Nybegynder
14. oktober 2006 - 07:43 #4
Hvis lysten er der, er her lige et tillægsspørgsmål, som jeg nok skal honorere med yderligere point.

Hvordan ville funktionen ovenfor se ud, hvis jeg fra en celle kaldte den sådan:

=xFind(B9:B14)

Alle andre forudsætninger som i mit oprindelige spørgsmål.

Jeg mener, at jeg her på eksperten på et tidspunkt har set et spørgsmål hvor et område af celler skulle hentes ind i en funktion/sub (som ovenfor) og behandles, men jeg har ikke kunnet finde spørgsmålet igen.
Avatar billede excelent Ekspert
14. oktober 2006 - 09:44 #5
=yFind(B9:B14)

Public Function yFind(myRange As Range) As Boolean
Dim v
Application.Volatile
For Each v In myRange
  If v = "A" Then yFind = True: GoTo ud
Next
yFind = False
ud:
End Function

'--------- eller -------------------------------------
=zFind(B9:B14;"A")

Public Function zFind(myRange As Range, Værdi) As Boolean
Dim v
Application.Volatile
For Each v In myRange
  If v = Værdi Then zFind = True: GoTo ud
Next
zFind = False
ud:
End Function
Avatar billede mrjh Novice
14. oktober 2006 - 09:48 #6
Hvis det skal være en del af en streng

Public Function fundet(område As Range, streng As String) As Boolean
ræk = område.Rows.Count
kol = område.Columns.Count
For I = 1 To kol
    For J = 1 To ræk
        værdi = værdi & område.Cells(J, I)
        If InStr(værdi, streng) Then
            fundet = True
            Exit Function
        Else
            fundet = False
        End If
    Next J
Next I
End Function
Avatar billede mrjh Novice
14. oktober 2006 - 10:27 #7
Bare glem det. Jeg havde ikke læst ordentligt efter. Troede det skulle være en del af en tekststreng, men den har kabbak jo allerede foreslået. Excellents virker fint.
Avatar billede gammer Nybegynder
14. oktober 2006 - 13:39 #8
excellent
Også din 2. funktion virker fint. Jeg opretter et spørgsmål med yderligere point til dig

mrjh & kabbak
I skal have tak for jeres input også - det er ikke umuligt, at jeg kan bruge jeres forslag i et fremtidigt projekt!

Der er jo altid en eller anden ide der pusler i baghovedet!
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