No Excel, como posso alterar automaticamente os dados de uma célula (VBA)?

0

Eu gostaria de alterar automaticamente o conteúdo das células quando os dados são colados nelas. Os dados serão colados na coluna Q de uma planilha no Excel. Preciso combiná-lo com dados na Coluna A de outra planilha, intitulada 'Usuários', e retornar o valor correspondente da Coluna B da mesma planilha. Eu presumo que vai exigir o uso de VBA, embora eu tenha muito pouca compreensão da codificação do VBA!

Qualquer ajuda será muito apreciada!

    
por Alan 13.10.2014 / 16:30

1 resposta

0

Eu não acredito que você possa fazer o que quiser. Não há como (que eu saiba) detectar apenas pastas.

O mais próximo é usar

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Mas isso significa que ele será disparado toda vez que qualquer alteração na página for feita.

Então, como uma solução, o que você pode fazer é colar no Col Q e, em seguida, executar manualmente uma macro (que você pode atribuir a um botão, se mais fácil).

Option Explicit

Sub MatchThePairs()

'You can edit this top bit

'The name of column you are pasting into
Dim pastedCol As String
pastedCol = "Q" 'UPDATE ME IF NEEDED

'The name of the look up column
Dim lookupCol As String
lookupCol = "Z" 'UPDATE ME IF NEEDED

'The name of the look to show results
Dim resultCol As String
resultCol = "AA" 'UPDATE ME IF NEEDED

'Do you want to clear the results first ?
Dim clearResults As Boolean
clearResults = True 'CHANGE ME TO True OR False

'What is the row of the header (if you have one)
Dim rowHeader As Integer
rowHeader = 1 ' set to 0 if no header

'What is the name of the results column
Dim resultsColHeader As String
resultsColHeader = "ResultsCol" ' Change me to what ever

'what is the first row (do not include the headings)
Dim row As Integer
row = 2 'AS PER THE SCEEN SHOT, I STARTED ON ROW 2



' **** hopefully you won't need to edit anything below this

If clearResults Then
    Range(resultCol & ":" & resultCol).Cells.Clear

    If rowHeader > 0 Then
       Range(resultCol & rowHeader).Value = resultsColHeader
    End If


End If

Do While (Range(pastedCol & row).Value <> "")

    If Range(pastedCol & row).Value = Range(lookupCol & row).Value Then
        'yipee, a match
        Range(resultCol & row).Value = Range(lookupCol & row).Value
    End If
    row = row + 1
Loop

End Sub

Antes

Depois

    
por 16.10.2014 / 11:26