2016-10-25 4 views
0

У меня есть столбец в Excel, называемый «Позиции». Колонка может иметь строку чисел, как этогоФормула для сравнения, если номера строк равны в одной строке столбца

позиций

1-5

1-7

1-7

1-8

1-89

2-1

2-12

2-2

2-3

..... NN .. первый номер ссылается на номер страницы, а второй номер т.е. после «- "ссылается на позицию страницы.

страница разделена на 9 позиций, начиная слева направо так же, как это:

Так что, когда у вас есть номер 1-8 в столбце позиции, это означает:

Page 1

7 (8) 9

И когда у вас есть номер 2-12 в столбце позиции это означает:

Page 2

(1) (2) 3

Теперь, как это разработано, но то, что я хочу изменить только в столбце Позиция, когда у меня есть набор позиций, как упоминалось ранее

позиций

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 полностью перекрываются, поэтому это также должно уведомить пользователя. Как я мог это сделать?

ответ

1

As OP добавлен тег VBA; пожалуйста, попробуйте эту процедуру. Он разбивает Position в соответствующем 3 pieces, сравнивая их со всеми остальными Positions в списке. Предполагается, что список Positions начинается с B2 и приводит в личный кабинет результаты сравнения в колонке C.

'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 

Предложите прочитать следующие страницы, чтобы получить более глубокое понимание используемых ресурсов:

Option keyword, Variables & Constants, With Statement, Range Object (Excel), WorksheetFunction Object (Excel), For...Next Statement, Select Case Statement, If...Then...Else Statement, On Error Statement, Range.Offset Property (Excel)

+0

Спасибо! где в коде следует определить столбец c? Думаю, мне нужен новый столбец в Excelsheet, который имеет столбец «Позиция»? Вариант Explicit nad Option Base 1 - это те, которые будут? – Hankman3000

+0

Если это решает вашу проблему, выберите \ пометьте ее как ваш ответ. – EEM

+0

1.- Код отправляет результаты в столбце справа от того, где List, т. Е. Список находится в B, тогда результаты публикуются в C. Это делается по строке 'rData.Offset (0,1)'. 2.- Не понимаю, о чем вы говорите. 3.- Объявления параметров всегда идут вверху модуля, класса и т. Д. * (См. Изменение в ответе) * – EEM

 Смежные вопросы

  • Нет связанных вопросов^_^