• 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 codes tellen in 1 kolom

Status
Niet open voor verdere reacties.

ronsom

Gebruiker
Lid geworden
6 mrt 2012
Berichten
232
Hallo allemaal,

Ik ben op zoek naar een mogelijkheid om het aantal verschillende codes te tellen in een kolom.
In de bijlage is er een kolom die gevuld wordt door een automatische koppeling.
De codes of getallen die weggeschreven worden in kolom A wil ik graag tellen.
Ik heb al geprobeerd de tekst naar kolommen te zetten, dat lukt prima, op deze manier kan ik ook het aantal codes tellen, maar dat is eigenlijk niet wat ik zoek.
Het zou makkelijker zijn als er in kolom B naar kolom A gekeken wordt en dan het aantal codes te tellen. Tussen iedere code zit een spatie.
Misschien kan Excel tegelijk kijken dat de dubbele waarden niet dubbel geteld worden.
Ik hoop dat iemand mij hiermee wil en kan helpen.

Vriendelijke groet,

Ronsom
 

Bijlagen

Met een UDF gecombineerd met een formule.

Code:
Function VenA(s As String) As Integer
If s <> "" Then
  s = Replace(s, " .", "")
  For j = 1 To UBound(Split(s))
    If Split(s)(j) <> Split(s)(j - 1) Then VenA = VenA + 1
  Next j
End If
End Function
 

Bijlagen

Vena,

helemaal top, ik heb nu geen tijd om er verder in te duiken,maar ga dit later vandaag proberen.
Hartelijk bedankt in ieder geval

Vriendelijke groet,

Ronsom
 
Hallo Vena,

Is het ook mogelijk dat Excel kijkt of het getal niet eerder is voorgekomen.
Dan zouden de tellingen nog preciezer zijn.
In de bijlage laat ik zien wat ik daarmee bedoel.
Daar staat in rij 3 het getal 10907, deze komt ook in rij 2 voor, dus voor rij 3 geldt ook dat er 2 codes zijn en niet 3, omdat dit getal ook in rij 2 is voorgekomen.

Mocht het niet gaan hartelijk bedankt voor je hulp.

Vriendelijke groet,

Ronsom
 

Bijlagen

Laatst bewerkt:
Code:
Sub tsh()
    Dim Br, Bq
    Dim i As Long, j As Long
    
    Br = Sheets(1).UsedRange.Resize(, 2)
    With CreateObject("System.Collections.Arraylist")
        For i = 2 To UBound(Br)
            Br(i, 2) = 0
            Bq = Split(Trim(Replace(Br(i, 1), ".", "")))
            If UBound(Bq) >= 0 Then
                For j = 0 To UBound(Bq)
                    If Not .Contains(CStr(Bq(j))) Then
                        Br(i, 2) = Br(i, 2) + 1
                        .Add CStr(Bq(j))
                    End If
                Next
            Else
                Br(i, 2) = ""
            End If
        Next
    End With
    Sheets(1).UsedRange.Resize(, 2) = Br
End Sub
 
Ik had deze om het totaal van de unieke codes te bepalen.

Code:
Sub VenA1()
Dim t As Long, j As Long, jj As Long, ar, c00
ar = Sheet1.Cells(1).CurrentRegion.Resize(, 1)
  For j = 2 To UBound(ar)
    For jj = 0 To UBound(Split(Replace(ar(j, 1), " .", "")))
      If InStr(1, c00, Split(Replace(ar(j, 1), " .", ""))(jj)) = 0 Then
        t = t + 1
        c00 = c00 & Split(Replace(ar(j, 1), " .", ""))(jj)
      End If
    Next jj
  Next j
MsgBox t - 1
End Sub
 
Laatst bewerkt:
Code:
Sub M_snb()
    sn = Columns(1).SpecialCells(2)
    
    For j = 2 To UBound(sn)
       st = Split(Trim(Replace(sn(j, 1), ".", "")))
       y = UBound(st) + 1
       For jj = 0 To UBound(st)
          y = y + (InStr(c00, " " & st(jj) & " ") > 0)
          c00 = c00 & " " & st(jj) & " "
       Next
       sn(j, 1) = y
    Next
    
     Columns(1).SpecialCells(2).Offset(,1) = sn
End Sub
 
Hallo allemaal,

Wat een reacties, ik ben er erg blij mee. Ik ga met de codes aan de slag en ga de gene gebruiken die het meest in mijn project past waar ik mee bezig ben. Nogmaals hartelijk dank.

Vriendelijke groet,

Ronsom
 
