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

formule om consistentie van een index te controleren

Status
Niet open voor verdere reacties.
@snb: goede vinding (wet van de afnemende meeropbrengst)! Dat zal ongetwijfeld.
Zou je nog kunnen uitleggen waarom het niet werkt bij alle deca-getallen? 1.10, 1.20, 1.30?
Dat is inderdaad makkelijk op het oog te controleren, maar ben benieuwd naar het 'waarom'.

@wher: bij regel 257 zou er ook een lege cel moeten verschijnen, dat gebeurt niet met deze formule.
Wel weer een impressive formule. Nog een idee over het folder/document verhaal?
 
De laatste formule werkt wel met cijfers die uit meeer dan karakter bestaan.
De beste manier om erachter te komen hoe een formule werkt is hem te analyseren.
De wet van de afnemende meeropbrengst komt uit de economische theorie.
 
Dat had ik dan toch moeten weten. Ik ken alleen de Engelse term daarvoor denk ik :)

Ik krijg ONWAAR / FALSE te zien bij rij 45 (1.1.6.1.20), rij 102 (1.4.3.10), rij 151 (3.1.1.10), enz.

Dank.


Ik heb trouwens een idee voor het opsporen van de folders/documenten, maar bij de laatste vergelijking loop ik vast.

(VB met wat de uitkomst moet zijn:
1 F
1.1 D
1.2 D
1.3 D
2 F
2.1 F
2.1.1 D
2.2 F
2.3 F
3 F
)

1. Als de lengte van een cel 1 is -> Folder
=ALS(LENGTE(G146=1);"Folder")
2. Als de lengte van een cel 0 is -> ""
3. Als de lengte van de bovenliggende cel 2 meer is dan de onderliggende cel
EN de lengte van de bovenliggende cel 2 minder is dan de daar bovenliggende cel -> Document

4. Als de lengte van de bovenliggende cel 2 meer is dan de onderliggende cel
EN (hier loop ik vast:) de eerst volgende cel naar beneden een waarde heeft die 2 lager is -> Folder
 
Dit is typisch zo'n gevalletje waarin VBA aangewezen is:

Code:
Sub M_snb()
  sn = Cells(3, 1).CurrentRegion.Resize(, 3)
  
  For j = 2 To UBound(sn)
    If UBound(Split(sn(j, 1), ".")) > UBound(Split(sn(j - 1, 1), ".")) Then
      sn(j, 2) = Split(sn(j, 1), ".")(UBound(Split(sn(j, 1), "."))) = "1"
    Else
      sn(j, 2) = Split(sn(j, 1), ".")(UBound(Split(sn(j, 1), "."))) - Split(sn(j - 1, 1), ".")(UBound(Split(sn(j, 1), "."))) = 1
    End If
  Next
  
  Cells(3, 1).CurrentRegion.Resize(, 3) = sn
End Sub
 
Gelukkig bestaan er geen domme vragen: hoe pas ik deze VB data toe?
Geen ervaring mee.
 
@citizen81 Je bent bezig om iemand zijn vraag over te nemen hetgeen niet is toegestaan op Helpmij.
 
Huib je vergist je: studenthms had juist ingebroken in de draad van citizen. We zitten hier nl. op pagina 2. Kijk svp. eens naar de eerste post in deze draad....
 
Excuses berichten hersteld.
 
Bedankt! Die werkt inderdaad als een trein.
Als ik een andere index zou willen controleren, hoe moet ik dan te werk gaan?
Hij geeft dan een error (fout 13, typen komen niet overeen met elkaar).

Gr,
Jasper
 
Welke andere index ?

