Como inserir o valor das linhas automaticamente com base em outro valor de célula

0

Primeiro, por favor, olhe esta planilha do excel:

Atabelademesescontémdadosdoanointeiro.Seeuselecionarqualquermêsdatabeladigitandoouselecionandonomenususpenso(porexemplo,"Selecionado"), apenas essas linhas serão exibidas após determinadas linhas. Como por exemplo, eu quero que as linhas selecionadas apareçam depois das linhas 14 e seguintes (ou seja, as Linhas não aparecerão antes da linha 15). Como conseguir isso?

Para suas informações de tipo, o número de linhas selecionadas pode variar. Como por exemplo, na tabela acima, há duas linhas selecionadas (abril e setembro). Mas pode ser março, abril & Setembro selecionado. Portanto, não posso especificar um intervalo de células no qual as linhas selecionadas serão exibidas. Além disso, haverá algum texto nas linhas 17. Portanto, as linhas selecionadas devem ser inseridas dinamicamente após as linhas 14.

Alguma ideia de como conseguir isso?

    
por Abdullah Mamun-Ur- Rashid 27.11.2016 / 08:50

2 respostas

0

Eu provavelmente usaria uma tabela dinâmica. Mês iria em COLUMNS enquanto B, C & D em VALUES (isto deve essencialmente fazer a tabela parecer mais ou menos a mesma que a sua). O parâmetro de seleção precisa ser colocado em FILTERS para mostrar apenas as coisas que você quer.

A coisa ruim é que cada equipe que você deseja que as alterações sejam exibidas, você precisa atualizar a Tabela Dinâmica (RMB e Atualizar ou através de Análise; alternativamente você pode usar uma macro para fazê-lo periodicamente para você).

    
por 27.11.2016 / 12:29
0

Passo 1 - A lista

Primeiro, você pode adicionar a parte "Selecionada" com uma lista suspensa.
Com E1 selecionado, vá para a aba Data e selecione Validação de dados . Selecione List e escreva Selecionado como Source .
Agora arraste E1 para E12 para obter a lista em todas as células.

Etapa 2 - o código

Adicionando linhas
Para acompanhar essas células, alterar um Worksheet_Change Sub funciona muito bem. Clique com o botão direito do mouse em "Sheet1" ( ou equivalente ) e selecione Show code .

Para acompanhar e copiar as linhas selecionadas, podemos fazer algo assim:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer, r As Integer
On Error GoTo EndM
If Target.Value = "Selected" And Target.Column = 5 And Target.Row < 13 Then
    For r = 15 To 30
        If Cells(r, 1).Value = "" Then
            Range("A" & r & ":D" & r).Cells.Value = Range("A" & Target.Row & ":D" & Target.Row).Cells.Value
            i = 1
        End If
        If i > 0 Then GoTo EndM
    Next r
End If
EndM:
End Sub

Isso procura por alterações na planilha. E, se a alteração de qualquer célula de E1 para E12 for alterada para "selecionar", ela copia as colunas A para D da mesma linha, para a primeira linha vazia a partir da linha 15.
Nota
Isto não impede que você selecione a mesma entrada duas vezes, ou seja, obtendo duas linhas de janeiro. Ele também é definido como um limite da linha 30. Após a linha 30, ele não adicionará mais entradas. Pode ser alterado alterando o valor 30 em For r = 15 To 30

Excluindo linhas
Podemos usar basicamente o mesmo método para excluir as linhas novamente quando excluirmos o valor "Selecionado" adicionando

If Target.Column = 5 And Target.Row < 13 And Target.Value = "" Then
    For r = 15 To 30
        If Cells(r, 1).Value = Cells(Target.Row, 1) Then
            Range("A" & r & ":D" & r).Cells.Delete
        End If
    Next r
End If

Entre End If e EndM: no exemplo anterior.

O manipulador Error é necessário para que a planilha não lance um erro sempre que você tentar excluir várias células por vez.
Observação
Isso não será executado se você excluir várias células ao mesmo tempo e não excluirá todas as linhas se o mesmo mês estiver presente duas vezes seguidas.

Você pode, claro, adicionar ou alterar funcionalidades, como restringir a adição de várias entradas adicionando:

            ElseIf Cells(r, 1).Value = Cells(.Row, 1).Value Then
            MsgBox ("Multiple entries are not allowed!")
            GoTo EndM

Entre i = 1 e End If na parte Adicionando.
Boa sorte!

    
por 28.11.2016 / 13:08