Como gerar sequência 1,2,3,... no Excel com cada membro repetido N vezes

Como gerar sequência 1,2,3,... no Excel com cada membro repetido N vezes

Vamos considerar uma sequência: 1,2,3,4,5.... Obviamente, isso é fácil de criar no Excel. Mas como você criaria uma sequência derivada, onde cada membro da sequência original ocorre 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 adição especial de colar, deslizando N linhas para baixo a cada rodada. No entanto, isso está longe de ser uma boa solução.

Obrigado por suas idéias.

Responder1

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

Se você está começando em A1, insira esta fórmula e copie-a:

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

ARREDONDAR PARA CIMAarredonda um número para cimancasas decimais. Nesse caso,né definido como 0 para que o Excel arredondará para o número inteiro mais próximo.

LINHASconta o número de linhas em um intervalo. Ajuste a referência de alcance de acordo com sua localização inicial. Ao copiar/colar, o Excel fará os ajustes para as outras células.

Nota: O cifrão aqui éimportante. Bloqueia a referência para o início da faixa para quesempreesteja na linha inicial do seu intervalo (ou, mais apropriadamente, na linha da primeira célula em que você colocou a fórmula - então comece com isso na primeira linha do seu intervalo), não importa como você copia/cola a fórmula. Sem isso, sua fórmula será quebrada quando você a copiar. Então, altere as letras e os números de acordo com onde ficará sua primeira célula, mas deixe aquele cifrão lá.

insira a descrição da imagem aqui

/3existe para dividir a contagem de ROWS por três. Como isso está dentro da função ROUNDUP e está definido com 0 casas decimais, todos os resultados serão arredondados para o número inteiro mais próximo. Depois que a fórmula for preenchida no restante da coluna, isso resultará na repetição de cada número 3 vezes. Para obter uma taxa de repetição diferente, altere 3 para um número diferente.


Se você está querendo fazer issoentrealinha, em vez deabaixoacoluna(por exemplo: em A1, B1, C1,... em vez de A1, A2, A3,...) você precisará usar a função COLUMNS em vez de ROWS e ajustar a referência do intervalo para que a coluna inicial fique bloqueada em vez da linha inicial.

Exemplo:

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

Para uma fórmula que funcionará em sequênciaoulayout de coluna, você poderia usar algo como o mostrado abaixo, mas é melhor apenas escolher um dos acima de acordo com o layout que você está realmente usando. Isso também produzirá resultados provavelmente indesejáveis ​​se o seu intervalo abranger várias linhasemúltiplas colunas.

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

Para algo que não é sequencial e/ou não numérico, você desejará reservar um intervalo para ser usado como sua lista de fontes. Digamos que sua lista de valores de origem esteja na coluna B, começando em B1. Para isso, para repetir os valores 3 vezes cada na Coluna A, você usaria isso em A1 e copiaria:

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

Nota: Isto não ajustará 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 os dados de origem começarem em uma linha diferente da linha 1, você precisará ajustar um pouco a fórmula para adicionar o 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)))

Responder2

Um que descobri funcionou bem para matrizes dinâmicas:

=ROUNDDOWN(SEQUENCE(count*repeats,,1,1/repeats),0)

por exemplo, para contagem = 2, com repetições = 3

=ROUNDDOWN(SEQUENCE(6,,1,1/3),0)

Produz:

1,1,1,2,2,2

Responder3

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 Macro do Excel (VBA). Para começar rapidamente, você pode registrar as etapas aproximadas que deseja automatizar em uma macro e, em seguida, 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

informação relacionada