Notifications
Clear all

Find(rngO.Value2) em coluna de datas?

15 Posts
2 Usuários
0 Reactions
1,203 Visualizações
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

mais uma pergunta meio maluca

numa macro que tenho reparei que find com value2 é muito mais rapido,
mas não acha nada se... onde estiver procurando estiver formatado como moeda ou datas e estiver procurando por uma data ou moeda.

Dim rngD As Range, rngO As Range, LR As Long, Lin As Long, ff As Range, fff As Range

Set ff = Range(Cells(Li, 3).End(xlDown), Cells(Rows.Count, 3).End(xlUp))
F = Cells(1, CData_O).Column
Set fff = Range(Cells(Li, F).End(xlDown), Cells(Rows.Count, F).End(xlUp))

For Each rngO In fff
     If rngO.Value2 <> "" Then
          Set rngD = ff.Find(rngO.Value)
               If Not rngD Is Nothing Then
                         Lin = rngD.Row
                         Range(Ti & Lin, Cf & Lin).Value2 = Range(Ti_O & Lin, Cf_O & Lin).Value2
               End If
     End If
Next rngO


Set rngD = ff.Find(rngO.Value2)
'<<<<< com a coluna onde procura formatada como Geral leva menos da metade do tempo

Uso uma coluna de guia que tbm serve como parâmetro visual.
E antes de usar uma coluna auxiliar ou formatar a coluna como geral e usar formatação condicional para formatar como data,
gostaria de saber se tem como fazer find procurar com parâmetro de Valor2 em uma coluna de data.

Até.

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 16/05/2014 5:18 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

EdCronos,
Não entendi? A definição de range Set ff... e ou Set fff..., vai determinar uma range unica (uma unica celula), ou estou enganado?

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/05/2014 5:31 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

essas são range
Coluna C formatado como data
Set ff = Range(Cells(Li, 3).End(xlDown), Cells(Rows.Count, 3).End(xlUp))

coluna auxiliar uso "geral"
F = Cells(1, CData_O).Column
Set fff = Range(Cells(Li, F).End(xlDown), Cells(Rows.Count, F).End(xlUp))

For Each rngO In fff
Set rngD = ff.Find(rngO.Value)

procura os valores de cada linha da range fff "coluna", na range ff "Coluna B"

A macro pega os valores de uma linha e coloca na mesma linha que tem a mesma data da coluna "C"

aTé

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 16/05/2014 6:09 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Entendi a range, porem na definicao
Set ff=Set ff = Range(Cells(Li, 3).End(xlDown), Cells(Rows.Count, 3).End(xlUp)), vai retornar (supondo que coluna C tenha 365 registros) C365, ou seja retorna ff=range("C365")
o mesmo para fff=range("F365")
E ai que gera duvida, porque utilizar find em range unica??

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/05/2014 6:24 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

bem aqui não aconteceu isso e está funcionando fora o lance da formatação
usava assim:
Lini=Cells(Li, 3).End(xlDown).row
Lfim=Cells(Rows.Count, 3).End(xlUp).row
ff=range("C" & Lini, "C" & Lfim)

pasei a usar assim :
ff = Range(Cells(Li, 3).End(xlDown), Cells(Rows.Count, 3).End(xlUp))

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 16/05/2014 6:53 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom, não consegui reproduzir o que relatou,
utilizando suas linha de código, porem atribuindo valores aleatorios para Li/CData_O/Ti/Cf /Ti_O /Cf_O
E utilizando em uma planilha com coluna data na coluna "C" preenchida ate linha 1251, sempre recebo FF=C1251; fff=c1251
utilizei assim:

Sub tt()
Dim rngD As Range, rngO As Range, LR As Long, Lin As Long, ff As Range, fff As Range
Li = 2
Set ff = Range(Cells(Li, 3).End(xlDown), Cells(Rows.Count, 3).End(xlUp))
CData_O = 3
F = Cells(1, CData_O).Column
Set fff = Range(Cells(Li, F).End(xlDown), Cells(Rows.Count, F).End(xlUp))

For Each rngO In fff
     If rngO.Value2 <> "" Then
          Set rngD = ff.Find(rngO.Value)
               If Not rngD Is Nothing Then
                         Lin = rngD.Row
                         Ti = "D": Cf = "D": Ti_O = "E": Cf_O = "E"
                         Range(Ti & Lin, Cf & Lin).Value2 = Range(Ti_O & Lin, Cf_O & Lin).Value2
               End If
     End If
Next rngO
End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/05/2014 7:18 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

estranho, aqui funciona legal
vou tentar montar uma planilha aqui de exemplo e postar,
mas meu problema é como find valores de datas e Value2
com value2 fica bem mais rapido, mas os dois lados tem que estar formatado como "Geral"

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 16/05/2014 7:48 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

funciona desse jeito
mas por algum motivo não consegui fazer funcionar com datas reais de jeito algum, nem com value e na minha funciona, pensei até que estava me equivocando e mexendo numa macro e executando outra.

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 16/05/2014 8:53 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

pelos testes que fiz nessa nova planilha com valores mistos,
vou ter que usar value mesmo e os 2 Formatados como data

12/04
sem formatação na Origem "dataO" apresenta 41741, e Value2 pega 12 "numero puro sem ser o da data"
sem formatação na Guia "C" ... apresenta 41741, e Value2 pega 17
sem formatação nos 2 ... apresenta 41741, e Value2 pega 17
com formatação nos 2 ... apresenta 41741, e Value2 pega 12 "numero puro sem ser o da data"

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 16/05/2014 9:47 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

Gostaria de saber da pessoa que baixou qual resultado teve da macro na planilha, se funcionou, se testou com datas.

na minha tive que deixar os dois lados formatados como Data e Find usando "Value"

no meu caso creio que poderia usar Value2 pq nas colunas apenas tem Datas, mas fiquei com medo dos valores de datas ficarem equivocados.

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 17/05/2014 7:51 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Basicamente a diferença entre Value e Value2 sá valore em formato moeda (currency) que podem eventualmente ser truncados, e Data.
Para células formatadas como data Value2 considera o valor "arquivado" ou seja 17/05/2014 é considerado 41776, porem o que pude perceber é que o find "olha" o valor formatado, então value2 passa 41776 e é "comparado" com 17/05/2014 - "não dá liga".
Utilizando Value, mesmo em uma coluna "mista" retornou corretamente, sem necessidade de formatar toda a coluna.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 17/05/2014 9:00 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

é isso que estou achando estranho, aqui nessa planilha que postei coloquei algumas datas e formatei de forma diferente e apresentaram resultados diferentes
as vezes mesmo com value apresenta resultados equivocado.
e inclusive entras valores diferentes dependendo da ordem que esteja, ou se foi digitado ou colado de outro lugar :?:
na minha que só tem dadas parece que vai normal

eu estou me equivocando em algo?

obrigado pelo retorno
nessa coloquei a algumas datas e maco com valor2 e valor

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 17/05/2014 10:09 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

Creio que tem haver como se digitou a entrada das DAtas
12/4 ------->>>> é formatado para 12/04/2014
12/04 --------->>> é formatado para 12/04/2014
12/04/2014---->>>digitando assim fica o mais correto tanto para value e value2, mas os dois lados tem que estar iguais

se digitar diferente nos dois lados vai aparecer igual mas find olha de maneira diferente

se copiado e colado em outro lado por ser data parece que o valor é corrigido 12/4 vai ser colado como 12/04/2014 "ou não"

pelo menos foi oq percebi

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 17/05/2014 10:46 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Creio que situações mistas sempre criarão problemas.
O método Find, na range de procura, aparentemente é considerada como string, e valores datas são considerados, independentemente da formatação na planilha, com a formatação do sistema operacional, ou seja uma celula formatada para mm/aaaa, o find irá considerar uma string como dd/mm/aaaa (se o sistema operacional assim estiver).
Tambem se não especificar, o padrão do Find e Lookat:xlparts; ou seja irá procurar o valor em qq posição.
Exemplo: se tiver na coluna de procura uma celula com data 23/04 ou Ex23, e o for procurar por 23, qualquer um desses valore irá dar correspondencia

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 17/05/2014 11:06 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

então basicamente não deixar valores mistos.
o restante entendi quase nada :?

vou tentar entender melhor os parâmetros do Find para não ter perigo de retornar valores equivocados,
afinal eu não quero correr mais de 5000 linhas x 10 colunas de datas pra verificar se está correto :P

Valeu aí pela paciência . :roll:

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 17/05/2014 11:44 am