我正在尝试收集 Excel 工作表的多个列中与某个值匹配的行号。我正在寻找的行为反映了下表:
|---|---------|---------|---------|
| 1 | A | B | A |
|---|---------|---------|---------|
| 2 | B | A | A |
|---|---------|---------|---------|
| 3 | C | A | C |
|---|---------|---------|---------|
| 4 | A | A | C |
|---|---------|---------|---------|
| 5 | C | B | B |
|---|---------|---------|---------|
| 6 | A | B | B |
|---|---------|---------|---------|
| | Results | | |
|---|---------|---------|---------|
| A | 1, 4, 6 | 2, 3, 4 | 1, 2 |
|---|---------|---------|---------|
| C | 3, 5 | | 3, 4 |
|---|---------|---------|---------|
到目前为止,我已经设法通过对每个单元格进行单独调用来创建表的镜像版本并从那里减少它,从而实现了我想要的结果,IF
但更广泛地扩展它却很麻烦。有什么想法吗?
答案1
虽然不漂亮,但是很短,是一个开始。
Sub collectRows()
Set rngInput = Range("C2:E7")
Set rngFilter = Range("A10:A11")
For Each rngCell In rngInput
If Not rngFilter.Find(what:=rngCell, LookAt:=xlWhole) Is Nothing Then
rngFilterRow = rngFilter.Find(what:=rngCell, LookAt:=xlWhole).Row
Cells(rngFilterRow, rngCell.Column) = Cells(rngFilterRow, rngCell.Column) & ", " & rngCell.Row
End If
Next
End Sub
答案2
是否必须在 Excel 中完成。只要跳出思维定式,如果您将数据加载到 SQL Server 中,则运行查询以获取此信息将很容易。
答案3
对于任何可能觉得有用的人,以下是使用 Google Apps Script 执行此操作的方法:
// Example Usage:
// =collectMatches("A", C2:C5)
function collectMatches(target, columns) {
collection = [];
for (var i = 0; i < columns.length; i++) {
if (columns[i][0].toLowerCase() === target.toLowerCase()) {
Logger.log(target)
collection.push(i+1)
}
};
return collection.join(', ');
}