Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
#58484
Boa Tarde, amigos! Estou criando um DataSet para análise em Machine Learning, cujos dados originais estão em uma tabela do Excel. São efetuadas algumas operações tais como descobrir o maior valor na região selecionada, passagem da região para uma matriz em memória, ordenação e geração de uma segunda matriz contendo a quantidade de elementos repetidos na matriz original.

Até aí tudo funcionando 100%, mas não estou conseguindo "escrever" de volta os valores da matQtd na planilha, inciando na segunda linha vazia da coluna "A", após a matriz original (matOriginal).

Para fins de teste, usei uma matriz original pequena, com 2 linhas e 6 colunas, e valores entre 1 e 7, evitando criar uma matriz de quantidades muito grande.

Agradeço antecipadamente qualquer ajuda!

Obrigado,
Augusto Cesar
Código: Selecionar todos
Sub ContaQuantidade()

Dim rg As Range
Dim matOriginal As Variant
Dim i, j, temp As Long
Dim linAtual, colAtual As Long
Dim ultLinha As Long
Dim ultColuna As Long
Dim maiorValor As Long

' Obtém o número de linhas e colunas na matriz original

Set rg = Planilha1.Range("A1").CurrentRegion
ultLinha = rg.Rows.Count
ultColuna = rg.Columns.Count

' Pesquisa qual o maior valor dentro da região nomeada como rg

maiorValor = 0

For i = 1 To ultLinha
    For j = 1 To ultColuna
        If rg.Cells(i, j) > maiorValor Then
            maiorValor = rg.Cells(i, j)
        End If
    Next j
Next i

' Carrega para a matriz em memória os valores da região

matOriginal = Planilha1.Range("A1").CurrentRegion.Value

' Ordena ascendentemente cada linha da matriz usando o método bolha

For linAtual = 1 To ultLinha
    For i = 1 To ultColuna - 1
        For j = i + 1 To ultColuna
            If matOriginal(x, i) > matOriginal(x, j) Then
                temp = matOriginal(x, i)
                matOriginal(x, i) = matOriginal(x, j)
                matOriginal(x, j) = temp
            End If
        Next j
    Next i
Next linAtual

' Exibe cada linha da matriz ordenada ascendentemente (apenas para conferência)

For i = 1 To ultLinha
    For j = 1 To ultColuna
        Debug.Print matOriginal(i, j) & " ";
    Next j
    Debug.Print " "
Next i

For i = 1 To ((ultColuna * 2) - 1)
    Debug.Print "-";
Next i

Debug.Print ""

' Cria uma segunda matriz com as dimensões do número de linhas da matriz original
' e o número de colunas sendo o maior valor encontrado na matriz originall

ReDim matQtd(ultLinha, maiorValor) As Variant

' Preenche a matriz criada com zeros

For i = 1 To ultLinha
    For j = 1 To maiorValor
        matQtd(i, j) = 0
    Next j
Next i

' Ajustar cada Linha do Vetor de Quantidades para as quantidades encontradas em matOriginal

For linAtual = 1 To ultLinha
    For colAtual = 1 To ultColuna
        matQtd(linAtual, matOriginal(linAtual, colAtual)) = matQtd(linAtual, matOriginal(linAtual, colAtual)) + 1
    Next colAtual
Next linAtual

' Exibe a matriz de quantidades (apenas para conferência)

For i = 1 To ultLinha
    For j = 1 To maiorValor
        Debug.Print matQtd(i, j) & " ";
    Next j
    Debug.Print " "
Next i

For i = 1 To ((ultColuna * 2) - 1)
    Debug.Print "-";
Next i

' Seleciona a célula A1

Planilha1.Range("A1").Select

' Localiza a primeira célula vazia na coluna "A"

While ActiveCell.Value <> ""
    ActiveCell.Offset(1, 0).Select
Wend

' Desloca-se para uma segunda linha vazia abaixo da encontrada na operação acima

ActiveCell.Offset(1, 0).Select

'
' Escrever os valores da matriz matQtd na região que inicia-se
' na célula anteriormente selecionada
'
' Aqui é que está a minha dificuldade:
' Qual a forma correta de escrever matQtd a partir da segunda célula vazia na coluna "A"?
'

' ActiveCell.Offset(1, 0).Value = matQtd ' Desta forma só escreve um valor
' Range("A10:F16").Value = matQtd

End Sub
#58487
Anexa um exemplo com dados fictícios para poder depurar seu código, por favor. Aí fica mais fácil de ajudar.
#58492
Prezado Amigo, segue a imagem da planilha de exemplo.
Fiz um print screen da janela do Excel com os dados, mas não estou sabendo como anexar a esta mensagem... Se puder ajudar nesse quesito, agradeço !!!
Já cliquei no botão para enviar a imagem salva aqui no meu computador, mas não tenho a certeza de que foi anexada (ou algo parecido...)!
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord