• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Bepaalde gegevens in rij selecteren en verwijderen

Status
Niet open voor verdere reacties.

vincent2

Gebruiker
Lid geworden
23 dec 2005
Berichten
27
Hallo,

In excel heb ik een lijst met gegevens waarin ook overbodige data staat. Een veld ziet er zo uit: naam en dan tussen haakjes de (overbodige info). Is het mogelijk om de data tussen de haken te selecteren, en vervolgens te verwijderen? Het gaat hier dus om data die in een regel staat, waarvan ik alleen het laatste deel tussen de haken eruit wil halen.

Alvast bedankt!

Vincent
 
Vincent

wat is je kennis van VBA in Excel?

Kan je een bestaande gelijkaardige macro (door mij gemaakt) herwerken tot wat je nodig hebt? Anders zal je moeten wachten tot ik of iemand anders het hier doet voor jou.

zie op deze pagina

Wigi
 
Wigi zei:
Vincent

wat is je kennis van VBA in Excel?

Kan je een bestaande gelijkaardige macro (door mij gemaakt) herwerken tot wat je nodig hebt? Anders zal je moeten wachten tot ik of iemand anders het hier doet voor jou.

zie op deze pagina

Wigi
Ik heb helaas geen verstand van VBA. Is het veel werk om de code aan te passen, zodat tekst tussen haken verwijderd wordt?

Code:
Sub haalweg()
Dim i As Integer, c As Range, mystr As String, keep As String
keep = InputBox("Wat wilt u weghalen? Typ schuin voor de schuine tekst en vet voor de vette reeks.")
For Each c In Range("A1", Range("A65536").End(xlUp))
    mystr = c
    If mystr <> "" Then
        j = 1
        Do
            j = j + 1
        Loop Until j = Len(c) - 1 Or c.Characters(j + 1).Font.Italic = True
        If keep = "schuin" Then
            c = Mid(mystr, 1, j - 1)
        ElseIf keep = "vet" Then
            c = Mid(mystr, j + 1)
            c.Font.Bold = False
            c.Font.Italic = True
        End If
    End If
Next
End Sub
 
Omdat het criterium voor verwijderen niet de opmaak van de tekst is maar de tekst zelf, is de oplossing nog eenvoudiger dan die voor het probleem waarvoor Wigi een oplossing gaf. Doe het volgende:
Doorloop alle cellen in de kolom waarin tekst verwijderd moet worden (met Do-Until, Do-While of For-Next (zie bv. 1e regel macro Wigi)).
Doorloop (bv. ook met for-next) in elke cel de tekst vanaf het eerste teken (1) tot het laatste (= lengte tekst). Bekijk hierbij teken voor teken (met de mid-functie) of een openend haakje “(“ wordt gevonden.
Indien dat het geval is, moet vanaf dat punt de tekst vervallen. Ervan uitgaand dat er voor het openend haakje een spatie staat, wordt de celwaarde dan gelijk aan de lengte van de tekst tot dat punt -2.
Voorbeeld: stel dat de tekst in een cel er zo uitziet:
Jouw tekst (te verwijderen tekst)
Het openend haakje staat op positie 12, dus de variable die je in de for-nextlus gebruikt is op het moment dat het haakje wordt "ontdekt" ook gelijk aan 12. De celwaarde moet in dit geval gelijk worden aan de eerste 10 tekens van de oorspronkelijke celwaarde, vandaar -2. Staat er in jouw tekt geen spatie voor het openend haakje dan wordt het uiteraard -1. Gebruik voor deze laatste opdracht de left-functie.
Met deze aanwijzingen zou het moeten lukken. De benodigde macro hoeft nog geen 10 regels lang te zijn.
 
Voilà

Code:
Sub haalweg()
Dim c As Range, mystr As String
For Each c In Range("A1", Range("A65536").End(xlUp))
    mystr = c
    If mystr <> "" Then
        j = 1
        Do
            j = j + 1
        Loop Until j = Len(c) - 1 Or c.Characters(j + 1, 1).Text = "("
            c = Mid(mystr, 1, j - 1)
    End If
Next
End Sub

Wigi
 
Wigi, mijn uitleg was uiteraard niet voor jou maar voor de vragensteller bestemd. Ik ben er in mijn berichten ook niet altijd consequent in hoor, maar ik denk dat iemand meer leert door hem zelf ook een beetje moeite te laten doen, dan door pasklare oplossingen te geven (het gezegde indachtig dat je iemand in plaats van een vis beter een hengel kunt geven).
 
Wigi zei:
Voilà

Code:
Sub haalweg()
Dim c As Range, mystr As String
For Each c In Range("A1", Range("A65536").End(xlUp))
    mystr = c
    If mystr <> "" Then
        j = 1
        Do
            j = j + 1
        Loop Until j = Len(c) - 1 Or c.Characters(j + 1, 1).Text = "("
            c = Mid(mystr, 1, j - 1)
    End If
Next
End Sub

Wigi
Dit werkt perfect! Enorm bedankt!!! :thumb:

@Franç: bedankt voor de uitleg daardoor begrijp ik de code wel beter, als ik een volgende keer een soortgelijk probleem heb, zal ik het zelf proberen op te lossen. :)
 
franç zei:
Wigi, mijn uitleg was uiteraard niet voor jou maar voor de vragensteller bestemd. Ik ben er in mijn berichten ook niet altijd consequent in hoor, maar ik denk dat iemand meer leert door hem zelf ook een beetje moeite te laten doen, dan door pasklare oplossingen te geven (het gezegde indachtig dat je iemand in plaats van een vis beter een hengel kunt geven).

Ik hang datzelfde principe ook na, Franç. Mijn ervaring (als ik al van ervaring kan spreken na goed een jaar met Excel bezig te zijn) is dat je dan 2 keer kan posten: eerst met de uitleg zoals jij doet, en dan de oplossing zoals ik doe. Uiteraard is er een (klein) percentage van de vragenstellers die zelf het antwoord kan vinden. En geloof mij, ik zit op meerdere forums... Ik denk dat vele vragenstellers vooraf al ettelijke uren gewroet hebben en dan op een handig forum als dit botsen.

Dus is het een afweging: een leidraad posten zoals jij, en dan win je in het geval de vragensteller toch het antwoord zou vinden, maar verlies je (vaak) indien de vragensteller het toch niet kan of wil vinden. De andere mogelijkheid is 1 keer de oplossing posten. Met de bedoeling dat de vragensteller dan de code doorloopt en er iets van opsteekt.

't Is maar hoe je het bekijkt. Voor beide is iets te zeggen.

Wigi
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan