Posso adicionar uma macro para alterar o valor de uma célula na planilha 2 com base no aumento do valor de uma célula na planilha 1

0

Estou tentando projetar uma macro que alterará todas as células em uma linha com um valor de 4 para um valor de 3. Mas somente se eu atualizar uma célula em outra planilha.

Isso pode ser feito? Também é possível fazer isso em uma fórmula, mas em várias linhas?

Eu preciso fazer isso para atualizar uma matriz de treinamento. Para que, quando eu atualizar um número SOP na planilha 1, ele mude todos no código 4 (atualmente treinado) para o código 3 (treinado para a versão anterior). Como tenho centenas de linhas de SOPs, não quero ter um código diferente para cada linha.

Espero que tudo isso faça sentido.

    
por Steve 11.06.2018 / 11:59

2 respostas

0

Verifique a captura da tela:

InsiraabaixoocódigoVBAescritocomomódulonaFolha2:

SubMultiFindReplace()DimRngAsRangeDimInputRngAsRange,ReplaceRngAsRangexTitleId="Find & Replace"

Set InputRng = Application.Selection
Set InputRng = Application.InputBox("Original Range ", xTitleId, InputRng.Address, Type:=8)
Set ReplaceRng = Application.InputBox("Replace Range :", xTitleId, Type:=8)

Application.ScreenUpdating = False


For Each Rng In ReplaceRng.Columns(1).Cells
If Sheet1.Range("A208").value = "OTP" Then

    InputRng.Replace what:=Rng.value, replacement:=Rng.Offset(0, 1).value
End If

Next

Application.ScreenUpdating = True

End Sub

Como funciona:

  1. Execute esta macro, na primeira caixa de aviso exibida, especifique os dados intervalo que você quer ser substituído o 4 com 3.
  2. Para o exemplo mostrado, selecione A350: E352.
  3. Clique em OK, outra caixa de prompt é exibida para lembrá-lo de selecionar critérios (Localizar & Substituir intervalo de valores).
  4. Para o exemplo mostrado, selecione G350: H350.
  5. Terminar com OK, você encontra todos os 4s foram substituídos por 3s como você precisa.

N.B.

  1. Para a primeira caixa de diálogo pooped você pode selecionar todo o intervalo (como eu mostrei no exemplo) ou qualquer uma das colunas onde você quer para substituir 4 por 3.

  2. Não se esqueça de escrever "OTP" na Célula A208 da Folha 1 antes de executar esta macro.

  3. Você deve escrever 4 no G350 & 3 no H350.
  4. Você pode ajustar o endereço da célula, bem como o valor em A208 (Folha1) de acordo à sua escolha.
por 11.06.2018 / 14:15
0

OK, então eu tenho algo que funciona editando a solução postada acima.

Eu tenho isso na planilha1 (código)

Private Sub Worksheet_change(ByVal Target As Range)

If Target.Address = "$D$3" Then
Call MultiFindReplace
End If

If Target.Address = "$D$4" Then
Call MultiFindReplace2
End If

End Sub

E eu tenho isso no Module1 (código)

Sub MultiFindReplace()

Dim Rng As Range
Dim InputRng As Range, ReplaceRng As Range

For Each Worksheet In ThisWorkbook.Worksheets
Set InputRng = Worksheet.Range("D4:S4")
Set ReplaceRng = Worksheet.Range("D4:S4")
    InputRng.Replace what:=(4), replacement:=(3)

Next
Application.ScreenUpdating = True

End Sub

Sub MultiFindReplace2()

Dim Rng As Range
Dim InputRng As Range, ReplaceRng As Range

For Each Worksheet In ThisWorkbook.Worksheets
Set InputRng = Worksheet.Range("D5:S5")
Set ReplaceRng = Worksheet.Range("D5:S5")
    InputRng.Replace what:=(4), replacement:=(3)

Next
Application.ScreenUpdating = True

End Sub

Existe uma maneira mais inteligente de escrever isso para que eu não tenha centenas de chamadas diferentes?

    
por 12.06.2018 / 11:01