• 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.

Aantal tellen in 1 cel, met komma als scheidingsteken

Status
Niet open voor verdere reacties.

toverkamp

Gebruiker
Lid geworden
11 sep 2006
Berichten
403
Hallo forumleden,

Ik heb in een cel (A1) de volgende waarde staan:
1,3,5

Deze waarde kan elke keer verschillen, maar er zit tussen elk cijfer een komma tussen. Nu wou ik in cel B1 een code hebben staan die het aantal cijfers telt. Dus dat is in dit geval 3. Weet iemand welke code ik hiervooor kan gebruiken?

Alvast bedankt!!
 
Code:
=LENGTE(A1)-LENGTE(SUBSTITUEREN(A1;",";""))+1

Wigi
 
Thnx wigi het werkt:D

Nu kom ik gelijk op een ander issue.. Ik voer eerder altijd maar 1 kassanummer in. Dus kon ik mbv de autofilter en filiaalnummer makkelijk alle storingen per filiaal én kassanummer bekijken in het werkblad reactietijden. Hier staan alle storingen in. Door de onderstaande code (jouw code) kon ik alle storingen per filiaal en kassanummer bekijken:
Code:
Private Sub overzichtstoringen_Click()

'alle storingen van deze kassa worden weergegeven in een nieuw userform

storingoverzich1.overzichtstoringid.Text = gegevensfiliaalformulier.gegkassanummer.Text
storingoverzich1.storingoverzichtkassanr.Text = gegevensfiliaalformulier.gegidnummer.Text
storingoverzich1.storingoverzichtfiliaalnr.Text = gegevensfiliaalformulier.gegfiliaalnummeridgegevens.Text


Dim c As Range, filteredRange As Range
    With Sheets("reactietijden").Range("g31").CurrentRegion
        .AutoFilter
        .AutoFilter Field:=5, Criteria1:=gegevensfiliaalformulier.gegfiliaalnummeridgegevens.Text
        .AutoFilter Field:=6, Criteria1:=gegevensfiliaalformulier.gegkassanummer.Text

    End With
    
    With Sheets("reactietijden").AutoFilter.Range
        On Error Resume Next
        Set filteredRange = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
    End With
    
    For Each c In Intersect(filteredRange, Sheets("reactietijden").Columns(2))
        storingoverzich1.datumstoringoverzichtlist.AddItem c
    Next
    For Each c In Intersect(filteredRange, Sheets("reactietijden").Columns(27))
        storingoverzich1.soortstoringstoringoverzichtlist.AddItem c
    Next
    For Each c In Intersect(filteredRange, Sheets("reactietijden").Columns(53))
        storingoverzich1.reparatiestoringoverzichtlist.AddItem c
    Next
    For Each c In Intersect(filteredRange, Sheets("reactietijden").Columns(55))
        storingoverzich1.reparatiestoringoverzichtlist1.AddItem c
    Next

storingoverzich1.Show

End Sub

in field6 staan de kassanummers. Maar aangezien deze nu met komma's gescheiden zijn kun je dus niet meer op 1 kassanummer zoeken. Is het mogelijk om toch het kassanummer te vinden als er bijvoorbeeld 1,3,5 in een cel staat in het werkblad reactietijden. M.a.w. hoe pas je deze code aan om toch bijvoorbeeld kassa 1 te vinden van een bepaald filiaalnummer?
 
Je kan toch filteren op een deel van een cel? Bv. "bevat" en dan je zoekwaarde.
 
Je kan toch filteren op een deel van een cel? Bv. "bevat" en dan je zoekwaarde.

Code:
.AutoFilter Field:=6, Criteria1:=gegevensfiliaalformulier.gegkassanummer.Text
Ja dat zou kunnen, maar wanneer ik met bevat doe dan voer je een standaardgegeven in, terwijl dit elke keer verschillend is. De ene keer is het kassa 1, en de andere keer weer kassa 2. Is het ook mogelijk om dit variabel te doen?
 
Code:
.AutoFilter Field:=6, Criteria1:=gegevensfiliaalformulier.gegkassanummer.Text
Ja dat zou kunnen, maar wanneer ik met bevat doe dan voer je een standaardgegeven in, terwijl dit elke keer verschillend is. De ene keer is het kassa 1, en de andere keer weer kassa 2. Is het ook mogelijk om dit variabel te doen?

Neem de code op met de macro recorder, en maak de invoer dan variabel door bv. een variabele te gebruiken.
 
Hallo wigi,

met behulp van de macrorecorder heb ik de onderstaande code toegepast:
Code:
.AutoFilter Field:=6, Criteria1:="=*[B]gegevensfiliaalformulier.gegkassanummer.text[/B]*", Operator:=xlAnd

Het vetgedrukte gedeelte is het variabele gedeelte. In het formulier waarvan het kassanummer vandaan moet worden gehaald heet: gegevensfiliaalformulier
De textbox waar het kassanummer in staat heet: gegkassanummer

Ik krijg nu alleen geen resultaat. Als ik ipv gegevensfiliaalformulier.gegkassanummer.text bijvoorbeeld 2 invoer werkt het wel, maar dan is het niet meer variabel.
 
Je criterium

="=*gegevensfiliaalformulier.gegkassanummer.text*"

is nu vast (het is een string)

Maak het variabel door het variabele gedeelte uit de haakjes te halen.
 
