首页 > 解决方案 > 在Excel中的列中提取一组值的第一个值

问题描述

问题:遍历一列以提取具有相同值的单元格簇中的所有第一个单元格,但诀窍是即使先前在列中看到一个值并且稍后在列中再次出现(可能在另一个簇中),但不在以下单元格中,它将被视为“唯一”值并再次被提取:

例如,以下示例可能更有意义:

数据:

ID 价值
012 1
123 1
234 2
345 2
456 2
567 1
678 1
789 3
890 3

需要的输出:

ID 价值
012 1
234 2
567 1
789 3

标签: excelvba

解决方案


请尝试下一个代码。我(仅)希望我在这种情况下正确理解了您对“集群”的定义:

Sub extractFirstClaster()
  Dim sh As Worksheet, lastR As Long, arr, arrFin, arrCl
  Dim i As Long, k As Long
  
  Set sh = ActiveSheet
  lastR = sh.Range("A" & sh.rows.count).End(xlUp).row
  
  arr = sh.Range("A2:B" & lastR).value
  ReDim arrFin(1 To 2, 1 To UBound(arr))
  ReDim arrCl(UBound(arr) - 1)
  For i = 1 To UBound(arr) - 1
        If arr(i, 2) = arr(i + 1, 2) Then
            If IsError(Application.match(arr(i, 2), arrCl, 0)) Then
                k = k + 1
                arrFin(1, k) = CStr(arr(i, 1))
                arrFin(2, k) = arr(i, 2)
                arrCl(k - 1) = arr(i, 2)            
            End If
        Else
            ReDim arrCl(UBound(arr) - 1)
        End If
  Next i

  ReDim Preserve arrFin(1 To 2, 1 To k)
  With sh.Range("D2").Resize(k, 2)
    .NumberFormat = "@"
    .value = WorksheetFunction.Transpose(arrFin)
  End With
End Sub

请注意,当您提出问题时,必须证明您已通过 onw 解决了问题,并且您还必须经常检查是否有澄清问题并回答它们...

我做了一个例外,假设你不知道规则,但只是现在。

请在测试代码后发送一些反馈。


推荐阅读