Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 连接两列之间的置换_Excel_Vba - Fatal编程技术网

Excel 连接两列之间的置换

Excel 连接两列之间的置换,excel,vba,Excel,Vba,我需要excel作业的帮助 Name City --------------- John London Maxx NY Ashley DC Paris 解决方案必须是: John-london John-NY John-DC John-Paris Maxx-london Maxx-NY . . . .so on. 简单地说,我必须将一列中所有元素的文本添加到另一列中所有元素的文本中。如果提供没有宏或VB的解决方案,我将不胜感激 结果列公式应为 =colum

我需要excel作业的帮助

Name    City
---------------
John    London
Maxx    NY
Ashley  DC
        Paris
解决方案必须是:

John-london
John-NY
John-DC
John-Paris
Maxx-london
Maxx-NY
.
.
.
.so on.

简单地说,我必须将一列中所有元素的文本添加到另一列中所有元素的文本中。如果提供没有宏或VB的解决方案,我将不胜感激

结果列公式应为

=column1&"-"&column2

这是VBA中的一个简单示例。它旨在展示概念,而不是最佳实践。请使用它让您开始,如果您需要更多帮助,如果您想提高性能,请回到这里

该示例假设这两个列表位于
A1:An
B1:Bm
中,结果列表位于
C
列中

Sub Test()
  Dim R1 As Integer, R2 As Integer, R As Integer, NR As Integer
  NR = ActiveSheet.UsedRange.Rows.Count
  Columns(3).Clear
  For R1 = 1 To NR
    If Not IsEmpty(Cells(R1, 1)) Then
      For R2 = 1 To NR
        If Not IsEmpty(Cells(R2, 2)) Then
          R = R + 1
          Cells(R, 3) = Cells(R1, 1) & " - " & Cells(R2, 2)
        End If
      Next R2
    End If
  Next R1
End Sub
您可以使用此公式(从第1行开始填写,直到用完组合):


我使用命名范围“L_1”和“L_2”分别引用第一个和第二个列表

这里有一个可以使用的数组公式,不过您需要根据有多少个条目来修改矩阵的大小

=CONCATENATE(INDEX(A:A,MMULT(ROW(A1:A3),TRANSPOSE(ROW(B1:B4))/TRANSPOSE(ROW(B1:B4)))),"-",INDEX(B:B,MMULT(ROW(A1:A3)/ROW(A1:A3),TRANSPOSE(ROW(B1:B4)))))
假设A列是名称,B列是城市,您可以选择12个单元格(3行高,4列宽),将上述公式粘贴到第一个单元格中,然后按Ctrl+Shift+Enter键创建新的单元格

如果您想查看更简单的版本,以了解它在
索引
引用之前的功能,请使用相同的区域进行检查:

=CONCATENATE(MMULT(ROW(A1:A3),TRANSPOSE(ROW(B1:B4))/TRANSPOSE(ROW(B1:B4))),"-",MMULT(ROW(A1:A3)/ROW(A1:A3),TRANSPOSE(ROW(B1:B4))))
以下是单个公式的屏幕截图(公式分为两行)显示了多个单元格的输出:


您的数据集有多大?此外,您是否可以剪切、复制和粘贴此作业?将
vba
添加到您的标记此方法的一个缺点是,如果您想要这些项目中的一列,则需要执行超出此答案范围的额外步骤。我的数据将按行显示。这意味着A1:A3中的内容现在是A1:C3。B1:B4现在是A2:D4。我尝试根据更改单元格的引用(如从行()到列()),但不起作用。有人能帮忙吗?@user3454439,本着时间的精神,你应该试着问一个新问题,并参考这个。。。或者在尝试此解决方案之前先转换数据。
=CONCATENATE(MMULT(ROW(A1:A3),TRANSPOSE(ROW(B1:B4))/TRANSPOSE(ROW(B1:B4))),"-",MMULT(ROW(A1:A3)/ROW(A1:A3),TRANSPOSE(ROW(B1:B4))))