Excel 2013: VBA para copiar a fórmula de uma célula para a próxima

1

Eu preciso copiar uma fórmula da célula A3 para a B3 no Excel, usando um botão para executar a macro abaixo:

Sub Copy()
    Range("A3").Select
    ActiveCell.Offset(0, 1).Formula = ActiveCell.Formula
End Sub

Depois, a cada clique subseqüente do botão, a fórmula precisa ser copiada para a próxima célula no intervalo (B3: J3) até que todo o intervalo seja preenchido. Eu não quero preencher o intervalo de uma só vez com um clique do botão, mas sim uma célula com cada clique, pois isso acontecerá ao longo de um período de semanas, portanto, uma célula será preenchida a cada semana.

    
por Coenie 01.08.2018 / 16:54

2 respostas

1

Eu entendo que seu problema é que o código que você tem apenas funciona para a célula A3, mas você quer que ele funcione na última fórmula da linha 3.

Se B3 estiver em branco, seu código funcionará, mas se não estiver, ele apenas copiará o A3 novamente.

Se B3 não estiver em branco, você precisará copiar a última célula na linha 3 para a célula à direita.

    Sub CopyToRight()
Dim WB As Workbook
Dim WS As Worksheet

    Set WB = ThisWorkbook
    Set WS = Sheets("Sheet1")
    With WS
        If IsEmpty(.Range("A3").Offset(0, 1)) Then
            .Range("A3").Copy .Range("A3").Offset(0, 1)
        Else
            .Range("A3").End(xlToRight).Copy .Range("A3").End(xlToRight).Offset(0, 1)
        End If
    End With
End Sub
    
por 02.08.2018 / 09:29
1

Uma coisa precisa mudar:

  1. o "A3" deve se tornar "B3" na próxima iteração ou
  2. o .Offset (0,1) precisa ser expandido para chegar à próxima célula vazia.

Você pode codificá-lo de qualquer forma, se 1, o nome A3 'CopyCell', em seguida, depois de copiá-lo direito alterar o chamado 'CopyCell' para B3. se 2, você só precisa mudar o Offset (0,1) para (0, cols) onde cols = o atual cols + 1

Sub Button_Click()
'
' Button_Click Macro
'

    Range("CopyMe").Select
    ActiveCell.Offset(0, 1).Formula = ActiveCell.Formula
    Range(ActiveCell.Offset(0, 1), ActiveCell.Offset(0, 1)).Select
    With ActiveWorkbook.Names("CopyMe")
        .Name = "CopyMe"
        .RefersTo = ActiveCell
        .Comment = ""
    End With
'

End Sub

Em termos de robustez, não é muito bom porque assume que a célula atual a ser copiada corretamente é chamada de "CopyMe" e, se não for, não funcionará.

Portanto, se alguém executar a macro, excluir a coluna e tentar executá-la novamente, ela não funcionará.

    
por 02.08.2018 / 07:51