我一直在寻找一种基于常见单元格来连接我的Excel(或任何其他工具/软件处理表)行的方法。例如:
我有这个制表位分隔表。每个值都在单独的行中:
angeb* 12 16 18
zyste* 60 61
zynisch* 12
zyste* 60
abstreit* 70
anflunker* 70
angeb* 70
我想以这样的方式串联行:
angeb* 12 16 18 70
zyste* 60 61
zynisch* 12
abstreit* 70
anflunker* 70
它确实可以按照this tutorial中的建议进行工作,但是它仅将单个单元格值连接到另一个单个单元格中。我还尝试过this so question提出的基本方法,最后将我引向VLOOKUP(description)。但是它们都串联在细胞中。
基本上很简单,我需要合并具有相同列1的单元格,但要保留这些列,只是将它们串联起来。一旦将第二行添加到第一行,便可以将其删除。我尝试改编以上脚本,但无法一步一步地完成工作,只能将逗号分隔的值转换为单元格并将其复制到新列中。我不是VBA的专家,但这似乎是一个非常简单的功能,我可能会缺少一些东西。任何帮助是极大的赞赏。
答案 0 :(得分:0)
我已经完成了每个部分的编写和颜色编码,但这是常规方法:
问题-您仍然可以保持差距,但是现在都在同一行中!
以下是有关我的制作方法的快速YouTube视频。 TSpinde Answer 1
答案 1 :(得分:0)
您的问题让我有些困惑,所以我只串联了完全相同的名称。
所以我的代码的工作方式是创建一个标签数组,当遇到一个已经存在的标签时,它会寻找原始行中的下一个空插槽。然后,它将值添加到其中并执行此操作,直到它击中新行中的空白单元格为止。降低lastrow值并更改其所在的行有些有趣的事情,但这对于在下一个周期中移至正确的数据行很有必要。
此宏假定所有可能的数据条目都是并排的,例如,如果D2为空,则C2和E2中将没有值。
Sub macro()
Dim LastRow As Long
Dim LastCol As Long
Dim TagArray() As String
Dim count As Long
Dim i As Long
Dim j As Long
Dim PreExisting As Boolean
Dim Targetrow As Long
ReDim TagArray(1 To 1)
LastRow = Worksheets(1).Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastCol = Worksheets(1).Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
TagArray(1) = Worksheets(1).Range("A1").Value
For i = 2 To LastRow
PreExisting = False
For j = 1 To UBound(TagArray)
If Worksheets(1).Cells(i, 1) = TagArray(j) Then
PreExisting = True
Targetrow = j
Exit For
End If
Next j
If PreExisting Then
For j = 2 To LastCol
If Not IsEmpty(Worksheets(1).Cells(i, j)) Then
For count = 1 To LastCol
If IsEmpty(Worksheets(1).Cells(Targetrow, count)) Then
Worksheets(1).Cells(Targetrow, count) = Worksheets(1).Cells(i, j)
Exit For
Else
If count = LastCol Then
LastCol = LastCol + 1
Worksheets(1).Cells(Targetrow, LastCol) = Worksheets(1).Cells(i, j).Value
End If
End If
Next count
Else
Exit For
End If
Next j
Worksheets(1).Rows(i).Delete
LastRow = LastRow - 1
i = i - 1
Else
ReDim Preserve TagArray(1 To UBound(TagArray) + 1)
TagArray(UBound(TagArray)) = Worksheets(1).Cells(i, 1)
End If
Next i
End Sub
希望,如果您想在VBA中使用它而不是工作表功能,那么您会发现它很有用。