2015-03-18 2 views
-4

Например, если в celle A1 вы имеете: 1, 2, 3, 4, 5, 6, 7, 8, 9 И в A2 у вас есть: 1, 3, 6, 9, 15 Я хотел бы найти функцию VBA F, которая будет делать это: F (A1; A2) = 15, что означает, что она даст единственный символ, который не находится в цепочке данных, указанных в A1 И если мы имеем в B1: 1, 2, 5, 8, 15, 20. F будет делать это: F (A1; B2) = 15, 20 (разделенные " , "или что-то еще), которые являются только 2 символами, которые не отображаются в моей ячейке A1.Etc и т. д., если у вас есть 2, 3 или 4 символа, которые не отображаются в цепочке данных A1. Кто-нибудь может дать мне такой код, пожалуйста?Изолировать не дубликат цепи, разделенной «,» из другой более длинной цепи в VBA

Спасибо.

+0

Что вы пробовали? Кроме того, описание вашей функции противоречиво, не следует ли включать 2,4,5,7 и 8 в качестве вывода для вашего первого примера? – cronos2546

+0

Нет, справедливо! У меня нет обязательно всех данных начальной цепочки в моем выпуске; это все трудности! В противном случае я не стану публиковать свой вопрос здесь. – nilmar4

+0

Я попытался преобразовать свою ячейку в строку, чтобы сортировать по ячейкам, но мне не удается получить результат, который я хочу. Моя проблема состоит в том, чтобы сравнить 2 цепочки данных и сохранить данные, которые не отображаются в моей начальной цепочке, поэтому мне не нужно включать 2, 4, 5, 7 и 8 в качестве вывода в моем первом примере. Итак, теперь мой пример ясен? – nilmar4

ответ

0

Эта функция будет работать для вас

Function ReturnUnique(cell1 As Range, cell2 As Range) As String 
     ReturnUnique = "" 
     Dim v1 As Variant, v2 As Variant 
     v1 = Split(cell1.Value, ",") 
     v2 = Split(cell2.Value, ",") 
     Dim i As Long, j As Long 
     Dim bool As Boolean 
     For i = LBound(v1, 1) To UBound(v1, 1) 
      bool = True 
      For j = LBound(v2, 1) To UBound(v2, 1) 
       If v2(j) = v1(i) Then 
        bool = False 
        Exit For 
       End If 
      Next j 
      If bool Then 
       If ReturnUnique = "" Then 
        ReturnUnique = v1(i) 
       Else 
        ReturnUnique = ReturnUnique & ", " & v1(i) 
       End If 
      End If 
     Next i 

     For i = LBound(v2, 1) To UBound(v2, 1) 
      bool = True 
      For j = LBound(v1, 1) To UBound(v1, 1) 
       If v1(j) = v2(i) Then 
        bool = False 
        Exit For 
       End If 
      Next j 
      If bool Then 
       If ReturnUnique = "" Then 
        ReturnUnique = v2(i) 
       Else 
        ReturnUnique = ReturnUnique & ", " & v2(i) 
       End If 
      End If 
     Next i 
    End Function 

EDIT:

Попробуйте эту функцию вместо

Function ReturnUnique(cell1 As Range, cell2 As Range) As String 
    ReturnUnique = "" 
    Dim v1 As Variant, v2 As Variant 
    v1 = Split(Trim(cell1.Value), ",") 
    v2 = Split(Trim(cell2.Value), ",") 
    Dim i As Long, j As Long 
    Dim bool As Boolean 
    For i = LBound(v2, 1) To UBound(v2, 1) 
     bool = True 
     For j = LBound(v1, 1) To UBound(v1, 1) 
      If Trim(v1(j)) = Trim(v2(i)) Then 
       bool = False 
       Exit For 
      End If 
     Next j 
     If bool Then 
      If ReturnUnique = "" Then 
       ReturnUnique = v2(i) 
      Else 
       ReturnUnique = ReturnUnique & ", " & v2(i) 
      End If 
     End If 
    Next i 
End Function 
+0

Привет, Первое спасибо за публикацию этой функции. Это очень мило с твоей стороны. Но мне не удается заставить его работать с моим делом, можете ли вы привести пример, с которым вам удастся заставить его работать. Я попытался использовать значение, указанное в моем примере, но результат #NOM ?. Какой тип данных мы должны использовать, чтобы заставить его работать? Благодарю. – nilmar4

+0

наконец-то, мне удается заставить его работать, но это не то, что я хочу, потому что, когда я, например, использую 2 ячейки, о которых я упоминаю в своем примере, результат - 2, 4, 5, 7, 8, 15. что функция дает в результате 15, я ясно? – nilmar4

+0

Отредактированный ответ – Jeanno

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