Hoe te werk gaan ?
Stap voor stap analyseren wat de code doet (is niet veel werk met zo'n klein gevalletje).
Daarna kun je hetzelfde principe op willekeurig welke index toepassen.
 
Reactie op post 29:

Om te voorkomen dat:
1
1.1.1 een waar oplevert kleine toevoeging:
Code:
Sub M_snb()
  sn = Sheets(1).Cells(1).CurrentRegion.Resize(, 3)
  For j = 2 To UBound(sn)
    sp01 = Split(sn(j - 1, 1), ".")
    sp02 = Split(sn(j, 1), ".")
    [COLOR="#FF0000"]If UBound(sp02) - UBound(sp01) > 1 Then
        sn(j, 2) = False[/COLOR]
    [COLOR="#FF0000"]Else[/COLOR]If UBound(sp02) > UBound(sp01) Then
      sn(j, 2) = sp02(UBound(sp02)) = "1"
    Else
      sn(j, 2) = sp02(UBound(sp02)) - sp01(UBound(sp02)) = 1
    End If
  Next
  Sheets(1).Cells(3, 1).CurrentRegion.Resize(, 3) = sn
End Sub
 
Laatst bewerkt:
dat zou ik anders doen:

Code:
Sub M_snb()
  sn = Sheets(1).Cells(1).CurrentRegion.Resize(, 3)

  For j = 2 To UBound(sn)
    sp01 = Split(sn(j - 1, 1), ".")
    sp02 = Split(sn(j, 1), ".")

    If UBound(sp02) > UBound(sp01) Then
      sn(j, 2) = UBound(sp02)-UBound(sp01)=1 and sp02(UBound(sp02)) = "1"
    Else
      sn(j, 2) = sp02(UBound(sp02)) - sp01(UBound(sp02)) = 1
    End If
  Next

  Sheets(1).Cells(3, 1).CurrentRegion.Resize(, 3) = sn
End Sub
 
Ook ik kende eens geen VBA.
Toch is daar verandering in gekomen.....
 
Heb het vroeger op mijn studie wel gehad, maar nu is het geheimtaal voor me geworden.
Ik zal me er eens in gaan verdiepen. Haha.
Dank.
 
Maar voordat ik VB beheers, kan iemand me hiermee helpen?
Elke willekeurige andere index die ik in kolom 1 kopieer levert de volgende foutmelding op:

error.png

Zou heel fijn zijn.

Gr,
Jasper
 
en om dit te voorkomen
1.3.1
1.3.2.1 WAAR
en:
1.1.2
1.3.2.1 WAAR
Code:
Sub M_snb()
    sn = Sheets(1).Cells(1).CurrentRegion.Resize(, 3)
    For j = 2 To UBound(sn)
        sp01 = Split(sn(j - 1, 1), ".")
        sp02 = Split(sn(j, 1), ".")
        If UBound(sp02) - UBound(sp01) <= 1 Then
            For n = 0 To UBound(sp02) - 1
                If sp02(n) <> sp01(n) Then sn(j, 2) = False: Exit For
            Next n
            If UBound(sp02) > UBound(sp01) Then
                sn(j, 2) = (sp02(UBound(sp02)) = "1") And sn(j, 2)
            Else
                sn(j, 2) = (sp02(UBound(sp02)) - sp01(UBound(sp02)) = 1) And sn(j, 2)
            End If
        Else
            sn(j, 2) = False
        End If
    Next
    Sheets(1).Cells(3, 1).CurrentRegion.Resize(, 3) = sn
End Sub
 
Laatst bewerkt:
misschien kun je het met een function proberen:
Code:
Function F_snb(sn As Range) As Boolean
    F_snb = False
    If sn.Row = 1 Then
        If sn = "1" Then F_snb = True
    Else
        sp01 = Split(sn.Offset(-1, 0), ".")
        sp02 = Split(sn, ".")
        If UBound(sp02) - UBound(sp01) <= 1 Then
            For n = 0 To UBound(sp02) - 1
                If sp02(n) <> sp01(n) Then Exit Function
            Next n
            If UBound(sp02) > UBound(sp01) Then
                F_snb = (sp02(UBound(sp02)) = "1")
            Else
                F_snb = (sp02(UBound(sp02)) - sp01(UBound(sp02)) = 1)
            End If
        End If
    End If
End Function
Bekijk bijlage __Consistentie controle snb2.xlsm
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan