Я сравниваю некоторые данные о типах различий: добавления и удаления. Я использовал код из предыдущего потока, чтобы сравнить две строки и найти разницу; и просто переключил аргументы WORDDIF соответственно.

= WORDDIF(A1, B1)
Код:

Function WORDDIF(rngA As Range, rngB As Range) As String

Dim WordsA As Variant, WordsB As Variant
Dim ndxA As Long, ndxB As Long, strTemp As String

WordsA = Split(rngA.Text, " ")
WordsB = Split(rngB.Text, " ")

For ndxB = LBound(WordsB) To UBound(WordsB)
For ndxA = LBound(WordsA) To UBound(WordsA)
If StrComp(WordsA(ndxA), WordsB(ndxB), vbTextCompare) = 0 Then
WordsA(ndxA) = vbNullString
Exit For
End If
Next ndxA
Next ndxB

For ndxA = LBound(WordsA) To UBound(WordsA)
If WordsA(ndxA) <> vbNullString Then strTemp = strTemp & WordsA(ndxA) & " "
Next ndxA

WORDDIF = Trim(strTemp)

End Function

Однако я натолкнулся на некоторые препятствия.

  1. Иногда ячейка добавления и удаления печатает одно и то же имя.
  2. Я хочу удалить цифры с круглыми скобками "(1)" и "AC"

Обновленный код

Код:

Function WORDDIF(rngA As Range, rngB As Range) As String

'Remove linefeed characters and exclude parentheticals

Dim WordsA As Variant, WordsB As Variant
Dim ndxA As Long, ndxB As Long, strTemp As String

WordsA = Split(Replace(rngA.Text, vbLf, " "), " ") 'remove linefeed
WordsB = Split(Replace(rngB.Text, vbLf, " "), " ") 'remove linefeed

For ndxB = LBound(WordsB) To UBound(WordsB)
For ndxA = LBound(WordsA) To UBound(WordsA)
If StrComp(WordsA(ndxA), WordsB(ndxB), vbTextCompare) = 0 Then
WordsA(ndxA) = vbNullString
Exit For
End If
Next ndxA
Next ndxB

For ndxA = LBound(WordsA) To UBound(WordsA)
'Exclude parentheticals
If Not WordsA(ndxA) Like "(*)" Then strTemp = strTemp & WordsA(ndxA) & " "
Next ndxA

WORDDIF = Application.Trim(strTemp)

End Function

Код выглядит великолепно. У меня есть несколько изменений, которые я хотел бы сделать:

  1. В конечном итоге было бы неплохо напечатать новый столбец с: добавлениями (курсивом) и удалениями (зачеркиванием). Вместо того, чтобы иметь столбец удалений или дополнений (что приятно видеть визуально), мне было интересно, есть ли код, который синтезирует информацию, так что вывод будет таким: все названия школ, с удалениями (вычеркивание), добавления (выделение курсивом) ) и повторяется (без изменений = нормально).

  2. Каждая школа отдельно (для столбца дополнений / удалений). Я думаю, что они просто приходят в виде списка без какой-либо техники разделения. Таким образом, каждый из них имеет свою собственную строку внутри ячейки или разделен столбцом. Возможно, запятая может заменить двойные скобки.

Примеры, чтобы пойти с вышеупомянутым:

  1. Синтезированная информация:

B6 = * (блоки представляют ячейки Excel)

Med Col of Georgia (1) (AC) Морхаус (1) (AC)

D6 =

Med Col Джорджии (1) (AC) Мехарри (1) (AC)

Пропуски
G6 = WORDDIF(D6, B6)

Meharry

дополнения
H6 = WORDDIF(B6, D6)

Morehouse

I6 = {новый код или что-то}

Мед Кол Джорджиа, Морехаус, Мехарри *

* Примечание: я не мог понять, как пробить Мехарри, поэтому я подчеркнул это. Также обратите внимание, что в окончательном списке есть запятые, разделяющие школы. Возможно, это можно сделать, заменив скобки на запятые.

  1. Школы разделены

B91 =

Колумбия (1) (AC) Северо-Западный (1) (AC) Южный Калифорния (1) (AC) U Чикаго-Притцкер (1) (AC) U Мичиган (1) (AC) Мойка U Сент-Луис (1) (AC)

D91 =

Северо-западный (1) (AC) Южный Калифорния (1) (AC) U Чикаго-Притцкер (1) (AC) U Мичиган (1) (AC)

H91 == WORDDIF(B91, D91)

Columbia Wash U St Louis

{улучшенная версия}

H91 == WORDDIF(B91, D91)

Columbia Wash U St Louis

ИЛИ ЖЕ

Колумбия, Вашингтон, Сент-Луис

Обратите внимание на пробелы в первом примере и запятую во втором.

Приветствую за вашу помощь.

Кроме того, я немного программировал в тот день. Хотя я немного заржавел, было бы неплохо узнать, как писать код для Excel. Если у вас есть какие-либо указатели или ресурсы, это было бы полезно.

0