Como gerar 1,2,3,… seqüência no Excel com cada membro repetido Ntimes

2

Vamos considerar uma sequência: 1,2,3,4,5 .... Isso é obviamente fácil de criar no Excel. Mas como você criaria uma sequência derivada, onde cada um dos membros da sequência original está lá N vezes seguidas?

para N = 3 1,1,1,2,2,2,3,3,3,4,4,4, ... etc.

Acabei copiando a coluna de 1s com a função de adicionar pasta especial deslizando N linhas para baixo a cada rodada. Isso está longe de ser uma boa solução.

Obrigado pelas suas ideias.

    
por NeverStopLearning 04.09.2014 / 16:41

2 respostas

4

A solução mais simples para isso é usar uma fórmula regular do Excel.

Se você está começando na A1, solte essa fórmula e copie-a:

=ROUNDUP(ROWS(A$1:A1)/3,0)

ROUNDUP arredonda um número até n casas decimais. Nesse caso, n é definido como 0, portanto, o Excel será arredondado para o número inteiro mais próximo.

ROWS conta o número de linhas em um intervalo. Ajuste a referência do intervalo de acordo com a sua localização inicial. Quando você copia / cola, o Excel manipula ajustes para as outras células.

Nota: o cifrão aqui é importante . Ele bloqueia a referência para o início do intervalo, de modo que sempre esteja na linha inicial de seu intervalo (ou, mais propriamente, na linha da primeira célula em que você soltar a fórmula). comece com isso na primeira linha do seu intervalo) não importa como você copie / cole a fórmula. Sem isso, sua fórmula vai quebrar quando você copiá-lo. Então, mude as letras e os números de acordo com a localização da sua primeira célula, mas deixe o cifrão lá.

/3estáláparadividiracontagemdeROWSportrês.ComoissoestádentrodafunçãoROUNDUP,eissoédefinidocomo0casasdecimais,todososresultadosserãoarredondadosparaonúmerointeiromaispróximo.Depoisqueafórmulaépreenchidapelorestantedacoluna,issoresultaráemcadanúmerorepetindo3vezes.Paraobterumataxaderepetiçãodiferente,altere3paraumnúmerodiferente.

Sevocêestáprocurandofazerissoentreumalinha,emvezdeabaixoumacoluna(porexemplo:emA1,B1,C1,...emvezdeA1,A2,A3,...)vocêprecisaráusarafunçãoCOLUMNSemvezdeROWSeajustarareferênciadointervaloparaqueacolunainicialsejabloqueadaemvezdealinhadepartida.

Exemplo:

=ROUNDUP(COLUMNS($A1:A1)/3,0)

Paraumafórmulaquefuncioneemumesquemadecolunasou,vocêpodeusaralgocomooabaixo,masémelhorescolherapenasumadasopçõesacima,deacordocomolayoutquevocêestárealmenteusando.Issotambémproduziráresultadosprováveisindesejáveisseoseuintervaloabrangerváriaslinhaseváriascolunas.

=ROUNDUP(COLUMNS($A1:A1)*ROWS(A$1:A1)/3,0)

Paraalgoquenãoésequenciale/ounãonumérico,vocêvaiquererreservarumintervaloparaserusadocomosualistadeorigem.DigamosquesualistadevaloresdeorigemestejanacolunaB,começandoemB1.Paraisso,pararepetirosvalores3vezescadanacolunaA,vocêusariaissoemA1ecopiaria:

=INDIRECT(CONCATENATE("B",ROUNDUP(ROWS(A$1:A1)/3,0)))

Nota: isso não será ajustado para o movimento da coluna de origem. Você terá que corrigir manualmente a fórmula, alterando "B" para corresponder ao novo local, se a coluna de origem for movida. Se seus dados de origem começarem em uma linha diferente da linha 1, você precisará ajustar a fórmula um pouco para adicionar no deslocamento.

Se você quiser ajustar a taxa de repetição, use uma célula de referência para o divisor. O exemplo abaixo começa com a fórmula anterior e assume que o divisor estará em C1.

=INDIRECT(CONCATENATE("B",ROUNDUP(ROWS(A$1:A1)/C1,0)))
    
por 04.09.2014 / 17:32
0

Para ser flexível e reutilizável para outras situações (incluindo recursos como colocar os resultados em linhas ou colunas, pastas de trabalho diferentes, etc.) - a melhor abordagem é usar a linguagem de macro (VBA) do Excel. Para começar rapidamente, você pode gravar as etapas aproximadas que deseja automatizar em uma macro e editar essa macro para ajustar e personalizar. Por exemplo, aqui está um código vba para triplicar cada célula da primeira coluna na terceira coluna:

Sub triplicate()

iDestCol = 3
nCopy = 3
rowEnd = ThisWorkbook.ActiveSheet.Range("a" & Rows.Count).End(xlUp).Row
nIndex = 0
With ThisWorkbook.ActiveSheet

For i = 1 To rowEnd
    For j = 1 To nCopy
        Cells((nIndex + j), iDestCol) = Cells(i, 1)
    Next j
    nIndex = nIndex + nCopy

Next i
End With

End Sub
    
por 04.09.2014 / 17:24