Notifications
Clear all

Capturar Resultado de formula em um Variavel

3 Posts
2 Usuários
0 Reactions
1,299 Visualizações
Mauro Coutinho
(@coutinho)
Posts: 95
Estimable Member
Topic starter
 

Minha questão pode parecer bem básica, mas me deu branco total ou estou ficando gaga mesmo rsrs.

Tenho essa rotina que joga o Resultado para a celula D7, quero modificar e em vez de jogar para a planilha capturar em uma variavel, mas ja tentei de varias formas e não estou conseguindo.

Public Sub AleatorioTeste()
    Dim lUltimaLinhaAtiva As Long
    Dim sResult As String
    
    Application.Volatile
       
    lUltimaLinhaAtiva = Worksheets("Lista").Cells(Worksheets("Lista").Rows.Count, 2).End(xlUp).Row
    
    For i = 1 To 5
        Range("D7").Formula = "=VLOOKUP(RANDBETWEEN(1," & lUltimaLinhaAtiva & "),Lista!A:B,2,0)"
    
    'Pretendo armazenar a Variavel sResult em vez de jogar para a planilha
    'Tentei assim e de várias maneiras, mas não consegui
    'sResult = Application.WorksheetFunction.VLookup(RANDBETWEEN(1," & lUltimaLinhaAtiva & "),Lista!A:B,2,0)

    Next i
    
    Application.ScreenUpdating = True
    
End Sub

Exemplo
https://www.sendspace.com/file/agj7zg

Mauro Coutinho

 
Postado : 22/10/2019 2:47 pm
Reinaldo
(@rlm)
Posts: 246
Estimable Member
 

Boa Noite Mauro, não sei se está necessitando ainda,mas.. Experimente:
sResult = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.RandBetween(1, lUltimaLinhaAtiva), Sheets("lista").Range("A:B"), 2, 0)

Public Sub AleatorioTeste()
Dim lUltimaLinhaAtiva As Long
Dim sResult As String

Application.Volatile
   
lUltimaLinhaAtiva = Worksheets("Lista").Cells(Worksheets("Lista").Rows.Count, 2).End(xlUp).Row

For i = 1 To 5
    Range("D7").Formula = "=VLOOKUP(RANDBETWEEN(1," & lUltimaLinhaAtiva & "),Lista!A:B,2,0)"
'Pretendo armazenar a Variavel sResult em vez de jogar para a planilha
sResult = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.RandBetween(1, lUltimaLinhaAtiva), Sheets("lista").Range("A:B"), 2, 0)
Next i
Application.ScreenUpdating = True
    
End Sub

Se desejar armazenar as 5 'rodadas" e necessaro definir sResult como array e ir "carregando" os elementos individuais
Ficara algo =/-assim:

Public Sub AleatorioTesteArray()
Dim lUltimaLinhaAtiva As Long
Dim sResult(1 To 5) As String

Application.Volatile
   
lUltimaLinhaAtiva = Worksheets("Lista").Cells(Worksheets("Lista").Rows.Count, 2).End(xlUp).Row

For i = 1 To 5
    Range("D7").Formula = "=VLOOKUP(RANDBETWEEN(1," & lUltimaLinhaAtiva & "),Lista!A:B,2,0)"
'Pretendo armazenar a Variavel sResult em vez de jogar para a planilha
sResult(i) = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.RandBetween(1, lUltimaLinhaAtiva), Sheets("lista").Range("A:B"), 2, 0)
Next i
Application.ScreenUpdating = True
MsgBox sResult(1) & ", " & sResult(2) & ", " & sResult(3) & ", " & sResult(4) & ", " & sResult(5)
End Sub

Reinaldo

 
Postado : 22/10/2019 7:31 pm
Mauro Coutinho
(@coutinho)
Posts: 95
Estimable Member
Topic starter
 

Reinaldo, preciso sim, ja quebrei a cabeça com essa questão, as vezes consigo resolver coisas mais complexas, mas as vezes dá um branco geral e tem de ir pros universitários, até cheguei em uma instrução parecida, mas me dava só resultado vazio, e vendo agora entendi.
A parte dos 5 resultados não é minha intensão, mas é bom para eu aprender mais um pouco mestre, valeu, sou muito grato, agora já dá pra continuar meu projeto

abraços

Mauro Coutinho

 
Postado : 22/10/2019 11:32 pm