Wigi,
ik heb hem nu kloppend:
Code:
.AutoFilter Field:=6, Criteria1:="*" & gegevensfiliaalformulier.gegkassanummer.Text & "*"

Alleen het probleem is nu dat ook als je bijvoorbeeld op kassanummer 1 sorteerd, ook 10, 11, 21 wordt meegenomen. Dit is uiteraard niet de bedoeling. Heeft u enig idee hoe ik dat kan aanpassen? Dus dat hij echt alleen 1 meepakt
 
Ik dacht eerst:

Voor het getal 1 bijvoorbeeld, filter dan op zowel

1,

als

,1

Idem voor andere getallen.

Maar dit werkt ook niet.

Feit is dat je jezelf in de problemen werkt met die notatie van 1,3,5.

Enige uitwegen die ik zie:

- Data > Tekst naar kolommen
- De mogelijkheden eens op een rijtje zetten qua komma's en daar een patroon in vinden

Wigi
 
Ik dacht eerst:

Voor het getal 1 bijvoorbeeld, filter dan op zowel

1,

als

,1

Idem voor andere getallen.

Maar dit werkt ook niet.

Feit is dat je jezelf in de problemen werkt met die notatie van 1,3,5.

Enige uitwegen die ik zie:

- Data > Tekst naar kolommen
- De mogelijkheden eens op een rijtje zetten qua komma's en daar een patroon in vinden

Wigi

Dank voor uw reactie! Maar is het wel mogelijk wanneer ik met een andere notatie werk? Want dat kan ook wel.

toverkamp
 
Dank voor uw reactie! Maar is het wel mogelijk wanneer ik met een andere notatie werk? Want dat kan ook wel.

toverkamp

In verschillende kolommen werken misschien? En dan op meerdere kolommen dezelfde filter toepassen.
 
Nee helaas, dat is geen optie. Er zit dan vrees ik niets anders op deze zoekfuntie niet waterdicht te krijgen:confused: Als u nog een oplossing heeft dan hoor ik het graag! In ieder geval hardstike bedankt!
 
Nee helaas, dat is geen optie. Er zit dan vrees ik niets anders op deze zoekfuntie niet waterdicht te krijgen:confused: Als u nog een oplossing heeft dan hoor ik het graag! In ieder geval hardstike bedankt!

Je kan door de filter toepassen, en daarna door de rijen van de desbetreffende kolom lopen (loopen :D) Als voldaan is aan de criteria, verberg de rij niet, anders wel.

Je Autofilter werkt dan natuurlijk ook niet 100% meer...
 
Je kan door de filter toepassen, en daarna door de rijen van de desbetreffende kolom lopen (loopen :D) Als voldaan is aan de criteria, verberg de rij niet, anders wel.

Je Autofilter werkt dan natuurlijk ook niet 100% meer...

Dank wigi, ik ben er mee bezig geweest, maar ik kom er niet uit hoe dat loopen nou precies werkt:shocked: Misschien kunt u mij een voorzetje geven;)
 
Ik ben toch overstag gegaan... Ik heb 30 verschillende kolommen gemaakt. Dus kassa 1 t/m 30. Dit zijn de kolommen G t/m AJ. In G worden alle storingen aan kassa 1 opgeslagen en in AJ alle storingen aan kassa 30 (als die er uberhaupt is).

Zoals je in mijn printscrean kunt zien worden alle kassa's die je aanvinkt met een komma gescheiden in een textbox geplaatst. Hoe kan ik de code "Opslaan" zodanig aanpassen dat de juiste kassa in de juiste kolom terecht komt?

de huidige code voor het opslaan is:
Code:
'zorg ervoor dat gegevens op een lege regel worden opgeslagen
legeregel = Worksheets("Reactietijden").Range("B" & Rows.Count).End(xlUp).Row + 1

'wat gaan we opslaan
dagmelding = Storingsformulier.dagmel.Value
maandmelding = Storingsformulier.maandmel.Value
jaarmelding = Storingsformulier.jaarmel.Value
datummelding = dagmelding & "-" & maandmelding & "-" & jaarmelding
tijdmelding = tijdmeluur & ":" & tijdmelmin
ordernummer = ordernummerstoring.Value
[B]kassanummer = kassanummerstoringmeldingtb.Value[/B]
soortstoring = Storingsformulier.soortstoring.Value

'zorg voor de juiste format
datummelding = Format(datummelding, "mm-dd-yy")
tijdmelding = Format(tijdmelding, "[h:mm]")

Dim X As Integer
X = legeregel

With Worksheets("Reactietijden")
       .Range("b" & X) = datummelding
       .Range("e" & X) = tijdmelding
       .Range("f" & X) = filiaalnummer
       .Range("H" & X) = ordernummer
       .Range("aa" & X) = soortstoring
       .Range("ap" & X) = beschikbaar
       [COLOR="SeaGreen"]'Dit moet kolom G t/m AJ worden, maar wel dat kassa 1 in G wordt opgeslagen en 2 in H.. enz.[/COLOR]      
       [B] .Range("g" & X) = kassanummer[/B]
End With

MsgBox "Gegevens zijn opgeslagen"
End If
 

Bijlagen

  • meldstoring prntscrn.JPG
    meldstoring prntscrn.JPG
    12,6 KB · Weergaven: 65
Laatst bewerkt:
Gebruik de .Offset eigenschap.

.Offset gebruik lijkt mij trouwens ook veel beter voor het zetten van de overige informatie.

BTW, X is een Long en geen Integer.

Wigi
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan