есть заданный диапазон 1,4-6,9-15,25,26 (диапазон задается вручную и всегда разный) я прохожусь по ячейкам и нужно определить попадает ли значение ячейки в указанный диапазон. Хотел через регулярные выражения. регулярка я так понимаю должна выглядеть так "1[4-6][9-15]25,26", или я ошибаюсь?, не могу придумать простой способ (знаний не хватает) как привести к такому виду.
V, я бы делал словарь. Сплитом разбил по зпт, если есть дефис, то сплитом по дефису, цикл от и до и заносим в словарь. Ну, а проверить есть ли значение в словаре не вопрос.
Формула массива (ФМ) вводится Ctrl+Shift+Enter Memento mori
А можно ведь и в массив загнать, а потом проверять наличие в массиве - это для тех кто не дружит со словарями (как я) А можно и так:
Код
Sub qqq()
Dim i As Long
For i = 2 To 10
Select Case Cells(i, 1)
Case 1.4 To 6.9, 9 To 15, 25, 26: MsgBox "Ячейка А" & i & " в диапазоне"
End Select
Next
End Sub
Юрий М, думаю, что стоит подружиться со словарями.
Код
Function jjj_num_in(ByVal sWhere As String, ByVal lWhat As Long) As Boolean
Dim arr1
Dim i1 As Long
Dim arr2
Dim i2 As Long
Dim dict As Object
Set dict = CreateObject("scripting.dictionary")
arr1 = Split(sWhere & ",", ",")
For i1 = LBound(arr1, 1) To UBound(arr1, 1) - 1
If InStr(1, arr1(i1), "-") > 0 Then
arr2 = Split(arr1(i1), "-")
For i2 = --arr2(LBound(arr2, 1)) To --arr2(UBound(arr2, 1))
dict(i2) = i2
Next i2
Else
i2 = --arr1(i1)
dict(i2) = i2
End If
Next i1
jjj_num_in = dict.exists(lWhat)
End Function
Ещё пара вариантов с извращениями: массив сбросить на лист (именованный динамический диапазон), а затем или Find по диапазону или Application.WorhkseetFunction.CountIf (Диапазон)
Юрий М предложенный вами код не подойдет т.к., писал уже ранее, числа вписываются вручную и каждый раз разные. Сделал на словаре, получилось так.
Код
'--- создаем словарь ---------
Set det = CreateObject("Scripting.Dictionary")
dt = Split(dt, ",")
For i = 0 To UBound(dt)
det1 = Split(dt(i), "-")
If UBound(det1) > 0 Then
For ii = det1(0) To det1(UBound(det1))
det.Item(ii) = ""
Next
Else
det.Item(--det1(0)) = ""
End If
Next
'------конец создания словаря-------------
'-------- удаляем строки и суммируем вес из этих строк ------
For i = ActiveCell.Offset(, -1).MergeArea.Count / 2 - 2 To 1 Step -1
If det.Exists(ActiveCell.Offset(i).Value) Then
mas = mas + ActiveCell.Offset(i, 9).Value
Rows(ActiveCell.Offset(i).Row).Delete
End If
Next
'---------конец удаления строк------------