Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Найти регулярным выражением подстроки и заменить в них заданные вхождения заданными заменами
 
Здравствуйте! По найденному на Вашем сайте нижеприведенному программному коду вопросов нет.
Прошу Вас помочь внедрить  в эту функцию строковые переменные (аргументы) ReplaceWhat и ReplaceWith вместо
традиционного фиксированного значения .Replace, с тем чтобы функция возвращала исходную строку, в которой в найденных вхождениях
заменяется уже конкретно заданное "внутреннее" вхождение (если таковое найдено)  заданным значением.
Например фрагменты по маске "\s\d\d\s\d\d\d",
в них заменить "7 5" (если найдены по фильтру ReplaceWhat) на "5 7" (значение ReplaceWith)
Прошу ограничиться VBScript Regular Expressions, если это возможно вообще.
Пытаюсь использовать Replace(String, What, Whith) но опыта нет в синтаксисе.
С уважением и Спасибо
Код
'Поиск по регулярному выражению и замена. 
Public Function RegExpFindReplace(str As String, _ 
Pattern As String, _ 
Replace As String, _ 
Optional Globa1 As Boolean = True, _ 
Optional IgnoreCase As Boolean = False, _ 
Optional Multiline As Boolean = False) _ 
As String 

RegExpFindReplace = str 'Пока ничего не меняли 

If Not str Like "" And Not Pattern Like "" Then 

Dim RegExp As Object 'Для регулярного выражения 

Set RegExp = CreateObject("VBScript.RegExp") 
With RegExp 
.Global = Globa1 'Все совпадения или только первое? 
.IgnoreCase = IgnoreCase 'Регистр неважен? 
.Multiline = Multiline 'Игнорировать переносы строк? 
.Pattern = Pattern 'Регулярка 
End With 

'Найти/заменить 
On Error Resume Next 
RegExpFindReplace = RegExp.Replace(str, Replace) 

Set RegExp = Nothing 'Очистка памяти 
End If 
End Function
Сформировать массив строчных значений, имеющихся в актуальной ячейке
 
Всем ЗДРАВСТВУЙТЕ. Помогите дилетанту. Что сумел наваять прилагаю, файл тоже.
Есть Лист1, в нем: Наименование объекта, Тип объекта, Линки (в ячейке через разделители) на значения ЗИП в таблице
справочного листа PARTS. PARTS сейчас около 1000 строк.
Число Значений в ячейке линков не более 100. Формат всех ячеек ОБЩИЙ. Длина PARTS не фиксированная,
обновляется.
Значения в ячейках Линков отсортированы по числовой последовательности. Соответствующие ячейки
PARTS также.
Задача: Под каждым объектом вставить строки со значениями ЗИП из PARTS. Лист1 около 3000 строк.
Можно и без массива, как эффективнее не знаю. Часть с перебором в цикле работает, а выемку из справочника
оформить НЕ МОГУ. Делал макрос с вставкой строк, и затем использовал ВПР. СПАСИБО.
Второй вопрос, уж и неудобно грузить. Встречаются множественные ЗИП для одного объекта, но с разной ценой,
как бы из них оставить только минимум и мксимум. Хотя часть по VLOOKUP из третьего столбца PARTS я еще
не мудрил. КОД:

Sub InserParts()

' Сочетание клавиш: Ctrl+Shift+P
' Формат данных - ОБЩИЙ
   
Dim x As String
Dim MyArray() As String

ActiveCell.Offset(0, 0).Range("A1").Select ' актуализация ячейки. Стоим на ячейке
' применяемости в листе Лист1

x = Selection.Value ' Присвоение. В строке находятся числа с разрядностью
' от 1 до 4 в текстовом десятичном представлении, причем отсортированные
' в числовом порядке, например "12 15 59 111 206". Это первый столбец листа PARTS.
' Повторов нет

MyArray() = Split(Trim(x), " ") ' Загрузка в одномерный массив строковых значений

For i& = LBound(MyArray) To UBound(MyArray) - 1
       ActiveCell.Offset(1, 0).Range("A1").Select ' Переход на ячейку вниз
       ActiveCell.EntireRow.Insert ' вставки пустой строки со сдвижкой вниз
       ActiveCell.Offset(0, 1).Range("A1").Select ' актуализация ячейки
           'With Range("H2:H2000") 'В справочнике не более 2000 строк
               '.FormulaR1C1 = "=VLOOKUP(Лист1!RC[-1],PARTS!R[-235]C[-5]:R[761]C[-4],2)"
               '.Value = .Value
           'End With
       Selection.Value = MyArray(i) ' эта директива только для проверки цикла, ее удалить
       ' Selection.Value = Application.VLookup([MyArray(i)], PARTS!A2:B2000, 2) ' ВОТ
       'ЗДЕСЬ У МЕНЯ ЗАТЫК, с ним бы разобраться
       ActiveCell.Offset(1, -1).Range("A1").Select
Next i

End Sub
Изменено: RAVILOGO - 16.10.2015 14:33:38 (Ввод программного кода.)
Страницы: 1
Наверх