Olá,
Esta é a minha primeira participação aqui, espero não abusar da boa vontade dos membros desse forum.
(1) Preciso verificar a repetição de nomes de pessoas numa coluna específica em várias planilhas. Algumas delas tem menos que 10 linhas e outras tem mais que 10 mil.
(2) Além disso, em algumas planilhas essa informação esta na coluna C, em outras na Z, e em outras muitas ela esta perdida em uma entre dezenas de colunas armazenando informações, sendo que as planilhas compartilham campos em comum porém não são iguais.
(3) o nome da variável esta sempre na linha 1. No meu caso a variável de interesse chama-se NM_PACIENT.
(4) gravei uma macro que localiza na linha 1 a célula onde esta armazenada esta variável e fiz com que toda a coluna correspondente fosse selecionada até a última célula preenchida usando o código abaixo.
(5) em seguida inseri uma coluna à direita onde seriam assinaladas as repetições de nomes, caso houvesse.
(6) a idéia erá empregar a função EXATO na célula adjacente da coluna inserida para verificar se o nome registrado na linha é igual ao nome registrado na linha anterior (VERDADEIRO) ou não (FALSO).
(7) inicialmente tudo funcionou muito bem, no entanto eu logo percebi que quando eu rodava a macro numa planilha com um número de linhas maior que aquela onde a macro foi gravada originariamente, muitas linhas não eram checadas já que o código de AutoFill para a aplicação da função EXATO, usava como referência o Range da planilha original.
(8) Encontrei várias sugestões declarando variáveis do tipo Range, mas quando chega a hora de escrever o código que orienta o Excel a considerar o range correto para a planilha que esta sendo analisada, nada funciona. Em outras palavras, eu não sei a sintaxe correta que orienta o software a considerar o range para a planilha atual.
Fico grato por qualquer ajuda que me puderem oferecer
Obrigado
Acenes
Sub Macro3()
'
' Macro3 Macro
Dim ActSheet As Worksheet
Dim SelRange As Range
Set ActSheet = ActiveSheet
Set SelRange = Selection
Cells.Find(What:="NM_PACIENT", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Set TopCell = Cells(1, ActiveCell.Column)
Set BottomCell = Cells(Rows.Count, ActiveCell.Column)
If IsEmpty(TopCell) Then Set TopCell = TopCell.End(xlDown)
If IsEmpty(BottomCell) Then Set BottomCell = BottomCell.End(xlUp)
If TopCell.Row = Rows.Count And BottomCell.Row = 1 Then
ActiveCell.Select
Else
Range(TopCell, BottomCell).Select
End If
Selection.Offset(0, 1).Insert
ActiveCell.EntireRow.Select
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
ActiveCell.FormulaR1C1 = "DUPLICIDADES"
ActiveCell.FormulaR1C1 = "=EXACT(RC[-1],R[1]C[-1])"
ActiveCell.Select
Selection.AutoFill Destination:=ActiveCell.Range("A1:A29"), Type:= _
xlFillDefault
Cells.Columns.AutoFit
End Sub
Postado : 29/03/2014 8:52 pm