【问题标题】:How do I find a repeating set of cells in Excel?如何在 Excel 中找到一组重复的单元格?
【发布时间】:2014-10-27 12:53:08
【问题描述】:

我有一个 2100 行 6 列的表

整个表格只有 12 个可能的值,例如 A、B、C、D、E、F、G、H、I、J、K、L 第 12 个值 L 只是一个空白填充符。它表示空白单元格。

由于表格中只有 11 个可能的值,因此可以观察到模式。

首先出现一个模式,然后在表格的某处重复。 可以有任意数量的模式,但我有一个特定的模式可以找到并报告这种方式。

欢迎使用 EXCEL-VBA、PHP-MYSQL 或 C 中的解决方案。

我附上了我正在寻找的示例。欢迎提出建议提炼 问题。

信息和格式:http://ge.tt/8QkQJet1/v/0 [ DOCX 文件 234 KB ]

Excel 表中的示例:http://ge.tt/69htuNt1/v/0 [XLSX 文件 16 KB]

请评论更多信息或具体要求。

【问题讨论】:

  • 首先,您是希望选择一个“模式”来查找,还是要求它查看您拥有信息的 10,000 个奇数单元格中的每个可能组合?如果是后者,那么这将需要很长时间来检查和捕获找到的任何东西,甚至可能都不可能
  • SilverShotBee:感谢您的回复。该表具有固定值,现在大约 2200 行,该模式不能超过 10 行限制,这意味着该模式将出现在 10 行内,​​最多 15 行。第 1 行不能与后面超过 10 行的任何行匹配。单元格中只有 10 种可能性,例如 A B C D E F Z G H I。如果您愿意,我会附上图片。我想找到一个模式。如果一旦匹配,我可以写一个 AND 来匹配它。
  • 图案的最小长度是多少? 2?
  • @VIVEK:你需要告诉我们你在寻找什么模式。否则我们无法帮助您告诉您的计算机如何找到它。
  • @SilverShotBee :先生,我在实际帖子中提供了一些额外的信息,并附上了一个示例文件供您参考。该示例包含我的表格的一部分、已识别的模式以及需要如何匹配单元格的排列。请看一看。谢谢。

标签: algorithm pattern-recognition


【解决方案1】:

请尝试下面的代码,将范围更改为您需要的范围,并将工作表编号更改为正确的工作表编号(我暂时不会将您的全部范围放入,因为如果您找到 1000 个模式,您必须在消息框上单击确定 1000 次,只测试部分范围)

这将扫描范围,并在 10 行范围内找到 两个 的任何模式,如果您需要它来查找更大的模式,您需要再次添加相同的代码并额外添加一个 @ 987654321@ 语句检查下一个偏移量。

只有存在相同的模式并且存在相同的列结构时才会找到它,但这对你来说是一个开始

测试效果很好

Sub test10()

Dim rCell As Range
Dim rRng As Range

Set rRng = Sheets("Sheet1").Range("A1:I60") '-1 on column due to offset

'Scan through all cells in range and find pattern
For Each rCell In rRng.Cells
If rCell.Value = "" Then GoTo skip
         For i = 1 To 10
            If rCell.Value = rCell.Offset(i, 0).Value Then
                If rCell.Offset(0, 1).Value = rCell.Offset(i, 1) Then
                    MsgBox "Match Found at: " & rCell.Address & ":" & rCell.Offset(0, 1).Address & " and " & rCell.Offset(i, 0).Address & ":" & rCell.Offset(i, 1).Address
               End If
            End If
        Next i
skip:
Next rCell


End Sub

***更新***

我已经更新了我的代码,现在可以在接下来的 10 行中找到该模式:

Sub test10()

Dim rCell As Range
Dim rRng As Range
Dim r1 As Range
Dim r2 As Range

Set rRng = Sheets("Sheet1").Range("A1:I50") '-1 on column due to offset

i = 1 'row length
y = 0 'column length

'Scan through all cells in range and find pattern

For Each rCell In rRng.Cells
If rCell.Value = "" Then GoTo skip
i = 1
    Do Until i = 10
    y = 0
        Do Until y = 10
         xcell = rCell.Value & rCell.Offset(0, 1).Value
         Set r1 = Range(rCell, rCell.Offset(0, 1))
         r1.Select

         ycell = rCell.Offset(i, y).Value & rCell.Offset(i, y + 1).Value
         Set r2 = Range(rCell.Offset(i, y), rCell.Offset(i, y + 1))

            If ycell = xcell Then

                    Union(r1, r2).Font.Bold = True
                    Union(r1, r2).Font.Italic = True
                    Union(r1, r2).Font.Color = &HFF&
                    MsgBox "Match Found at: " & rCell.Address & ":" & rCell.Offset(0, 1).Address & " and " & rCell.Offset(i, y).Address & ":" & rCell.Offset(i, y + 1).Address
                    Union(r1, r2).Font.Bold = False
                    Union(r1, r2).Font.Italic = False
                    Union(r1, r2).Font.Color = &H0&
            End If
            y = y + 1
            Loop
            i = i + 1
        Loop
skip:
Next rCell


End Sub

【讨论】:

    猜你喜欢
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 2021-12-18
    • 2019-03-04
    相关资源
    最近更新 更多