excel - 在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 |
解决方案
请尝试下一个代码。我(仅)希望我在这种情况下正确理解了您对“集群”的定义:
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 解决了问题,并且您还必须经常检查是否有澄清问题并回答它们...
我做了一个例外,假设你不知道规则,但只是现在。
请在测试代码后发送一些反馈。
推荐阅读
- javascript - UseEffect 不是由依赖项触发的?
- android - 如何在 Android/iOS 上为 C++ gRPC 连接使用默认 SSL 证书管理?
- firebase - privateRuntimeConfig 值在插件下未定义
- oracle - 无法理解 ':new' 的工作原理
- python - 将变量乘以 10 不起作用?
- https - 使用 gerrit 启用 https 会导致 502 bad gateway
- javascript - 使用 jQuery 访问多个输入字段值
- continuous-deployment - AWS Appsync 部署策略
- python - Best way to access shared network drives and delete specific files
- python - 如何根据其他列的条件分配新列?