Seleção atual como ...
 
Notifications
Clear all

Seleção atual como Range

2 Posts
2 Usuários
0 Reactions
849 Visualizações
(@acenes)
Posts: 1
New Member
Topic starter
 

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
(@gtsalikis)
Posts: 2373
Noble Member
 

Sem a planilha fica complicado saber se é isso mesmo, pq a tua descrição e o que o código faz parecem não bater, mas tente dessa forma:

Sub Macro3()

Dim ActSheet As Worksheet
Dim SelRange As Range
Dim coluna As Integer 'incluído GT
Dim UL As Integer 'Última Linha - incluído GT

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

coluna = ActiveCell.Column 'incluído GT
UL = Cells(Rows.Count, coluna).End(xlUp).Row 'incluído GT

Set TopCell = Cells(1, coluna) 'alterado GT
Set BottomCell = Cells(Rows.Count, coluna) 'alterado GT

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:=Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(UL, ActiveCell.Column)), _
    Type:=xlFillDefault  'alterado GT
Cells.Columns.AutoFit

End Sub
 
Postado : 30/03/2014 8:48 am