Я сравниваю некоторые данные о типах различий: добавления и удаления. Я использовал код из предыдущего потока, чтобы сравнить две строки и найти разницу; и просто переключил аргументы 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)" и "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
Код выглядит великолепно. У меня есть несколько изменений, которые я хотел бы сделать:
В конечном итоге было бы неплохо напечатать новый столбец с: добавлениями (курсивом) и удалениями (зачеркиванием). Вместо того, чтобы иметь столбец удалений или дополнений (что приятно видеть визуально), мне было интересно, есть ли код, который синтезирует информацию, так что вывод будет таким: все названия школ, с удалениями (вычеркивание), добавления (выделение курсивом) ) и повторяется (без изменений = нормально).
Каждая школа отдельно (для столбца дополнений / удалений). Я думаю, что они просто приходят в виде списка без какой-либо техники разделения. Таким образом, каждый из них имеет свою собственную строку внутри ячейки или разделен столбцом. Возможно, запятая может заменить двойные скобки.
Примеры, чтобы пойти с вышеупомянутым:
- Синтезированная информация:
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 = {новый код или что-то}
Мед Кол Джорджиа, Морехаус, Мехарри *
* Примечание: я не мог понять, как пробить Мехарри, поэтому я подчеркнул это. Также обратите внимание, что в окончательном списке есть запятые, разделяющие школы. Возможно, это можно сделать, заменив скобки на запятые.
- Школы разделены
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. Если у вас есть какие-либо указатели или ресурсы, это было бы полезно.