Próbuję uzyskać szybszy i wydajniejszy kod niż ten, ponieważ zakres będzie się znacznie zwiększał w czasie, więc będę musiał zastąpić każdy z nich.

Makro wyszukałoby wartość „poniedziałek” w każdej komórce kolumny i, jeśli zostanie znalezione, zwróci wartość „Odejmowanie” z poprzedniej komórki w kolumnie A.

Sub ForEachTest()

Dim Rng As Range

Set Rng = Range("B3:B1000")

For Each cell In Rng

  If cell.Value = "Monday" Then
     cell.Offset(0, -1) = "Substract"
  End If

Next cell

End Sub
0
Jorge 31 marzec 2020, 23:26

3 odpowiedzi

Najlepsza odpowiedź

Pętla w VBA zamiast w arkuszu:

Sub faster()
    Dim arr()

    arr = Range("A3:B1000")

    For i = LBound(arr, 1) To UBound(arr, 1)
        If arr(i, 2) = "Monday" Then arr(i, 1) = "Substract"
    Next i

    Range("A3:B1000") = arr
End Sub

EDYCJA NR 1:

Ta wersja jest odpowiedzią na obawę BigBen, że kolumna B nie powinna zostać nadpisana w celu zachowania jakichkolwiek formuł w tej kolumnie. Tylko kolumna A jest tutaj zastępowana:

Sub faster2()
    Dim arr(), brr()

    arr = Range("A3:A1000")
    brr = Range("B3:B1000")

    For i = LBound(brr, 1) To UBound(brr, 1)
        If brr(i, 1) = "Monday" Then arr(i, 1) = "Substract"
    Next i

    Range("A3:A1000") = arr
End Sub
3
Gary's Student 4 kwiecień 2020, 17:34

Możesz uniknąć pętli, filtrując dane i pracując z wynikowym widocznym zestawem danych.

To tylko zmodyfikuje komórki w Column A, gdy Column B = Monday. Wszystkie inne komórki pozostają niezmienione


Sub Shelter_In_Place()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
lr As Long

lr = ws.Range("B" & ws.Rows.Count).End(xlUp).Row
ws.Range("A1:B" & lr).AutoFilter Field:=2, Criteria1:="Monday"
ws.Range("A2:A" & lr).SpecialCells(xlCellTypeVisible).Value = "Subtract"

ws.AutoFilterMode = False

End Sub
3
urdearboy 31 marzec 2020, 20:39

Spróbuj użyć oceny

Sub Test()
With Range("A3:A" & Cells(Rows.Count, 2).End(xlUp).Row)
    .Value = Evaluate("IF(" & .Offset(, 1).Address & "=""Monday"",""Substract"","""")")
End With
End Sub
1
YasserKhalil 1 kwiecień 2020, 07:04