сравнить значение с ячейками использовать VBA - PullRequest
0 голосов
/ 28 марта 2019

Я имею данные (число) 2 ячейки (Excel) в качестве ячейки.

Pic

Я хочу сравнить между данными 1 и 2 каждый номер. если найдены данные о разнице, перейдите в столбец различий (новая ячейка), а если найдены те же данные, то перейдите в тот же столбец (новая ячейка). наконец, переместите разницу данных и то же самое в разницу + тот же столбец.

Data1 = ,4016,4053,6008,6009,6010,6011,24016,24022,24029,24035,24041,24045,24053,24059,24071,24077,24214,24240,24258,24262,24268,26000,26001,26002,26003,26004,26005,26006,26007


Data2 = ,4001,6008,6009,6010,6011,24001,24030,24036,24042,24046,24049,24054,24060,24072,24078,24215,24241,24259,24263,24269,26000,26001,26002,26003,26004,26005,26006,26007

1 Ответ

0 голосов
/ 28 марта 2019
  1. Разделить числа на массивы (чтобы мы могли обрабатывать каждое число)
  2. Добавить все цифры в словарь AllButUniqueItems один раз, чтобы он содержал каждый номер каждого набора данных один раз. Все все числа, которые уже есть в этом словаре в словаре DuplicateItems.
  3. Уникальными предметами являются все предметы, которые находятся в AllButUniqueItems , но не в DuplicateItems
  4. Используйте логику (3) для объединения чисел в строки и записи их в ячейки.

enter image description here

Таким образом, вы получите что-то вроде

Option Explicit

Public Sub DifferentOrSame()
    'read and split data sets into array
    Dim DataSet1 As Variant
    DataSet1 = Split(ThisWorkbook.Worksheets("data").Range("A2").Value, ",")

    Dim DataSet2 As Variant
    DataSet2 = Split(ThisWorkbook.Worksheets("data").Range("B2").Value, ",")

    Dim AllButUniqueItems As Object
    Set AllButUniqueItems = CreateObject("Scripting.Dictionary")

    Dim DuplicateItems As Object
    Set DuplicateItems = CreateObject("Scripting.Dictionary")

    Dim itm As Variant
    'process data set 1
    For Each itm In DataSet1
        If AllButUniqueItems.Exists(itm) Then
            If Not DuplicateItems.Exists(itm) Then
                DuplicateItems.Add itm, 1
            End If
        Else
            AllButUniqueItems.Add itm, 1
        End If
    Next itm

    'process data set 2
    For Each itm In DataSet2
        If AllButUniqueItems.Exists(itm) Then
            If Not DuplicateItems.Exists(itm) Then
                DuplicateItems.Add itm, 1
            End If
        Else
             AllButUniqueItems.Add itm, 1
        End If
    Next itm

    'concatenate strings
    Dim StrDuplicates As String, StrUniques As String, StrAllButUnique As String
    For Each itm In AllButUniqueItems 
        StrAllButUnique = StrAllButUnique & IIf(StrAllButUnique <> vbNullString, ",", "") & itm

        If Not DuplicateItems.Exists(itm) Then
            StrUniques = StrUniques & IIf(StrUniques <> vbNullString, ",", "") & itm
        Else
            StrDuplicates = StrDuplicates & IIf(StrDuplicates <> vbNullString, ",", "") & itm
        End If
    Next itm

    'write to cells
    ThisWorkbook.Worksheets("data").Range("C2").Value = "'" & StrDuplicates
    ThisWorkbook.Worksheets("data").Range("D2").Value = "'" & StrUniques
    ThisWorkbook.Worksheets("data").Range("E2").Value = "'" & StrAllButUnique
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...