Como criar uma lista de produtos com um proprietário, a partir de uma lista de vários proprietários?

1

Eu tenho uma lista de produtos em A2: A21 (A1: M1 é a barra de título). Por trás desses produtos estão os nomes de 12 proprietários (B2: M21) que podem reparar esses produtos. MAS ... nem todos os proprietários podem reparar todos os produtos. É por isso que existem células vazias. Eu quero criar uma segunda folha automática que tenha a mesma lista de produtos, mas agora apenas com um proprietário por trás, selecionada a partir dos proprietários disponíveis. Eu também gostaria que a seleção fosse dividida igualmente. De modo que todos os proprietários tenham a mesma quantidade de produtos (ou o mais próximo possível). Obrigada!

    
por FrankieS 11.02.2015 / 09:48

2 respostas

1

O que você está descrevendo é uma simples Programação Linear (ou Integer Programming ) problema. O Excel tem um add-in para o chamado Solver, que está desabilitado por padrão. Você pode ativá-lo em Excel Options > Add-Ins > Manage Excel Add-Ins (Go) . Isso adiciona o solucionador à sua faixa de opções, na guia Dados.

Seu objetivo para resolver seria maximizar o número total de reparadores diferentes. Suas restrições são se alguém pode ou não consertar um determinado produto, e que cada produto precisa de pelo menos um reparador.

Para saber mais sobre como o solucionador funciona, você pode usar o Google, mas este tutorial parece ser bom para mim.

    
por 11.02.2015 / 11:19
1

Digamos que começamos com:

Amacroaseguircopiaprimeiroaprimeiracolunaparaasegundafolha.Amacrocomeçaentãocomoprimeiroproduto(celular)evarreascolunascomeçandocomacolunaBprocurandoporum"X". Quando o "X" é encontrado, o proprietário é transferido para a segunda planilha.

A macro passa para o segundo produto (carregador) e repete a digitalização pelas colunas. Mas agora começa com a coluna C em vez da coluna B ........... para ajudar a distribuir os proprietários uniformemente. Aqui está a macro:

Sub Owner()
    Dim s1 As Worksheet, s2 As Worksheet
    Dim i As Long, j As Long
    Set s1 = Sheets("Sheet1")
    Set s2 = Sheets("Sheet2")
    s1.Range("A:A").Copy s2.Range("A1")
    j = 2
    For i = 2 To 21
loopit:
        If s1.Cells(i, j) = "X" Then
            s2.Cells(i, 2).Value = s1.Cells(1, j).Value
            j = j + 1
            If j = 14 Then j = 2
            GoTo exloopit
        Else
            j = j + 1
            If j = 14 Then j = 2
        End If
        GoTo loopit
exloopit:
    Next i
End Sub

e aqui está um exemplo da folha de saída:

    
por 11.02.2015 / 15:48