Cell blank maken als niet wordt voldaan aan een lengte

Status
Niet open voor verdere reacties.

1965Peter

Gebruiker
Lid geworden
20 jun 2016
Berichten
197
Ben al een tijd aan het puzzelen maar kom er niet uit.

Ik heb een bestand, met kolommen F,G,H.

Bereik is variabel tellen regels kolom A

Als de lengte van de waarde <> 6, dan moeten de cellen "" worden.

In het bestand zou dan F2 = "" , G2 = "" H2 = 704554,
etc.

Wil wil me helpen met een code?
 

Bijlagen

Code:
Sub hsv()
Dim sv, i As Long, j As Long
sv = Cells(1).CurrentRegion.Resize(, 8)
 For i = 2 To UBound(sv)
   For j = 6 To 8
     If Len(sv(i, j)) <> 6 Then sv(i, j) = ""    [COLOR=#0000cd]' Of: if sv(i, j) < 100000 then sv(i, j) = ""[/COLOR]
   Next j
  Next i
Cells(1, 10).Resize(UBound(sv), 8) = sv     [COLOR=#0000cd] 'ter controle cells(2,10) voor je, anders cells(1)[/COLOR]
End Sub
 
Hm, moet toch eens een sneltypecursus volgen.

Code:
Sub ClearCells()
    Dim cel As Range
    For Each cel In Range("F2:H" & Columns(1).SpecialCells(xlCellTypeLastCell).Row)
        If Len(cel.Value) <> 6 Then
            cel.Value = ""
        End If
    Next
End Sub
 
En je aanleren om met array's te werken wat vele malen sneller werkt i.p.v. cel voor cel te bewerken.
 
@HSV
Zal ik aan denken, jouw methode is precies 6 keer zo snel als de mijne, 0,03125 versus 0,1875 sec., maar in beide gevallen sneller dan met je ogen knipperen.:)
 
Hsv (Harry) & Ahulpje. Zeer bedankt voor jullie input. Hiermee kan ik weer verder. Top!!!
 
tijdsmetingen van die "grootte"-orde zijn nog moeilijk interpreteerbaar als "sneller" ...
een andere optie
Code:
Sub blank()
     t = Timer
     With Sheets("Blad2")
          Set c = .Range("F1").CurrentRegion
          With .Range("F1").Resize(c.Rows.Count, 3) 'je bereik
               .Name = "peter" 'eventjes een gedefinieerde naam
               .Offset(, 6).Value = Evaluate("if(len(peter)=6,peter,"""")")  'even op een andere plaats wegschrijven om bron te behouden
            End With
     End With
     MsgBox Format(Timer - t, "0.000\s")
End Sub
 
Cow18, ook bedankt voor jouw optie.
De opties hiervoor voldoen goed, en nemen niet zoveel tijd in beslag in mijn document.
Maar wat ik wel gebruik uit jouw code is de timer :). Best wel makkelijk.
 
@cow18,
Met een bereiknaam kan het tussen haken.
Code:
.Offset(, 6).Value = [if(len(peter)=6,peter,"")]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan