Como posso combinar duas listas em uma lista longa?

3

Eu tenho duas listas nas colunas 1 e 2. Preciso que a coluna 3 seja do formato um traço dois.

Por exemplo:

A coluna C precisará repetir todos os valores de A e B.

Eu preferiria uma fórmula para isso ser possível, se não, então eu poderia usar o VBA. Além disso, meus dados não são tão simples quanto o ABC e o 123.

    
por Kevin Anthony Oppegaard Rose 04.02.2015 / 11:27

3 respostas

6

O que você está procurando é chamado de " Produto Cartesiano " ou "associação externa".

A solução como VBA. Copie o código a seguir para o lado direito do Editor do Visual Basic. Você verá que sua macro agora tem um nome "cartesianproduct": ( Source )

Sub cartesianproduct()
Dim startrange As Range

range1 = Application.InputBox(Prompt:="Please Select First Range", Type:=8)
range2 = Application.InputBox(Prompt:="Please Select Second Range", Type:=8)
Set startrange = Application.InputBox(Prompt:="Please select where you want to put it", Type:=8)

array1 = [range1]
array2 = [range2]

startrange.Select
For i = 1 To UBound(array1)
    For x = 1 To UBound(array2)
        z = z + 1
        ActiveCell.Offset(z, 0).Value = array1(i, 1)
        ActiveCell.Offset(z, 1).Value = array2(x, 1)
    Next
Next
End Sub

Eu também encontrei aqui uma solução como uma fórmula (não testada!):

=IF(ROW()-ROW($F$1)+1>COUNTA(A:A)*COUNTA(B:B),"",INDEX(A:A,INT((ROW()-ROW($F$1))/COUNTA(B:B)+1)) & " - " & INDEX(B:B,MOD(ROW()-ROW($F$1),COUNTA(B:B))+1))

Eu adicionei apenas "-" entre os dois valores ...

    
por 04.02.2015 / 11:37
2

Aqui está outra fórmula: insira C1 e preencha até obter os espaços em branco:

=IFERROR(INDEX(Col_A,INT((ROWS($1:1)-1)/COUNTA(Col_B))+1) & "-" &INDEX(Col_B,MOD(ROWS($1:1)-1,COUNTA(Col_B))+1),"")

Eu usei nomes dinâmicos para me referir aos dados da coluna; você pode querer mudar isso:

Col_A   refers to:  =OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A))
Col_B   refers to:  =OFFSET(Sheet1!$B$1,0,0,COUNTA(Sheet1!$B:$B))
    
por 04.02.2015 / 13:53
1

Como o duDE já propôs uma solução com o VBA, gostaria de mostrar outra com o Javascript.

Você pode facilmente manipular o Excel codificando o Javascript com a ajuda de uma ferramenta chamada Funfun . Aqui está o código principal:

<script>
var column1 = new Array();
  for(var i=0; i<$internal.column1.length; i++){
   column1[i] = $internal.column1[i]
  };
var column2 = new Array();
  for(var i=0; i<$internal.column2.length; i++){
   column2[i] = $internal.column2[i]
  };
var added = $internal.add;
console.log(added);
var output = new Array();
for(var i=0; i<$internal.column2.length; i++){
   output[i] = column1[i] + added + column2[i];
  };
  console.log(output);
$internal.result = output;

$ internal é uma API fornecida pelo Funfun que ajuda você a obter acesso aos dados na planilha do Excel. Você pode alterar os dados e sua área em Configuração. O seguinte é a configuração desta função:

{
"add": "=C2",
"column1": "=A2:A9",
"column2": "=B2:B9",
"result": {
    "Type": "Output",
    "Address": "=D2:D9"
}

Com um único clique da função, todos os dados e resultados serão carregados na planilha. Assim como a figura a seguir mostra:

Porúltimo,masnãomenosimportante,oFunfuntambémforneceumaversãodosite,comaqualvocêpodeescreversuaprópriafunçãomaisconfortavelmente.Olink desta função

Espero que ajude:)

    
por 31.01.2018 / 06:35