我有32.000行数据。有些数据位于不同的地方,我希望将它们加入到我可以应用于所有行而不是手动的内容中。每个"组"具有相同的ID,在此示例中为" XPTO"
问题在于我需要一种聪明的方法,因为它们并不总是像这个例子。其中一些有10行具有相同的ID" XPTO" (实施例)
我正在努力克服这个= / ty
答案 0 :(得分:0)
这是我如何处理这个问题。
1)从你的评论中,我理解逻辑是位置的(左边的第一个(Casteloes de)与右边的第一个(R Dr Antonio)一起用于A列中的匹配值。如果是是的,然后我会插入一个列,您可以按顺序开始编号,然后向下填充以获得一直到最后的序列号。如果您需要对数据进行排序或重新排列,这将有助于保留位置逻辑。它还有助于你有“第一场比赛”,“第二场比赛”等逻辑
2)我的下一步是将两组数据分成单独的表/标签(每个表中都有顺序编号的列)并使用INDEX / MATCH。最近的答案将帮助您了解如何增加匹配:Is there such thing as a VLOOKUP that recognises repeated numbers?
3)备选方案 - 这甚至可能更容易,但您需要进行大量数据检查以确保没有任何问题被搞砸。使用步骤2中的两个表,按任意列对其中的数据进行排序,然后从每个表中删除空行。然后,按顺序编号的列对每个进行排序以返回到原始顺序。此时,您可以只能复制和粘贴。如果你这样做,请仔细检查是否有错误。
答案 1 :(得分:0)
我很肯定上面的解决方案由CriketBird提供,至少它有一个很好的逻辑来解决它,但由于我是excel的新手,我无法弄明白如何以这种方式解决它。
所以我通过在excel中使用VBA来解决它...(也许我对这个简单的问题走得太远了,但这是我唯一的选择)。
如果有人想要类似的情况,我会把代码留在这里。 (只需选择表格的第一列和第一行并点击运行)
Function Area(medico As String) As Integer
Do While countOk < 1
If medico = ActiveCell.Value Then
ActiveCell.Offset(1, 0).Select
rowCount = rowCount + 1
Else: countOk = 1
End If
Loop
Area = rowCount
End Function
Sub Teste()
Dim PaginaMedico As String
Dim totalrowCount As Integer
Dim rowCount As Integer
Dim countOk As Integer
Dim right As Integer
Dim left As Integer
Dim listaleft As New Collection
Dim listaright As New Collection
rowCount = 1
rowOk = 0
totalrowCount = 0
right = 0
left = 0
Do While ActiveCell.Value <> 0
PaginaMedico = ActiveCell.Value
rowCount = Area(PaginaMedico)
totalrowCount = totalrowCount + rowCount
Range("A" & (totalrowCount - (rowCount - 1))).Select
For i = ((totalrowCount + 1) - rowCount) To totalrowCount
If IsEmpty(Range("E" & (i)).Value) And IsEmpty(Range("F" & (i)).Value) Then
Range("T" & (i)).Value = "Empty"
ElseIf Not IsEmpty(Range("E" & (i)).Value) And Not IsEmpty(Range("F" & (i)).Value) Then
Range("T" & (i)).Value = "Full"
ElseIf Not IsEmpty(Range("E" & (i)).Value) And IsEmpty(Range("F" & (i)).Value) Then
left = left + 1
listaleft.Add i
ElseIf IsEmpty(Range("E" & (i)).Value) And Not IsEmpty(Range("F" & (i)).Value) Then
right = right + 1
listaright.Add i
End If
Next i
If Not (right = left) Then
Range("T" & totalrowCount).Value = "BOSTA"
right = 0
left = 0
End If
If listaleft.Count = listaright.Count Then
For i = 1 To listaleft.Count
Range("F" & listaright(1) & ":" & "S" & listaright(1)).Cut Range("F" & listaleft(1) & ":" & "S" & listaleft(1))
listaright.Remove (1)
listaleft.Remove (1)
Next i
End If
Set listaleft = New Collection
Set listaright = New Collection
Range("A" & (totalrowCount + 1)).Select
Loop
End Sub