Het moet toch ook met 1 lus kunnen:
Code:
Sub M_snb()
   sn = Split(Replace(Replace(Join(Application.Transpose(Columns(1).SpecialCells(2)), " ~") & " ~", ".", ""), "  ", " "))
   sp = Columns(1).SpecialCells(2).Offset(, 1)
   
   For j = 2 To UBound(sn)
       If sn(j) = "~" Then
           x = x + 1
           sp(x, 1) = y
           y = 0
        Else
           y = y - (InStr(c00, sn(j)) = 0)
           c00 = c00 & " " & sn(j) & " "
       End If
   Next
   
   Columns(1).SpecialCells(2).Offset(1, 1) = sp
End Sub
 
Hallo allemaal,

Ik durf het bijna niet meer te vragen maar ik loop toch weer vast.
In mijn project is er een tabel met de codes. Deze codes zijn gekoppeld aan een activiteit.
De codes kunnen bij iedere activiteit voorkomen. Mijn vraag is of er ook gekeken worden naar de activiteit.
In de bijlage de in Kolom A en B de oude situatie, in kolom D de situatie met een activiteit.
Als de code al een keer is voorgekomen maar dit valt onder een andere activiteit mag hij wel geteld worden.
Is dit voor elkaar te krijgen.

Vriendelijke groet,

Ronsom
 

Bijlagen

Jouw 'tabel' wijkt zo af van wat een zinvolle toepassing lijkt, dat ik betwijfel of het wel een representatief voorbeeld is. Het risico is levensgroot dat een suggestie dadelijk weer geheel de mist ingaat.
Maak het jezelf gemakkelijk: maak het de helpers gemakkelijk ! Plaats iets realistisch.
 
Snb,

Ik begrijp de irritatie, ik ga proberen in de loop van de dag met een voorbeeld te komen waar jullie als helpers iets mee kunnen.
Tenminste als jullie me nog willen helpen met deze vraag.
De ontvangen codes doen het prima in mijn bestand, ik dacht dat ik het daarmee zou redden.
Alleen er waren meer variabelen die invloed hadden op de uitkomst van de code.
Een goede duidelijke vraag is nu eenmaal geen sterk punt van mij.

Vriendelijke groet,

Ronsom
 
Hallo allemaal,

Ik heb in de bijlage een bestand staan wat denk ik goed laat zien wat ik bedoel.
Ik ben op zoek naar een code die het aantal codes in de kolom met de naam ´container´ telt en wegschrijft naar de kolom met de naam ´aantal containers´.
De code moet eigenlijk naar 3 variabelen kijken. Er moet gekeken worden of het getal al eerder is voorgekomen in de kolom met de naam container.
Maar er moet ook naar datum en activiteit gekeken worden.
In het voorbeeldbestand laat rij 3 zien dat datum-activiteit gelijk zijn aan rij 2 alleen het getal 117 is anders, deze code mag hij dan tellen, de andere 2 codes niet want die zijn al in rij 2 voorgekomen en dus geteld.
Rij 4 is gelijk aan rij 2 dus er mogen geen codes geteld worden.
Rij 5 heeft dezelfde codes en dezelfde datum, alleen een andere activiteit en dus mogen de codes geteld worden.
Rij 6 heeft een andere datum met dezelfde activiteit en dezelfde codes en dus mogen de codes geteld worden.
Ik hoop dat mijn vraagstelling in combinatie met het voorbeeldbestand duidelijk genoeg zijn.
Als dit lukt wil ik met draaitabellen het aantal containers tellen per activiteit en per dag.

Vriendelijke groet,

Ronsom
 

Bijlagen

Code:
Sub tsh()
    Dim Br, Bq
    Dim i As Long, j As Long
    
    Br = Sheets(1).ListObjects(1).DataBodyRange
    With CreateObject("System.Collections.Arraylist")
        For i = 1 To UBound(Br)
            Br(i, 20) = 0
            Bq = Split(Trim(Replace(Br(i, 11), ".", "")))
            For j = 0 To UBound(Bq)
                If Not .Contains(CStr(Bq(j)) & "_" & Br(i, 6) & "_" & Br(i, 1)) Then Br(i, 20) = Br(i, 20) + 1
                .Add CStr(Bq(j)) & "_" & Br(i, 6) & "_" & Br(i, 1)
            Next
        Next
    End With
    Sheets(1).ListObjects(1).DataBodyRange = Br
End Sub
 
Timshel,

Je code werkt perfect, ik heb het toepast in mijn project en kan nu met draaitabellen op dag niveau per activiteit het aantal containers tellen.
Helemaal top.
Hartelijk dank hiervoor.
Ik sluit deze topic en wil ook alle andere helpers hartelijk bedanken voor hun hulp en geduld.

Vriendelijke groet,

Ronsom.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan