#vba
#vba
Вопрос:
я пытаюсь запустить тест по столбцам для списка слов в любом порядке с включенными запятыми. т.е. mars, earth, moon, sun проверяют только эти слова в столбцах e, если не сообщение об ошибке. могут ли запятые, например, Марс, солнце или луна, солнце, мой код ниже, у меня проблема со словами, в которых есть запятые и в другом порядке, пожалуйста, помогите
Sub substring()
Dim Target As String, c As Range, lr As Long, ws As Worksheet
Dim Target2 As String
Dim Target3 As String
Dim Target4 As String
Set ws = ThisWorkbook.Sheets("Sheet6")
lr = ws.Range("A" amp; ws.Rows.Count).End(xlUp).Row
Target = "sun"
Target2 = "moon"
Target3 = "earth"
Target4 = "mars"
For Each c In Range("A2:B" amp; lr)
If StrComp(c.Text, Target, vbTextCompare) And StrComp(c.Text, Target2, vbTextCompare) And StrComp(c.Text, Target3, vbTextCompare) And StrComp(c.Text, Target4, vbTextCompare) Then
MsgBox c.Address
End If
Next c
End Sub
Ответ №1:
Здесь мы используем отдельную функцию, чтобы определить, есть ли какие-либо «плохие парни» в любом списке, разделенном запятыми:
Public Function IsIn(s As Variant) As Boolean
Dim arr, a
arr = Array("sun", "moon", "earth", "mars")
For Each a In arr
If s = a Then
IsIn = True
Exit Function
End If
Next a
IsIn = False
End Function
Sub kidus()
Dim ws As Worksheet, lr As Long
Dim cell As Range
Set ws = ThisWorkbook.Sheets("Sheet6")
lr = ws.Range("A" amp; Rows.Count).End(xlUp).Row
For Each cell In ws.Range("A2:B" amp; lr)
arr2 = Split(cell.Value, ",")
For Each a In arr2
If Not IsIn(a) Then
MsgBox cell.Address
End If
Next a
Next cell
End Sub
РЕДАКТИРОВАНИЕ # 1:
Используйте эту версию IsIt()
:
Public Function IsIn(s As Variant) As Boolean
Dim arr, a
arr = Array("sun", "moon", "earth", "mars")
For Each a In arr
If LCase(s) = a Then
IsIn = True
Exit Function
End If
Next a
IsIn = False
End Function
Комментарии:
1. @Gray’s Student извините, есть ли способ, которым я могу сделать его также не чувствительным к регистру? т.е. Mars = mars
2. нужно ли мне что-то вроде этого LCase (arr) = LCase (arr)
3. @Gray’s Student похоже, у меня это не работает, я ввел Lcase(arr)=Lcase(arr) в функцию, в которой слова перечислены в массиве, я помещаю не в то место?
4. @KidusYohans смотрите мою ПРАВКУ # 1
5. @Gray’s Student работает идеально! большое вам спасибо