Собственно, возник такой вопрос - как исправлять абракадабру в строках? В стандартных строковых функциях такого нет, на сколько я понял... зы. В моем понимании, абракадабра, это когда вводишь русское слово, в английской раскладке (или наоборот) и получается что то вроде такого: Gkfytnf "rctkm вместо: Планета Эксель
Прошу вашей помощи. Мой мозг пока это не может осилить:)
Это продолжение темы про чекбоксы, так сказать альтернативное решение, если надо чекать много-много строк. --- Собственно, заюзал кое-как Worksheet Change, работает почти как надо, но кода нагородил, кажись много, лишнего:) И еще вылазит ошибка, если на листе выделить заполненный диапазон и удалить содержимое ячеек.
Буду благодарен за исправления и улучшения. Уверен, можно как-то изящней все оформить:)
Файл приложил.. --- Рабочие колонки E, F, G. Жмем циферку 1 на клавиатуре.
Может ли кто помочь с такой не хитрой задачей: из модуля хочу добавить на лист (с привязкой к ячейке) чек-бокс и далее читать его состояние (true/false) и сохранять в массив. И что лучше выбрать Формы или ActiveX тоже не понимаю, хоть и гуглил. Не доходит до меня...
На входе имею два массива ArrBase() и ArrMarker(), оба массива - строки. _ ArrBase() содержит 100500 номенклатур; _ ArrMarker() содержит 3 маркера. _ InStr() делаю поиск подстроки ArrMarker в ArrBase, если больше 0 то надо как то ставить метку ArrMarker....
Вопрос в том, что не могу понять какой Объект лучше использовать: Массивы, Коллекции или Словари, так, что бы получить две колонки : "Велосипед Apollo Aspire 20" | "Apollo" При этом, не хотелось бы выводить это все на лист в текущей книге, а сразу сохранить в CSV/XML (типа готовая структура).
Направьте плз, а то вообще сбился с пути, в голове каша Благодарю
Изменено: prostor - 17.06.2017 02:12:44(UPD: Добавил файл)
Вот думал что разобрался с массивами, все понял. Но словил засаду такого типа: Из рекордсета передаю в массив данные - массив получается двумерный - т.к. колонок с данными одна, можно и одномерный массив юзать и еще границы массива можно без доп параметра указывать, что удобней.
А вот не получается у меня сделать его одномерным хоть тресни! Что не так делаю? Может надо явно объявлять массив одномерным? Только он должен быть динамическим, ибо я не знаю его размерность вначале.
Код
Dim MyArr As Variant ' Объявляю массив
...
MyArr = RS.GetRows ' Наполняю массив данными из Рекордсет
...
MyArr(0, i) 'Использую одну колонку двумерного массива - а проще ведь, что бы он сразу был одномерный:)
Не получается доработать код макроса под себя, может кто-то из опытных поможет в этом деле!?))
Исходная задача такова: На входе уже есть массив данных из которого надо выбрать уникальные значения.
В процессе, нашел на просторах инета нужный код, но (для меня) проблема в том, что нужная функция принимает в параметре переменную-диапазон, а мне надо передавать i-й элемент массива. Вот сам код макросса:
Код
'Массив FirstArr() определяется выше по коду и содержит 100 элементов
Sub UnikArr()
Dim MyData As Range: Set MyData = Range([A1], Range("A" & Rows.Count).End(xlUp))
Dim ArrRng() As Variant
ArrRng = UniqueValuesFromArray(MyData.Value, 1) 'Тут нужен цикл For и вместо MyData.Value, 1 подставить FirstArr(0, i)
Range("B1").Resize(UBound(ArrRng)).Value = ArrRng
End Sub
Function UniqueValuesFromArray(ByVal ArrTmp, ByVal col As Long) As Variant
Dim i As Long
If Not IsArray(ArrTmp) Then MsgBox "Это не массив!", vbCritical: Exit Function
If col > UBound(ArrTmp, 2) Then MsgBox "Нет такого столбца в массиве!", vbCritical: Exit Function
If col < LBound(ArrTmp, 2) Then MsgBox "Нет такого столбца в массиве!", vbCritical: Exit Function
On Error Resume Next: Dim coll As New Collection, txt$
For i = LBound(ArrTmp) To UBound(ArrTmp)
txt$ = Trim(ArrTmp(i, col)): coll.Add txt$, txt$
Next i
ReDim MyArr(1 To coll.Count, 1 To 1)
For i = 1 To coll.Count: MyArr(i, 1) = coll(i): Next i
UniqueValuesFromArray = MyArr
End Function
Есть простенькая задачка, которую ну никак не могу осилить, прошу помощи опытного ВБАшника:) Есть строка в массиве, слова в которой разделены пробелами. В отдельных случаях встречается два и больше пробела. Конечное количество пробелов никогда не известно. Надо заменить на один пробел. Можно ли это сделать регуляркой и как выглядит такое выражение? Предполагаю, что придется использовать условие IF, но идеально было бы без условия IF, если так возможно.
Вот до чего я дошел сам, дальше не получается:
Код
RE.Global = True 'Все что найдется в строке, не только первое соответствие
RE.IgnoreCase = False
RE.Pattern = " " 'Найти двойной пробел
For i = 0 To 100
Set MyStr = .Replace(varArr(0, i), "") 'Заменить двойной пробел на Ничто
varArr(0, i) = MyStr 'Перезаписать строку в массиве
Next i