Notifications
Clear all

Ver até aonde foi preenchido e se condições batem!

5 Posts
2 Usuários
0 Reactions
1,057 Visualizações
(@edumanilha)
Posts: 20
Eminent Member
Topic starter
 

Pessoal mais uma vez pedindo uma ajuda pros profissionais da planilha!

Acontece o seguinte, tenho uma coluna "B" que precisa ser preenchida até certo ponto, mas o ponto é variável e preciso checar se cada célula tem 4 itens, separados por ":"... Precisava que a planilha checasse se até onde foi preenchido tem os 4 campos e caso ache alguma preenchida com mais ou menos, desse mensagem de erro e abortar-se!

Estou usando isso pra comparar:
If Plan1.Range("B3") Like "[!:]*:*:*:*[!:]"

034310:0230:0102:84805:20
034000:0105:85015:22
034000:0105:85044:3

Juro que tentei bastante...Tentei fazer um loop com If dentro para travar o loop caso achasse uma célula com mais ou menos dados, fiz trocentos IF, só me resta pedir ajuda a vocês! Grato desde já!

 
Postado : 13/03/2018 1:33 am
(@klarc28)
Posts: 971
Prominent Member
 

https://www.todamateria.com.br/ponto-de-exclamacao-quando-usar/

Option Explicit

Sub percorrerColuna()
    
    Dim i As Long
    Dim num As Integer
    Dim j As Integer
    For i = 1 To Plan1.UsedRange.Rows.Count
        num = 0
        For j = 1 To Len(Plan1.Range("B" & i).Value)
            If Mid(Plan1.Range("B" & i).Value, j, 1) = ":" Then
                num = num + 1
            End If
            
        Next j
        If num > 4 Or num < 4 Then
            MsgBox "Erro. Foram encontradas " & num & " ocorrências na linha " & i
            Exit Sub
        End If
        
    Next i
    
    
End Sub

Outro código para a mesma tarefa:

Option Explicit

Sub percorrerColuna()
    Dim DLin As Long
    DLin = Range("B1").End(xlDown).Row
    Dim i As Long
    Dim num As Integer
    Dim j As Integer
    For i = 1 To DLin
        num = 0
        For j = 1 To Len(Plan1.Range("B" & i).Value)
            If Mid(Plan1.Range("B" & i).Value, j, 1) = ":" Then
                num = num + 1
            End If
            
        Next j
        If num > 4 Or num < 4 Then
            MsgBox "Erro. Foram encontradas " & num & " ocorrências na linha " & i
            Exit Sub
        End If
        
    Next i
    
    
End Sub



 
Postado : 13/03/2018 3:16 am
(@edumanilha)
Posts: 20
Eminent Member
Topic starter
 

Obrigado! Só esqueci de um detalhe! Só queria ir até o B17, pq coloquei uns campos logo abaixo com outras info, e não queria arriscar checar elas...Poderia fazer essa gentileza? Acho que só falta isso!

 
Postado : 13/03/2018 4:22 am
(@klarc28)
Posts: 971
Prominent Member
 

Option Explicit

Sub percorrerColuna()
    
    Dim i As Long
    Dim num As Integer
    Dim j As Integer
    Dim cl As Object
    Dim intervalo As Range
    Set intervalo = Plan1.Range("B1:B17")
    For Each cl In intervalo
        num = 0
        For j = 1 To Len(Plan1.Range("B" & cl.Row).Value)
            If Mid(Plan1.Range("B" & cl.Row).Value, j, 1) = ":" Then
                num = num + 1
            End If
            
        Next j
        If num > 4 Or num < 4 Then
            MsgBox "Erro. Foram encontradas " & num & " ocorrências na linha " & cl.Row
            Exit Sub
        End If
    Next cl
    
    
    
End Sub


Option Explicit

Sub percorrerColuna2()
    
    Dim i As Long
    Dim num As Integer
    Dim j As Integer
    For i = 1 To 17
        num = 0
        For j = 1 To Len(Plan1.Range("B" & i).Value)
            If Mid(Plan1.Range("B" & i).Value, j, 1) = ":" Then
                num = num + 1
            End If
            
        Next j
        If num > 4 Or num < 4 Then
            MsgBox "Erro. Foram encontradas " & num & " ocorrências na linha " & i
            Exit Sub
        End If
        
    Next i
    
    
End Sub

 
Postado : 13/03/2018 4:32 am
(@edumanilha)
Posts: 20
Eminent Member
Topic starter
 
Option Explicit

Sub percorrerColuna() 

Dim i As Long
    Dim num As Integer
    Dim j As Integer
    Dim cl As Object
    Dim intervalo As Range
    Set intervalo = Plan1.Range("B3:B17")
    For Each cl In intervalo
        num = 0
        For j = 1 To Len(Plan1.Range("B" & cl.Row).Value)
            If Mid(Plan1.Range("B" & cl.Row).Value, j, 1) = ":" Then
                num = num + 1
            End If
           
        Next j
        If num > 3 Or num < 3 Then
            MsgBox "Erro. Foram encontradas " & num & " ocorrências na linha " & cl.Row
            Exit Sub
        End If

Tive que fazer algumas alterações, e ela me fala q a linha 5 esta com 0 ocorrências, provavelmente pq verificou...Como introduzo um WhileNotEmpty nessa situação?

Edit: consegui resolver assim: If (num > 3 Or num < 3) And Plan1.Range("B" & cl.Row).Value <> "" Then

Edit2: Agora o plano é fazer ele dizer a linha do erro! B3,B4 etc...
(MsgBox "Revise todas as informações do Cross e tente novamente! Existem campos dos saltos com informação extra ou faltando!" + vbCrLf + vbCrLf + "Verifique: B" & cl.Row, vbCritical, "ATENÇÃO:")

 
Postado : 13/03/2018 4:52 am