Notifications
Clear all

Varrer coluna à procura de um determinado valor

5 Posts
3 Usuários
0 Reactions
2,394 Visualizações
(@ceos005)
Posts: 49
Trusted Member
Topic starter
 

Olá aos experts

Tenho 3 planilhas e gostaria de saber como varrer uma mesma coluna até que a célula seja zero, por exemplo a coluna F, e encontrar em cada uma delas um valor que seja maior que o valor digitado em um textbox de um formulário. Aí essa célula deve se tornar a célula ativa.
Obs: para cada uma dessas 3 planilhas (Plan1, Plan2, Plan3) a célula ativa pode ser diferente.

Alguém pode me ajudar?

 
Postado : 27/06/2012 10:43 am
(@tomamais)
Posts: 26
Eminent Member
 
i = 1
Do While Cells(i, 5).Value = 0
If Cells(i, 5).Value > CDbl(TextBox.Text) Then
Cells(i, 5).Select
End if
i = i + 1
Loop

É isso?

 
Postado : 27/06/2012 11:09 am
(@ceos005)
Posts: 49
Trusted Member
Topic starter
 

Tomás, obrigado por ter respondido.

Acho que expliquei errado por isso estou anexando a planilha para que talvez possa me ajudar.
O usuário deverá digitar um valor na textbox do formulário e escolher uma determinada temperatura no combobox. Com esses valores, a lógica deverá me fornecer os valores RCA1 e XL1 para a guia CCF, RCA2 e XL2 para a guia CRF e RCA3 e XL3 para a guia CRP. Vou explicar melhor, deve-se ir na coluna da temperatura escolhida no combobox e varrer essa coluna de cima para baixo e procurar o primeiro número que seja maior que o número digitado no textbox. Achando esse número, pegar os valores das colunas RCA (coluna B) e XL (coluna C) da mesma linha do respectivo número e salvar nas variáveis que citei acima.

Não sei se fui bem claro.

Obrigado.

 
Postado : 27/06/2012 1:00 pm
(@benzadeus)
Posts: 78
Trusted Member
 

Interessante, trabalho na área de projetos de Engenharia Elétrica também.

Crie um formulário com os controles:
Label1 até Label6
CommandButton1
TextBox1
ComboBox1

Insira o código:

Private Sub CommandButton1_Click()
    Dim ws As Variant
    Dim lRow As Long
    Dim lCol As Long
    Dim rCol As Range
    Dim lRowLast As Long
    Dim lÍndice As Long
    
    With ThisWorkbook
        For Each ws In Array(.Worksheets("CCF"), _
                             .Worksheets("CRF"), _
                             .Worksheets("CRP"))
            lRow = 0
            lRowLast = RowLast(ws.Columns("E"))
            lCol = EleOf(ComboBox1.Value, ws.Range("F3:R3"))
            Set rCol = ws.Cells(4, lCol).Resize(lRowLast - 4 + 1)
            On Error Resume Next
            lRow = WorksheetFunction.Match(CSng(TextBox1.Value), rCol, 1) + rCol.Row
            On Error GoTo 0
            If lRow = 0 Then lRow = 4
            Controls("Label" & lÍndice * 2 + 1).Caption = _
              ws.Cells(lRow, "B")
            Controls("Label" & lÍndice * 2 + 2).Caption = _
              ws.Cells(lRow, "C")
            lÍndice = lÍndice + 1
        Next ws
    End With
End Sub

Private Sub UserForm_Initialize()
    
    ComboBox1.Style = fmStyleDropDownList
    ComboBox1.List = WorksheetFunction.Transpose( _
      ThisWorkbook.Sheets(1).Range("F3:R3"))
    
End Sub

Private Function RowLast(rng As Range) As Long
    'Retorna o valor da última linha povoada do intervalo rng
    With rng
        On Error Resume Next
        RowLast = .Find(What:="*" _
          , After:=.Cells(1) _
          , SearchDirection:=xlPrevious _
          , SearchOrder:=xlByColumns _
          , LookIn:=xlFormulas).Row
        If RowLast = 0 Then RowLast = rng.Cells(1).Row
    End With
End Function

Function EleOf(ByVal vTermo As Variant, ByVal vVetor As Variant) As Long
    'Retorna o número da linha ou coluna de uma célula numa linha ou coluna.
    'Se vVetor for uma Variant() ou String(), retorna o índice do elemento no vetor.
    'Caso não seja encontrada nenhuma ocorrência, é retornado 0.
    On Error Resume Next
    Select Case TypeName(vVetor)
        Case "Range"
            If vVetor.Columns.Count = 1 Then
                'vVetor é uma coluna
                EleOf = WorksheetFunction.Match(vTermo, vVetor, 0) + vVetor.Row - 1
            ElseIf vVetor.Rows.Count = 1 Then
                'vVetor é uma linha
                EleOf = WorksheetFunction.Match(vTermo, vVetor, 0) + vVetor.Column - 1
            End If
        Case "Variant()", "String()"
            EleOf = WorksheetFunction.Match(vTermo, vVetor, 0)
    End Select
End Function
 
Postado : 28/06/2012 5:36 am
(@ceos005)
Posts: 49
Trusted Member
Topic starter
 

benzadeus, ficou perfeito!!!

Muito obrigado!

 
Postado : 28/06/2012 7:03 am