Как уже писали другие, есть, вероятно, лучшие способы написания этого кода. Но для регулярного выражения, которое будет захватывать только букву столбца в группе захвата # 1, попробуйте:
\$?\b(XF[A-D]|X[A-E][A-Z]|[A-W][A-Z]{2}|[A-Z]{2}|[A-Z])\$?(?:104857[0-6]|10485[0-6]\d|1048[0-4]\d{2}|104[0-7]\d{3}|10[0-3]\d{4}|[1-9]\d{1,5}|[1-9])d?
Обратите внимание, что это НЕ будет включать маркер абсолютной адресации $
, но может изменить, если это было необходимо.
Обратите внимание, что вы можете полностью избежать l oop с помощью:
Formula_string = "=IFS(N19=""Z001"",""xxxxxx"",N$19=""Z007"",""xxxxxx"",0=0,""xxxxxxx"")"
Formula_string_new = regEx.Replace(Formula_string, "$1" & firstRow)
With Range(wb.Cells(firstRow, 33), wb.Cells(lastRow, 33))
.Clear
.Formula = Formula_string_new
End With
Когда мы напишем формулу в такой диапазон, ссылки будут автоматически отрегулируйте, как вы это делали в вашем l oop.
В зависимости от неустановленных факторов вы можете использовать свойство FormulaLocal
вместо свойства Formula
.
Редактировать:
Чтобы сделать это немного более надежным, в случае, если в кавычках есть строка, которая точно имитирует действительный адрес, вы можете попробовать проверить, чтобы убедиться, что цитата (одинарное или двойное) не предшествует цели и не следует за ней.
Pattern: ([^"'])\$?\b(XF[A-D]|X[A-E][A-Z]|[A-W][A-Z]{2}|[A-Z]{2}|[A-Z])\$?(?:104857[0-6]|10485[0-6]\d|1048[0-4]\d{2}|104[0-7]\d{3}|10[0-3]\d{4}|[1-9]\d{1,5}|[1-9])d?\b(?!['"])
Replace: "$1$2" & i
Однако это не является «пуленепробиваемым», так как различные комбинации включаемых данных могут совпадать. Если это проблема, дайте мне знать, и я придумаю что-нибудь более надежное.