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

Leeg is niet leeg

Status
Niet open voor verdere reacties.

Oude leerling

Gebruiker
Lid geworden
30 aug 2010
Berichten
566
Geacht forum ,

De formule =ALS(A1=0;"";A1) laat , als A1 nul is , toch iets in de betreffende cel achter. Wat?? Ik weet het niet.
XlUp in VBA ziet deze cel echter als niet leeg maar met de delete-knop wel
Kan ik met de ALS-functie deze cel wel echt leeg krijgen.

Vriendelijke groet, Jaap
 
De formule laat een lege string achter. En dat is wel degelijk "iets"...
 
End(xlup) ziet een formule in die cel.
 
Bv.
=aantalarg(a1;a10) telt gewoon alle formules die geen waarde retour geven.

Als er twee formules een waarde retour geven.
=aantal.lege.cellen(a1:a10) = 8
=aantalarg(a1:a10)-aantal.lege.cellen(a1:a10) = 2.
 
Het draait weer om de details:
ISLEEG vindt een cel niet leeg als er een formule in staat die resulteert in "",
terwijl AANTAL.LEGE.CELLEN zo'n cel wel als leeg telt.

Het antwoord op de vraag of je een cel met een formule écht leeg kunt krijgen, is dus: nee.
 
'Leeg' is geen begrip maar een definitie.
Een definitie is een afspraak.
Er kan op verschillende momenten, voor verschillende doeleinden een afzonderlijke afspraak over de defintie 'leeg' worden gemaakt.
Het begrip 'leeg' kan op die manier iets anders betekenen in VBA dan in Excel of in Word.

Dat zie je bijvoorbeeld ook bij de Excelformule 'trim' en de VBA funktie 'trim', of bij de Excelfunktie 'Mod' en de VBA funktie 'Mod'.
Het begrip 'echt leeg' bestaat noch in Excel, noch in VBA.
 
@MB

Door naar de volgende ronde !

Wat ons bij terugbrengt bij de essentie van iedere taal.
 
Je geeft antwoord op je eigen vraag...
 
Nee, ik wil graag weten wat hoe snb erover denkt.
 
Ik heb mijn vermoedens dat deze vraag gaat over:
Ik heb een kolom met formules.
Van die kolom met formules wil ik de laatst ingevulde cel vinden.

"End(xlup) in Vba ziet de cel niet als leeg."

Ik ga het ook nog niet beantwoorden voor er meer duidelijkheid over de vraag is natuurlijk. :d
 
En de waarde Null, Empty, vbNullChar, vbNullString?

Zijn de operationalisaties van gedefinieerde begrippen voor verschillende verschijnselen: stringvariabelen, objectvariabelen, ranges van een werkboek, etc.

In principe hoeven deze begrippen en hun operationalisaties niets met elkaar te maken te hebben.
De begrippen zijn blijkbaar zo verschillend van elkaar dat MS het nodig vond er aparte operationalisaties van/voor te maken.

Het Nederlandse woord 'leeg' is te weinig specifiek om wiskundig te operationaliseren.
Bijv.
- aan iets is nog nooit iets toegewezen
- aan iets is 'niets' toegewezen
- aan iets is 'leeg' toegewezen
- uit iets is het toegewezene verwijderd
- het toegewezene is vervangen door 'niets'

Ook al zou je kunnen zeggen dat het resultaat 'gelijk' is, dan kan het nog van belang zijn door het gebruik van verschillende begrippen het proces dat tot dat resultaat geleid heeft te onderscheiden.
Bijv. Een objectvariable kan leeg zijn, maar toch doet de opdracht 'is nothing' wat op geheugennivo.
 
En de waarde Null, Empty, vbNullChar, vbNullString?

Null, Empty, Nothing, Is zijn keywords: https://msdn.microsoft.com/en-us/library/office/jj692803.aspx

vbEmpty, vbNull, vbNullChar, vbNullstring zijn constanten: https://msdn.microsoft.com/en-us/library/office/jj692807.aspx

IsNull, IsEmpty zijn functies: https://msdn.microsoft.com/en-us/library/office/jj692811.aspx

Voorspel het resultaat van de volgende code. Stap er doorheen en kijk in het venster Lokale Variabelen hoe v verandert.

Code:
Sub test()

    Dim v As Variant
    
    v = vbNullString
    Debug.Print IsNull(v), IsEmpty(v), "X"; v; "X"
    
    v = ""
    Debug.Print IsNull(v), IsEmpty(v), "X"; v; "X"
    
    v = vbNullChar
    Debug.Print IsNull(v), IsEmpty(v), "X"; v; "X"
    
    v = Null
    Debug.Print IsNull(v), IsEmpty(v), "X"; v; "X"
    
    Set v = Nothing
    Debug.Print v Is Nothing
    Debug.Print IsNull(v), IsEmpty(v), "X"; v; "X"
    
End Sub

VBA is een taal die je moet leren met...
 
Dank je. Maar ik weet wel hoe het in elkaar steekt en hoe en wanneer het te gebruiken. Ik was alleen even benieuwd naar de mening van SNB erover vanwege zijn stelling dat echt leeg in VBA niet bestaat en ik zijn kennis van zaken m.b.t. VBA respecteer.
 
Dat was een hele discussie , maar even terug naar mijn vraag.
Ik heb begrepen dat het met een =ALS-functie niet op te lossen is.
edmoor heeft indertijd een oplossing geboden met VBA , zie variabel selecteren d.d.6 Maart.
Daar was ik op aan het doorborduren , zoekende naar een kortere oplossing , en stuitte toen
op het probleem dat leeg niet leeg was.
Misschien is er toch nog een andere oplossing , doorbordurend op onderstaande macro

Sub Macro3()
Range("J10", Range("J1").End(xlDown)).Copy
Range("B3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
Application.CutCopyMode = False
End Sub

zie de bijlage.

JaapBekijk bijlage Variabel selecteren 2.xlsm
 
Laatst bewerkt:
Code:
Sub M_snb()
    With Blad1.Range("K4:k10")
      .SpecialCells(-4123).Value = .SpecialCells(-4123).Value
      With .SpecialCells(2)
           Blad1.Cells(Rows.Count, 2).End(xlUp).Offset(1).Resize(.Count) = .Value
       End With
    End With
End Sub
 
Het werkt maar haalt ook de formules weg uit kolom K zodat een 2e keer het niet meer functioneert.
 
Wellicht had je dit willen vragen:
Code:
Sub GetallenNaarB3()
    Dim inp
    Dim t1%, t2%
    inp = Range("K4:K10")
    For t1 = 1 To 7
        If inp(t1, 1) <> "" Then
            Range("B3").Offset(t2, 0).Value = inp(t1, 1)
            t2 = t2 + 1
        End If
    Next t1
End Sub
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan