Cómo aplicar fórmula a celdas con valor

Cómo aplicar fórmula a celdas con valor

Estoy usando vba y logré aplicar el siguiente código para agregar 'A' a las celdas en el valor de cada columna (X, AK, AW).

ActiveSheet.Range("X2:X24").Select
For Each X In Selection
If X.Value <> "" Then X.Value = X.Value & "A"
Next
ActiveSheet.Range("AK2:AK24").Select
For Each AK In Selection
If AK.Value <> "" Then AK.Value = AK.Value & "A"
Next
ActiveSheet.Range("AW2:AW24").Select
For Each AW In Selection
If AW.Value <> "" Then AW.Value = AW.Value & "A"

Sin embargo, ahora estoy intentando aplicar las siguientes fórmulas a las columnas Y, Z, AA y AB. Solo quiero que esto se aplique desde la segunda celda hacia abajo y solo para las celdas que tienen valor. Entonces, desde Y2 hacia abajo, a menos que la celda esté vacía. ¡Parece que no puedo hacerlo funcionar!

=TODAY()-1     

=TEXT(TODAY(),"YYYYMM")

=TEXT(TODAY(),"MMM YYYY")

Respuesta1

Esto determinará dinámicamente la última fila utilizada con datos en la columna Y

Copia el rango A2:BA+lastRow en una matriz, repite cada fila y asigna cada fórmula por columna (si la celda no está vacía). Luego coloca la matriz nuevamente en el rango.


Option Explicit

Public Sub SetFormulasToNonEmptyCells()

  Dim ur As Range, arr As Variant, r As Long

  'The selected columns start at A (col 1) to BA (col 53)
  Set ur = Sheet1.Range("A2:BA" & Sheet1.Cells(Sheet1.Rows.Count, "Y").End(xlUp).Row)

  arr = ur
  For r = 1 To UBound(arr)
    If Len(Trim$(arr(r, 10))) > 0 Then arr(r, 10) = "=TODAY()-1"                  'J  (10)
    If Len(Trim$(arr(r, 22))) > 0 Then arr(r, 22) = "-1"                          'V  (22)
    If Len(Trim$(arr(r, 25))) > 0 Then arr(r, 25) = "1"                           'Y  (25)
    If Len(Trim$(arr(r, 26))) > 0 Then arr(r, 26) = "1"                           'X  (26)
    If Len(Trim$(arr(r, 27))) > 0 Then arr(r, 27) = "=TEXT(TODAY(),""YYYYMM"")"   'AA (27)
    If Len(Trim$(arr(r, 28))) > 0 Then arr(r, 28) = "=TEXT(TODAY(),""MMM YYYY"")" 'AB (28)
    If Len(Trim$(arr(r, 46))) > 0 Then arr(r, 46) = "-1"                          'AT (46)
  Next
  ur.Formula = arr
  ur.Columns(4).NumberFormat = "mmm yyyy" 'Use col #'s instead of letters
End Sub

información relacionada