Всем привет. Есть массив данных вида 0-0 [0-0] 1-1 [*1-1] -( именно строкой в ячейке) Хочу с помощью оператора LIKE отобрать [0-0] [*1-1], но и [ и * являются служебными в вба. как задать маску типа [*] ? Если написать LIKE "[*]" , то не выдает ни одной записи. Хотя я думал что должно бы выдать все.
Квадратные скобки знак вычисления. И если они в кавычках - то это тупо текст. И при таком виде: "[*]" Like отберет строку, если она начинается на квадратную открывающую скобку и заканчивается зазкрывающей. И неважно какой внутри текст. Так что для подобных целей исползьуйте регулярные выражения.
Кстати, что значат выражения: [1-1] и [0-0]? Что они по-Вашему должны отобрать? В таком виде в квадратных скобках это означает диапазон от 1 до 1 и от 0 до 0. Т.е. равносильно нулю и единице без всяких скобок.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Я чего-то запутался, что Вы и где указываете и что надо найти. Видимо, пятница. Вы хотите отобрать выражение, именно как в ячейке? Или там могут быть любые цифры?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Есть ячейка в которой текстовая строка типа 0-0 [0-0] 1-1 [1-1*] 0-1 [0-2] [*1-1] [*1-2] 1-1 [2-0] 1-1 [*2-1] груп много, числа разные. группы разделены пробелом мне из нее нужно сделать массив из элементов в квадратных скобках. То есть надо получить массив: [0-0] [1-1*] [0-2] [*1-1] [*1-2] [2-0] [*2-1]
Sub t()
s = "0-0 [0-0] 1-1 [1-1*] 0-1 [0-2] [*1-1] [*1-2] 1-1 [2-0] 1-1 [*2-1]"
x = Split(s, "[")
If Not InStr(x(0), "]") Then k = 1: x(0) = ""
For i = k To UBound(x)
x(i) = Left(x(i), InStr(x(i), "]") - 1)
Next
[a1].Resize(, UBound(x) + 1) = x
End Sub
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
Sub t2()
s = "0-0 [0-0] 1-1 [1-1*] 0-1 [0-2] [*1-1] [*1-2] 1-1 [2-0] 1-1 [*2-1]"
With CreateObject("vbscript.regexp")
.Global = True: .Pattern = "\[.*?\]": Set m = .Execute(s)
End With
If m.Count Then For i = 0 To m.Count - 1: Cells(2, i + 1) = m(i): Next
End Sub
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
Тоже со Split, но несколько иначе(паразититровал на коде ikki):
Код
Sub t()
Dim s As String, x, i As Long, avRes(), li As Long
s = "0-0 [0-0] 1-1 [1-1*] 0-1 [0-2] [*1-1] [*1-2] 1-1 [2-0] 1-1 [*2-1]"
x = Split(s, " ")
For i = LBound(x) To UBound(x)
If Left(x(i), 1) = "[" Then
ReDim Preserve avRes(li): avRes(li) = x(i): li = li + 1
End If
Next
[a1].Resize(, UBound(avRes) + 1) = avRes
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
[a1]. cells(1), cells(1,1), Range("a1") - это все варианты обращения к ячейке А1, очевидно что [a1] самый короткий из указанных Resize нужен для того что массив avRes был помещен в диапазон ячеек соотв. размера если написать [a1] = avRes в ячейку А1 будет помещен первый элемент массива avRes
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