• 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 met logische test

  • Onderwerp starter Onderwerp starter vovo
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.
Zo doet hij wel wat de bedoeling is.
Code:
Sub tst()
With Sheets("Sheet1")
sq = .Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
    For i = UBound(sq) To 1 Step -1
        If IsNumeric(sq(i, 1)) Then x = sq(i, 1)
        If Not IsNumeric(sq(i, 1)) And sq(i, 1) <> "" Then sq(i, 1) = x
    Next
    .[I1].Resize(UBound(sq)) = sq
End With
End Sub

Hij doet 't maar niet volledig....
Hij copieert de 56...nrs niet overal.
Heb er nog even een voorbeeldje bijgestoken.

Groeten
VovoBekijk bijlage test warme bakkertje.xls
 
Zo doet hij wel wat de bedoeling is.
Code:
Sub tst()
With Sheets("Sheet1")
sq = .Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
    For i = UBound(sq) To 1 Step -1
        If IsNumeric(sq(i, 1)) Then x = sq(i, 1)
        If Not IsNumeric(sq(i, 1)) And sq(i, 1) <> "" Then sq(i, 1) = x
    Next
    .[I1].Resize(UBound(sq)) = sq
End With
End Sub
 

Bijlagen

Laatst bewerkt:
als je toch VBA wilt, omzetten van mijn #8 in VBA
Code:
Sub Macro1()
  Dim lrij     As Long
  With Sheets("sheet1")
    lrij = .Range("A" & Rows.Count).End(xlUp).Row          'laatst gebruike rij
    With .Range("I1").Resize(lrij)                         'kolom I over het ganse gebruikte bereik
      .FormulaR1C1 = "=IF(COUNTA(RC1:R" & lrij & "C1)=0,"""",IF(AND(ISNUMBER(RC1),LEN(RC1)=8),RC1,R[1]C))"  'formuletje
      .Value = .Value                                      'omzetten in waarden
    End With
  End With
End Sub
 
Beste Cow18,

al gelijk hoor vba of simpele formule. Belangrijkste is dat het werkt !

En deze vba doet het helemaal !

Hartelijk bedankt voor de moeite !
Groeten
Vovo
 
Laatst bewerkt door een moderator:
En toch geef ik het niet op :D aangezien mijn methode dubbel zo snel is als deze van Bart.
Code:
Sub tst()
With Sheets("Sheet1")
sq = .Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
    For i = UBound(sq) To 1 Step -1
        If sq(i, 1) <> "" And IsNumeric(sq(i, 1)) Then x = sq(i, 1)
        If Not IsNumeric(sq(i, 1)) Or sq(i, 1) = "" Then sq(i, 1) = x
    Next
    .[I1].Resize(UBound(sq)) = sq
End With
End Sub
 
je hebt gelijk, op bovenstaand bestandje doet mijn macro er 0.006 sec erover die van jou 0.003 sec, maw. dubbel zo snel !:thumb::D
 
0.006 ← → 0.003 sec,

Is dit soort code te meten in milliseconden. :rolleyes:
Ben benieuwd hoe jullie dat doen.

Ps: begrijp overigens niet waarom die van mij niet werkt bij vovo (misschien jullie enig idee?).
Werkt hier trouwens prima.
 
soms zijn de tijdsverschillen zo klein, dat je het zaakje 100 keer in een loop afwerkt en die tijd dan deelt door 100 om te weten wat 1 keer kost, zei warm wakkertje's code licht aangepast hieronder
Code:
Sub tst()
  t = Timer
  For j = 1 To 100
    With Sheets("Sheet1")
      sq = .Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
      For i = UBound(sq) To 1 Step -1
        If sq(i, 1) <> "" And IsNumeric(sq(i, 1)) Then x = sq(i, 1)
        If Not IsNumeric(sq(i, 1)) Or sq(i, 1) = "" Then sq(i, 1) = x
      Next
      .[I1].Resize(UBound(sq)) = sq
    End With
  Next
  MsgBox "100 loops hebben voor de methode warm bakkertje " & Timer - t & " sec geduurd"
End Sub
 
@ Harry
Ik gebruik hiervoor onderstaande Add-in, maar ik heb ooit eens een zelf geschreven code van Bart gezien (dacht ik) om de snelheid te meten
 

Bijlagen

als je de code in #19 bedoelt, dan zou ik die "Application.EnableEvents = False" van ergens de 6e lijn of zo naar voren verhuizen naar de 2e lijn, qant je verandert daar 1 en ander in dat werkblad, waardoor je die macro weer aanroept en weer aanroept, etc zodat je een tsunami aan events hebt. Op een bepaald moment heeft hij de brui eraan.
Dus ik denk gewoon te laat dat zaakje uitgeschakeld, dat moest al voor die for ... next
 
Ik had "Application.EnableEvents = False" juist daar geplaatst. de code bleef maar hangen in het begin.
Ik zal één en ander eens wijzigen of het wat uitmaakt.
Maar zoals ik al schreef, werkt de code bij mij uitstekend in het voorbeeld.

Bedankt voor jullie uitleg over de snelheid (erg mooi).
Die Add In Tool is ook mooi en makkelijk, dank daarvoor Rudi.
 
Laatst bewerkt:
En toch geef ik het niet op :D aangezien mijn methode dubbel zo snel is als deze van Bart.
Code:
Sub tst()
With Sheets("Sheet1")
sq = .Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
    For i = UBound(sq) To 1 Step -1
        If sq(i, 1) <> "" And IsNumeric(sq(i, 1)) Then x = sq(i, 1)
        If Not IsNumeric(sq(i, 1)) Or sq(i, 1) = "" Then sq(i, 1) = x
    Next
    .[I1].Resize(UBound(sq)) = sq
End With
End Sub

Deze werkt super. (en snel :D)
Bedankt Rudi !
 
Ik had "Application.EnableEvents = False" juist daar geplaatst. de code bleef maar hangen in het begin.
Ik zal één en ander eens wijzigen of het wat uitmaakt.
Maar zoals ik al schreef, werkt de code bij mij uitstekend in het voorbeeld.

Bedankt voor jullie uitleg over de snelheid (erg mooi).
Die Add In Tool is ook mooi en makkelijk, dank daarvoor Rudi.



Beste Hans,

in het voorbeeld werkt hij idd, echter in een andere nieuwe sheet doet hij het niet ?
Toch bedankt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan