Filteren op specifieke waarde in een cel met vba

Status
Niet open voor verdere reacties.

gst

Gebruiker
Lid geworden
5 jan 2010
Berichten
121
Besturingssysteem
64-bits besturingssysteem, x64-processor
Office versie
Microsoft Office LTSC Professional Plus 2021
Geacht forum,

In een Excelsheet staat in een bepaalde kolom de volgende gegevens:

80AAAAAASET21
150AAAAASET34
150BBBBBBSET20
40FRC3AAAAAASET32

Graag wil ik per cel alleen de letters AAAAAA of BBBBBB overhouden, dus:

AAAAAA
AAAAAA
BBBBBB
AAAAAA

Hiervoor zoek ik een vba code die deze specifieke letters eruit filtert.
Heeft iemand en suggestie voor mij om dit te kunnen realiseren?

Met voorbaat dank!
 
Welke andere eventuele combinaties heb je? in je gegeven voorbeeld is het automatisch AAAAA als er een "A" in voorkomt en "BBBBB" als er een "B" in voorkomt. in principe is het niet moeilijk om te kijken of er ergens AAAAA of BBBBB in voorkomt, maar dat moeten dat wel de enige mogelijkheden zijn. als er meer soorten combinaties zijn moet je mogelijk een andere oplossing.
 
De letters AAAAAA en BBBBBB zijn altijd hetzelfde.

De te filteren code kan ook beginnen met A of B. Bijv.

B40FRC3AAAAAASET32
 
Ik bedoel meer als je maar 2 mogelijkheden hebt kun je een eenvoudige INSTR instructie gebruiken die zoek op AAAAA of BBBBB ?
 
Als de gegevens in kolom A staan en beginnen in A1.
Resultaat in kolom J.
Code:
Sub hsv()
Dim Regex As Object, objM As Object, sn, waarde, i As Long, ii As Long
sn = Cells(1).CurrentRegion.Columns(1)
  For i = 1 To UBound(sn)
      Set Regex = CreateObject("VbScript.RegExp")
        With Regex
         .Pattern = "(^|[$A-B])"
            .Global = True
            Set objM = .Execute(sn(i, 1))
            If objM.Count > 0 Then
                For ii = 0 To objM.Count - 1
                    waarde = waarde & objM(ii).Value
                Next
            End If
        End With
      sn(i, 1) = IIf(waarde <> "", waarde, "niets te filteren")
    waarde = ""
  Next
  Cells(1, 10).Resize(UBound(sn)) = sn
End Sub
 
Laatst bewerkt:
@HSV: als je de regex route gaat, waarom dan niet meteen [A-B]{5} ? (Ik zat zelf ook aan regex te denken, maar vind het wat overkill voor 2 lineaire opties)
 
Allereerst dank voor jullie reactie!

Voor mijn toepassing is de suggestie van wampier goed te gebruiken.
Ik heb het (ongeveer) als volgt toegepast, met als resultaat "AAAAAA"

Option Explicit
Sub test()
Dim pos As String
Dim waarde As String
waarde = "40FRC3AAAAAASET32"
pos = InStr(waarde, "A")
MsgBox Mid(waarde, pos, 6)
End Sub


De oplossing is in mijn toepassing voldoende al weet ik dat wanneer de eerste letter van de waarde een 'A" is ("A40FRC3AAAAAASET32"), het niet goed gaat.
Ik heb de eerste letter 'A' van te voren kunnen uitschakelen waardoor het in mijn toepassing wel goed gaat.
Misschien is dan de suggestie van HSV nauwkeuriger en ook beter te gebruiken wanneer voor AAAAAA bijvoorbeeld een bepaalt woord of code gefilterd moet worden uit een waarde?
 
waarom dan niet:

Code:
Sub M_snb()
  c00 = "A40FRC3AAAAAASET32"
  MsgBox Mid(c00, InStr(c00, "AAAAAA"), 6)
End Sub
 
snb,

Perfecte (en betrouwbaardere) oplossing! Dank!!
 
Ik had voor de regex methode gekozen met een variabel aantal A's.
In het voorbeeld zijn het er 5 en 6.
Voor hetzelfde waren het er zeven.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan