Logo Hardware.com.br
Intruder18
Intruder18 Novo Membro Registrado
26 Mensagens 2 Curtidas

VBA Teste Lógico

#1 Por Intruder18 01/10/2015 - 01:05
Boa Noite Pessoal, precis de uma super ajuda.

Estou elaborando uma planilha com testes lógicos If Then ElseIf Else.

Escrevi o teste lógico abaixo:

Sub Pontos()

Sheets("Gerar Pontos&quot.Select

'INICIO CASA
If Range("B2&quot <= Sheets("Base de Pontos&quot.Range("B3&quot Then
Range("C2&quot = Sheets("Base de Pontos&quot.Range("C3&quot

ElseIf Range("B2&quot <= Sheets("Base de Pontos&quot.Range("B4&quot Then
Range("C2&quot = Sheets("Base de Pontos&quot.Range("C4&quot

ElseIf Range("B2&quot <= Sheets("Base de Pontos&quot.Range("B5&quot Then
Range("C2&quot = Sheets("Base de Pontos&quot.Range("C5&quot

ElseIf Range("B2&quot <= Sheets("Base de Pontos&quot.Range("B6&quot Then
Range("C2&quot = Sheets("Base de Pontos&quot.Range("C6&quot

ElseIf Range("B2&quot <= Sheets("Base de Pontos&quot.Range("B7&quot Then
Range("C2&quot = Sheets("Base de Pontos&quot.Range("C7&quot

Else
Range("C2&quot = 0
End If

'FIM CASA

End Sub


Preciso que essa função seja executa se a procura de "A2" da planilha Gerar Pontos em "Base de Dados" na coluna 3 for igual a "CASA" .
Ai executa todo esse código. Porém preciso que o código acima fique como um loop, onde eu vou apresentar um resultado ele vai comparar com a base de pontos, e me trazer a pontuação para cada indicador e. c2, depois compara b3 e traz o resultado em c3, b4 em c4 e por ai em diante. Agora se o valor a procura de "A2" da planilha Gerar Pontos em "Base de Dados" na coluna 3 for igual a "QUARTO OU COZINHA" ai a macro vai comparar o indicador separado por cada tipo de setor, que traz valores diferentes.

Anexei o documento para melhor entender. .

Anexos

Marcelo G Prudencio
Marcelo G Pr... Geek Registrado
1K Mensagens 227 Curtidas
#2 Por Marcelo G Pr...
01/10/2015 - 09:56
Ve se é isso que vc precisa, cole o codigo no modulo


Sub Ponto()



Dim Info As String
Dim WGPto, WBPto As Worksheet

Application.ScreenUpdating = False

Set WGPto = Sheets("Gerar Pontos")
Set WBPto = Sheets("Base de Pontos")


WGPto.Select
WGPto.Range("B2").Select

Inicio:

Info = ActiveCell.Value

WBPto.Select
WBPto.Range("B3").Select

Do While ActiveCell <> ""


If ActiveCell = Info Then

ActiveCell.Offset(0, 1).Select
Selection.Copy
WGPto.Select
ActiveCell.Offset(0, 1).Select



Selection.PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
Application.CutCopyMode = False

ActiveCell.Offset(1, -1).Select

GoTo Inicio

Else

ActiveCell.Offset(1, 0).Select

End If


Loop


WBPto.Range("A3").Select
WGPto.seletc
WGPto.Range("B2").Select


MsgBox "Atualização Concluida", vbOKOnly, "Atenção"

Application.ScreenUpdating = False


End Sub

PS eu nao usaria sua planilha dessa maneira, eu faria uma tabela unica. e faria a busca apenas nesta tabela.

....
Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho." - Autor Desconhecido
Simplifica que simples fica. - Nicole Tomazella.
"O Simples é Sempre Melhor Que o Complicado" - Jorge Paulo Lemann.
Intruder18
Intruder18 Novo Membro Registrado
26 Mensagens 2 Curtidas
#3 Por Intruder18
01/10/2015 - 11:46
Marcelo,

Vou tentar explicar com o raciocino que você postou.

Eu tenho um indicador em minha empresa. Meia funcionários precisam bater esse indicador para ganhar um bônus. O indicador é apresentado em porcentagem para os funcionários. Quanto menos o indicador mais pontos ele ganha. Porém cada área da empresa a pontuação é diferente. Cada funcionário tem uma matrícula, na planilha tenho uma base de cadastro, onde tem a matrícula de cada funcionário e o setor que ele pertence. São 3 setores, CASA, QUARTO e COZINHA. Tem que ter uma planilha com a Base de Pontos, para colocar os pontos de cada indicador é em cada setor, essas metas podem mudar em cada mês.

Quero digitar a Matrícula do funcionário em A2 da planilha Gerar Pontos, e em B2 colocar o indicador que o funcionário atingiu, e em c2 tem que aparecer quantos pontos ele atingiu.

Assim que eu colocar a matrícula e o indicador a macro tem que faze os testes lógicos que eu mencionei. Ele pega a matrícula do funcionário que eu coloquei em A2, e compara com a planilha Base de Cadastro para ver qual o setor que o funcionário pertence, se for do setor casa ela vai nas pontuações do setor casa e me traz quantos pontos o funcionário fez, se for setor Cozinha, faz a mesma coisa, mas vai comparar as pontuações do setor cozinha.

Na planilha que eu postei eu deixei as três planilhas. Se observar tem a primeira onde gera os pontos, a segunda é a base de cada setor e os pontos que gera por cada indicador é a terceira é a base de cadastro da empresa para ver o setor de cada funcionário.

Veja se consegui explicar de uma forma mais clara e objetiva.
Marcelo G Prudencio
Marcelo G Pr... Geek Registrado
1K Mensagens 227 Curtidas
#4 Por Marcelo G Pr...
01/10/2015 - 12:29
Se eu entendi um simples procv resolve sua vida, nem precisa de vba, basta vc ter uma unica tabela conforme eu ja disse.

A tabela pode ser feita assim

matricula nome local pontuaçao se for feita assim vc pode usar na planilha pontuação a seguinte formula na coluna de pontos


=procv(a2;tabela;4;falso) onde esta tabela vc coloca o intervalo de sua tabela base de pontos.

vc vai digitar a matricula em a2 e va retornar a pontuação onde vc tiver a formula
Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho." - Autor Desconhecido
Simplifica que simples fica. - Nicole Tomazella.
"O Simples é Sempre Melhor Que o Complicado" - Jorge Paulo Lemann.
Intruder18
Intruder18 Novo Membro Registrado
26 Mensagens 2 Curtidas
#5 Por Intruder18
01/10/2015 - 17:39
Marcelo,

Já utilizo em fórmulas e funciona como esperado,

Meu problema é que isso se aplica para mais de 10 mil funcionários e são mais de 50 setores diferentes, onde cada um tem uma meta diferente.

Acredito que em vba iria facilitar muito. Tanto em rapidez, quanto em alteração dos setores.

Hoje cada setor novo que eu tenho que incluir, tenho que fazer uma fórmula que da metade da página, deixando o Excel muito pesado.
Intruder18
Intruder18 Novo Membro Registrado
26 Mensagens 2 Curtidas
#6 Por Intruder18
01/10/2015 - 20:53
Marcelo G Prudencio disse:
Ve se é isso que vc precisa, cole o codigo no modulo


Sub Ponto()



Dim Info As String
Dim WGPto, WBPto As Worksheet

Application.ScreenUpdating = False

Set WGPto = Sheets("Gerar Pontos")
Set WBPto = Sheets("Base de Pontos")


WGPto.Select
WGPto.Range("B2").Select

Inicio:

Info = ActiveCell.Value

WBPto.Select
WBPto.Range("B3").Select

Do While ActiveCell <> ""


If ActiveCell = Info Then

ActiveCell.Offset(0, 1).Select
Selection.Copy
WGPto.Select
ActiveCell.Offset(0, 1).Select



Selection.PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
Application.CutCopyMode = False

ActiveCell.Offset(1, -1).Select

GoTo Inicio

Else

ActiveCell.Offset(1, 0).Select

End If


Loop


WBPto.Range("A3").Select
WGPto.seletc
WGPto.Range("B2").Select


MsgBox "Atualização Concluida", vbOKOnly, "Atenção"

Application.ScreenUpdating = False


End Sub

PS eu nao usaria sua planilha dessa maneira, eu faria uma tabela unica. e faria a busca apenas nesta tabela.

....

Marcelo,

Pode me dar uma dica de como você faria a planilha com os dados em tabela?

Preciso que na tabela tenha o setor do funcionário, e os indicadores que ele tem que bater, com os pontos que ele pode conseguir.
Basole
Basole Geek Registrado
945 Mensagens 596 Curtidas
#8 Por Basole
02/10/2015 - 00:55
@Intruder18, veja se lhe atende:
[code=VB]
Sub ProcuraComparaBuscaPontos()
Dim rgMatr As Range, tStor As Range
Dim ul1 As Long: Dim ul2 As Long
Dim rng1 As Range: Dim rng2 As Range
Dim i As Long: i = 2
Dim ws3 As Worksheet: Set ws3 = Sheets("base de dados")
Dim ws2 As Worksheet: Set ws2 = Sheets("Base de pontos")
Dim ws1 As Worksheet: Set ws1 = Sheets("gerar pontos")

ul1 = ws1.Range("A1048576").End(xlUp).Row

For i = i To ul1
Set rgMatr = ws1.Range("A" & i)
Set rng = ws3.Range("A2:A1000").Find(rgMatr) ' proc. o setor
If Not rng Is Nothing Then
Set tStor = rng.Offset(, 2)
ul2 = ws2.Range("A1048576").End(xlUp).Row
Set rng2 = ws2.Range("A2:A" & ul2).Find(tStor) ' proc. em base de pontos
If Not rng2 Is Nothing Then
j = rng2.Row + 1

For j = j To j + 4
If ws1.Range("B" & i) <= ws2.Range("B" & j) Then 'compara indicador
ws1.Range("C" & i) = ws2.Range("C" & j): Exit For
Else
ws1.Range("C" & i) = 0
End If
Next j
End If
End If
Next i
End Sub

[/code]
Click em Curtir se a resposta foi útil. boa.gif Dê retorno por favor. Se resolveu, atencao_regras.gif Altere o Titulo como [ Resolvido ] comemorando.gif
Intruder18
Intruder18 Novo Membro Registrado
26 Mensagens 2 Curtidas
#9 Por Intruder18
02/10/2015 - 17:42
Basole disse:
@Intruder18, veja se lhe atende:
[code=VB]
Sub ProcuraComparaBuscaPontos()
Dim rgMatr As Range, tStor As Range
Dim ul1 As Long: Dim ul2 As Long
Dim rng1 As Range: Dim rng2 As Range
Dim i As Long: i = 2
Dim ws3 As Worksheet: Set ws3 = Sheets("base de dados")
Dim ws2 As Worksheet: Set ws2 = Sheets("Base de pontos")
Dim ws1 As Worksheet: Set ws1 = Sheets("gerar pontos")

ul1 = ws1.Range("A1048576").End(xlUp).Row

For i = i To ul1
Set rgMatr = ws1.Range("A" & i)
Set rng = ws3.Range("A2:A1000").Find(rgMatr) ' proc. o setor
If Not rng Is Nothing Then
Set tStor = rng.Offset(, 2)
ul2 = ws2.Range("A1048576").End(xlUp).Row
Set rng2 = ws2.Range("A2:A" & ul2).Find(tStor) ' proc. em base de pontos
If Not rng2 Is Nothing Then
j = rng2.Row + 1

For j = j To j + 4
If ws1.Range("B" & i) <= ws2.Range("B" & j) Then 'compara indicador
ws1.Range("C" & i) = ws2.Range("C" & j): Exit For
Else
ws1.Range("C" & i) = 0
End If
Next j
End If
End If
Next i
End Sub

[/code]

Basole, era exatamente isso que eu queria. Muito obrigado pela ajuda.

Cara eu entendo um pouco de vba. Consegui entender parte do código. Seria excelente se de alguma forma você pudesse fazer alguma vídeo aula ou através do Skype me auxiliar a escrever esse código.

Vou utilizar essa mesma lógica para infinitas situações e vários indicadores diferentes.

Sei que o fórum é para troca de informações, mas se de alguma forma eu pudesse te gratificar por uma possível ajuda.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal