Рассмотрим следующую пользовательскую функцию:
Option Explicit
Public Function IsOkay(s1 As String, s2 As String) As String
Dim v1 As String, arr, a
v1 = "," & s1 & ","
arr = Split(s2, ",")
For Each a In arr
If InStr(v1, "," & a & ",") = 0 Then
IsOkay = "Not Okay"
Exit Function
End If
Next a
IsOkay = "Okay"
End Function
Будет возвращено «Хорошо», если все значения во втором также появятся в первом списке. Он вернет «Not Okay», если второй список содержит элементы, не входящие в первый.
Пользовательские функции (UDF) очень просто установить и использовать:
- ALT-F11 открывает окно VBE
- ALT-I ALT-M открывает модуль fre sh
- , вставляет содержимое и закрывает окно VBE
Если вы сохраните рабочую книгу, UDF будет сохранен вместе с ней. Если вы используете версию Excel более поздней, чем в 2003 году, вы должны сохранить файл как .xlsm, а не .xlsx
В удалить UDF:
- откройте окно VBE, как указано выше
- очистите код
- закройте окно VBE
до используйте UDF из Excel:
=IsOkay(A1,B1)
Чтобы узнать больше о макросах в целом, см .:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
и
http://msdn.microsoft.com/en-us/library/ee814735 (v = office.14) .aspx
и подробности о UDF см.
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
Макросы должны быть включены, чтобы это работало!
Примеры:
РЕДАКТИРОВАТЬ # 1:
Эта версия UDF ( IsOkay2 () ) исправляет обе проблемы:
- будет обрабатывать текст как 10,000 в виде разделенных запятыми строк, а не одиночных больших целых чисел
- он будет отмечать повторяющиеся несопоставленные значения во втором списке
* 108 5 *
Public Function IsOkay2(r1 As Range, r2 As Range) As String
Dim arr1, arr2, a1, a2, Failed As Boolean, i As Long
arr1 = Split(r1.Text, ",")
arr2 = Split(r2.Text, ",")
For Each a2 In arr2
Failed = True
For i = LBound(arr1) To UBound(arr1)
If a2 = arr1(i) Then
Failed = False
arr1(i) = ""
End If
Next i
If Failed Then
IsOkay2 = "Not Okay"
Exit Function
End If
Next a2
IsOkay2 = "Okay"
End Function