首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >公式,用于比较一列行中字符串数是否相等。

公式,用于比较一列行中字符串数是否相等。
EN

Stack Overflow用户
提问于 2016-10-25 12:49:05
回答 1查看 96关注 0票数 0

我在Excel中有一列叫做“职位”。列可以有如下所示的字符串数字

位置

1-5

1-7

1-7

1-8

1-89

2-1

2-12

2-2

2-3

.恩-恩。第一个数字指的是页码,第二个号码,即"-“后面是指页面位置。

该页面从左到右分为9个位置,如下所示:

1 2 3

4 5 6

7 8 9

因此,当位置列中有数字1-8时,它的意思是:

第1页

1 2 3

4 5 6

7 (8) 9

当位置列中有数字2-12时,它的意思是:

第2页

(1) (2) 3

4 5 6

7 8 9

这就是它是如何设计的,但是当我有前面提到的一组位置时,我想要修改的只有在“位置”列中。

位置

1-5

1-7

1-7

1-8

1-89

2-1

2-12

2-2

2-3

.

然后我需要一个公式,以某种方式通知我,位置1-8和1-89会重叠,位置2-1,2-12和2-2也会重叠。当然,位置1-7和1-7将完全重叠,因此这也应该通知用户。我怎么能这么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-26 10:52:41

由于OP添加了VBA标记,请尝试此过程。它在相应的Position中拆分一个3 pieces,并将它们与列表中的所有其他Positions进行比较。它假设Positions列表从B2开始,并在C列中列出比较结果。

代码语言:javascript
运行
复制
'These Options declaration always go at the top of the module, class, etc. 
Option Explicit
Option Base 1

Sub Get_Overlap()
Const kFlag As String = "Overlapping"   'Change as required
Dim rData As Range, aData As Variant, aResults() As String, sResult As String
Dim lA As Long, sAvalue As String, iAp As Integer, bA1 As Byte, bA2 As Byte
Dim lB As Long, sBvalue As String, iBp As Integer, bB1 As Byte, bB2 As Byte

    Rem Sets Data Range & Arrays
    With ThisWorkbook.Sheets("TEST").Columns("B")   'Change as required
        Set rData = Range(.Cells(2), .Cells(Rows.Count).End(xlUp))
    End With
    aData = rData.Value2
    aData = WorksheetFunction.Transpose(aData)
    rData.Offset(0, 1).ClearContents
    ReDim Preserve aResults(UBound(aData))

    For lA = 1 To UBound(aData)

        Rem Initialize & Set Item A Values
        sAvalue = Empty: sAvalue = aData(lA)
        iAp = 0: iAp = Left(sAvalue, 1)
        bA1 = 0: bA1 = Mid(sAvalue, 3, 1)
        On Error Resume Next
        bA2 = 0: bA2 = Mid(sAvalue, 4, 1)
        On Error GoTo 0

        For lB = lA + 1 To UBound(aData)

            Rem Initialize & Set Item B Values
            sBvalue = Empty: sBvalue = aData(lB)
            iBp = 0: iBp = Left(sBvalue, 1)
            bB1 = 0: bB1 = Mid(sBvalue, 3, 1)
            On Error Resume Next
            bB2 = 0: bB2 = Mid(sBvalue, 4, 1)
            On Error GoTo 0

            Rem Initialize Comparison Result
            sResult = Empty

            Rem Compare Items & Values
            Select Case True
            Case sAvalue = sBvalue
                sResult = kFlag

            Case iAp = iBp
                Select Case True
                Case bA2 = 0 And bB2 = 0
                    If (bA1 = bB1) Then sResult = kFlag

                Case bA2 = 0
                    If bA1 >= bB1 And bA1 <= bB2 Then sResult = kFlag

                Case bB2 = 0
                    If bB1 >= bA1 And bB1 <= bA2 Then sResult = kFlag

                Case Else
                    If bA1 >= bB1 And bA1 <= bB2 Then
                        sResult = kFlag
                    ElseIf bA2 >= bB1 And bA2 <= bB2 Then
                        sResult = kFlag
                    ElseIf bB1 >= bA1 And bB1 <= bA2 Then
                        sResult = kFlag
                    ElseIf bB2 >= bA1 And bB2 <= bA2 Then
                        sResult = kFlag
                    End If

            End Select: End Select

            Rem Add Results into Array
            If sResult <> Empty Then
                aResults(lA) = sResult
                aResults(lB) = sResult
            End If

    Next: Next

    Rem Enter Comparison Results
    'Results will be posted one column to the right of where the List
    'This is done by the use of "rData.Offset(0,1)"
    rData.Offset(0, 1).Value = WorksheetFunction.Transpose(aResults)

    End Sub

建议阅读以下几页,以加深对所使用资源的了解:

选项关键字变量和常数带语句范围对象(Excel)WorksheetFunction对象For...Next语句选择Case语句If...Then...Else语句论错误陈述Range.Offset属性(Excel)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40240422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档