Como você escreve uma fórmula do Excel que colará um valor específico em uma célula diferente?

7

Então, basicamente, quero escrever uma fórmula que verifique uma condição e, se essa condição for atendida, quero colar uma linha específica de texto em uma célula diferente. Devo observar que não quero que a fórmula exista na célula na qual desejo colar um valor. Por exemplo, se eu quiser colar um valor em B5, não quero que a fórmula esteja na célula B5 ...

    
por Robert Jefferies 31.05.2013 / 17:52

2 respostas

6

A abordagem a seguir faz uso de uma solução alternativa descrita aqui e aqui para ativar um função de planilha definida no VBA para definir o valor de outra célula.

A função personalizada armazena em variáveis globais o endereço da célula de destino e o valor para o qual essa célula deve ser definida. Em seguida, uma macro que é acionada quando a planilha recalcula lê as variáveis globais e define a célula de destino como o valor especificado.

O uso da função personalizada é simples:

  =SetCellValue(target_cell, value)

onde target_cell é uma referência de string para uma célula na planilha (por exemplo, "A1") ou uma expressão que avalia essa referência. Isso inclui uma expressão como =B14 , em que o valor de B14 é "A1". A função pode ser usada em qualquer expressão válida.

SetCellValue retorna 1 se o valor for gravado com sucesso na célula de destino e 0 caso contrário. Qualquer conteúdo anterior da célula de destino é sobrescrito.

Três trechos de código são necessários:

  • o código que define SetCellValue em si
  • a macro que é acionada pelo evento de cálculo da planilha; e
  • uma função de utilitário IsCellAddress para garantir que target_cell seja um endereço de célula válido.

Código para a função SetCellValue

Esse código precisa ser colado em um módulo padrão inserido na pasta de trabalho. O módulo pode ser inserido por meio do menu do editor do Visual Basic, que é acessado selecionando Visual Basic na guia Developer da faixa de opções.

  Option Explicit

  Public triggerIt As Boolean
  Public theTarget As String
  Public theValue As Variant

  Function SetCellValue(aCellAddress As String, aValue As Variant) As Long

      If (IsCellAddress(aCellAddress)) And _
             (Replace(Application.Caller.Address, "$", "") <> _
              Replace(UCase(aCellAddress), "$", "")) Then
          triggerIt = True
          theTarget = aCellAddress
          theValue = aValue
          SetCellValue = 1
      Else
          triggerIt = False
          SetCellValue = 0
      End If

  End Function


Worksheet_Calculate Macro Code

Esse código deve ser incluído no código específico da planilha na qual você usará SetCellValue . A maneira mais fácil de fazer isso é clicar com o botão direito do mouse na guia da planilha na exibição Home , selecionar View Code e depois colar o código no painel do editor que aparece.

  Private Sub Worksheet_Calculate()

      If Not triggerIt Then
          Exit Sub
      End If
      triggerIt = False
      On Error GoTo CleanUp
      Application.EnableEvents = False
      Range(theTarget).Value = theValue
  CleanUp:
      Application.EnableEvents = True
      Application.Calculate

  End Sub


Código para a função IsCellAddress

Este código pode ser colado no mesmo módulo que o código SetCellValue .

  Function IsCellAddress(aValue As Variant) As Boolean

      IsCellAddress = False

      Dim rng As Range           ' Input is valid cell reference if it can be
      On Error GoTo GetOut       ' assigned to range variable
      Set rng = Range(aValue)
      On Error GoTo 0

      Dim colonPos As Long            'convert single cell "range" address to
      colonPos = InStr(aValue, ":")   'single cell reference ("A1:A1" -> "A1")
      If (colonPos <> 0) Then
          If (Left(aValue, colonPos - 1) = _
                Right(aValue, Len(aValue) - colonPos)) Then
              aValue = Left(aValue, colonPos - 1)
          End If
      End If

      If (rng.Rows.Count = 1) And _
          (rng.Columns.Count = 1) And _
          (InStr(aValue, "!") = 0) And _
          (InStr(aValue, ":") = 0) Then
          IsCellAddress = True
      End If                          'must be single cell address in this worksheet
      Exit Function

  GetOut:

  End Function
    
por 03.06.2013 / 01:43
1

Vamos supor que você queira que o texto "Texto A" apareça na célula C5 se a célula B5 contiver o valor "verde".

Você pode usar uma abordagem de fórmula, mas como as fórmulas não podem alterar valores em outras células, a fórmula precisará ser inserida na célula C5.

=IF(ISNUMBER(FIND("green",B5)),"Text A","")

A célula C5 agora mostrará apenas "Texto A" se B5 contiver a palavra "verde".

Uma fórmula como essa pode ser criada para funcionar com muitas condições. Você precisa definir seus requisitos para obter ajuda sobre sua situação específica.

Se você não quiser que o C5 tenha uma fórmula, também poderá usar uma abordagem VBA. Você pode executar um evento de alteração da planilha que será executado sempre que a célula B5 for alterada, editando manualmente o valor ou colando algo nele.

Um exemplo para essa macro pode ser

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B5")) Is Nothing Then
    If InStr(1, Target, "green", vbTextCompare) Then
        Target.Offset(0, 1) = "Text A"
    End If
End If
End Sub

As condições e o posicionamento da saída são apenas um exemplo, é claro, e precisam ser ajustados às suas necessidades.

A diferença entre a fórmula e a abordagem macro é

  • com a abordagem de fórmula, a célula C5 conterá uma fórmula. Se o usuário excluir acidentalmente a fórmula, a funcionalidade fornecida também será excluída. (Existem maneiras de gerenciar isso, no entanto)
  • com a macro VBA, a célula C5 não mostrará nenhuma fórmula e terá o texto textual como um valor, mas a alteração da configuração exige conhecimento do Excel VBA. Além disso, com uma abordagem VBA, a pasta de trabalho deve ser salva como uma pasta de trabalho habilitada para macro e o usuário deve permitir macros ou tornar o arquivo um arquivo confiável.

Nota: o acima é apenas um exemplo. Você precisa definir seus requisitos, seja para avaliar números ou texto, se a avaliação faz distinção entre maiúsculas e minúsculas, quais são as regras de avaliação, onde colocar o resultado, etc.

    
por 02.06.2013 / 07:30