Complexe zoek en vevangroutine

Status
Niet open voor verdere reacties.

Plotinus

Gebruiker
Lid geworden
25 mrt 2007
Berichten
649
In een steeds verder uitdijende tabel moet ik een zoek- en vervangoparatie uitvoeren. Dat is gelukt:
Code:
Sub Makro()
    Dim Rijen As Long
    Dim i As Long
    
    Application.ScreenUpdating = False
    Sheets("Alle data samen").Select
    Rijen = Worksheets("Alle data samen").Range("A" & Rows.Count).End(xlUp).Row
  
    For i = 2 To Rijen
        Tekst_B = Mid(Cells(i, 2), 1, 3)
        If Tekst_B = "[B]adm[/B]" And Cells(i, 25).Value = "Toezicht" Then Cells(i, 25).[B]FormulaR1C1[/B] = "Administratief"
        If Tekst_B = "[B]Adm"[/B] And Cells(i, 25).Value = "Toezicht" Then Cells(i, 25).[B]FormulaR1C1[/B] = "Administratief"
    Next i
    Application.ScreenUpdating = True
End Sub

Een paar zaken zitten em echter niet lekken:
- Ik zou de if-constructie's samen willen voegen met een 'OR', maar dat lukt me niet.
- Ik heb begrepen dat de functie 'FormulaR1C1' best zo veel mogelijk vermeden wordt. Ik weet echter niet hoe dat moet.

Iemand een idee hoe bovenstaande uitdagingen op te lossen? Oogmerk is makro zo snel mogelijk maken want de tabel kan meer dan 300.000 rijen gaan bevatten
 
nctie 'FormulaR1C1' best zo veel mogelijk vermeden wordt. Ik weet echter niet hoe dat moet.
En tóch gebruik je de juiste oplossing al in je formule (sterker nog: twee keer achter elkaar in zo te zien exact dezelfde formule :)
PHP:
     If Tekst_B = "adm" And Cells(i, 25).Value = "Toezicht" Then Cells(i, 25).[B]Value[/B] = "Administratief"

Maar ik zie nergens waar de OR zou moeten komen!
 
@OctaFish,

adm <> Adm

Code:
If [COLOR=#0000ff]lcase(tekst_B)[/COLOR] = "adm" And Cells(i, 25).Value = "Toezicht" Then Cells(i, 25) = "Administratief"
 
In navolging van HSV, probeer het eens zo:
Code:
Sub Makro()
    Application.ScreenUpdating = False
    With Sheets("Alle data samen")
        For i = 2 To .Range("A" & .Rows.Count).End(xlUp).Row
            If LCase(Left(.Cells(i, 2), 3)) = "adm" And .Cells(i, 25).Value = "Toezicht" Then .Cells(i, 25) = "Administratief"
        Next i
    End With
    Application.ScreenUpdating = True
End Sub
 
Laatst bewerkt:
Of:


Code:
Sub hsv()
Sheets("Alle data samen").Cells(1).CurrentRegion.Columns(2).Offset(1).Name = "br"
 [br].Offset(, 21) = [if((mid(br,1,3)="adm")*(offset(br,,21)="Toezicht"),"Administratief", if(offset(br,,21)="","",offset(br,,21)))]
End Sub
 
Hartelijk dank voor de reacties. Uiteindelijk heb ik de code van Edmoor gebruikt, want het best te begrijpen.
 
Code:
Sub M_snb()
   With Sheets("Alle data samen").Cells(1).CurrentRegion
      .AutoFilter 2, "adm*"
      .AutoFilter 25, "toezicht"
      .Columns(25).Replace "Toezicht", "Administratief", 1
      .AutoFilter
   End With
End Sub
 
Dank snb! Nog gemakkelijker te begrijpen en ook iets sneller, al is het verwaarloosbaar.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan