Ir ao conteúdo

Posts recomendados

  • Solução
Postado
Em 18/06/2024 às 14:52, GENECIOFICIAL disse:

 ... elaborar uma macro ou VBA ...

Um código escrito em linguagem VBA e adequadamente instalado e operado em um arquivo Office torna-se uma macro, então não faz sentido dizer "macro ou VBA", visto que não são alternativas entre si: macro é um objeto e VBA é uma a linguagem.

 

Para a sua questão, experimente o código abaixo.

 

Sub ReplicaAleat()
 Dim c As Range, i As Integer, ii As Integer
  Range("F16:O25") = ""
  i = Int(16 + Rnd * (10)): ii = Int(6 + Rnd * (10))
   For Each c In Range("F5:O14")
    Do Until Cells(i, ii) = ""
     i = Int(16 + Rnd * (10)): ii = Int(6 + Rnd * (10))
    Loop
    Cells(i, ii) = c.Value
   Next c
End Sub

 

  • Obrigado 1
Postado

Bom dia!

 

O código funcionou conforme solicitação,

Muito o obrigado pela valiosa explicação, 

Não faz sentido dizer "macro ou VBA", visto que não são alternativas entre si: macro é um objeto e VBA é uma a linguagem.

Que falta faz-me um curso na modalidade presencial, encontrei apenas online, confesso que tentei e porém não me adaptei,

 

Grato,

 

Postado

No Office hoje o sentido de Macro só é associado ao VBA, porém é possível criar Macros no Excel sem ser na linguagem VBA. Macros são só ações ou conjunto de instruções que definimos para executar repetidas vezes.

 

Desde a primeira versão o Excel tem o recurso de Macro antes do VBA que só veio na verão 5.0. Quase ninguém mais usa, mas o ambiente de programação fica na opção Inserir das abas.

  • Curtir 1
Postado

O código que postei antes considera que os números contidos na tabela em F5:O14 poderão ser quaisquer números, e não somente de 1 a 100, daí a necessidade da segunda tabela em F16:O25

Já o código abaixo considera que os números contidos na tabela serão sempre de 1 a 100, então o código abaixo irá preencher a tabela com os números de 1 a 100 em ordem aleatória, o que dispensa o uso da segunda tabela em F16:O25.

 

Sub GeraAleat() 'gera tabela com números de 1 a 100 em ordem aleatória
 Dim k  As Integer, i As Long, ii As Long, r1 As Range, r2 As Range, r3 As Range
  Application.ScreenUpdating = False: [F5:O14] = ""
  For i = 5 To 14
   For ii = 6 To 15
    If i > 5 Then
     Set r1 = [F5].Resize(i - 5, 10): Set r2 = [F5].Offset(i - 5).Resize(, ii - 5)
    Else
     Set r1 = [F5]: Set r2 = [F5].Resize(, ii - 5)
    End If
    Set r3 = Union(r1, r2)
    k = Int(1 + Rnd * (100)): Cells(i, ii) = k
     Do Until Application.CountIf(Range(r3, Cells(i, ii)), k) = 1
      k = Int(1 + Rnd * (100)): Cells(i, ii) = k
     Loop
   Next ii
  Next i
End Sub

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...