Суть проблемы в следующем: Есть массив натуральных чисел от 1 до 12, означающих номер (или количество) месяца (месяцев) исполнения. Чисел очень много, поскольку этот массив (файл xlsm )"разбирается" по другим программам. И формируется этот файл другими программами, и разными людьми.
Но проблема в том, что потом досылаются распоряжения о переносе месяца исполнений, например, с 1 месяца на месяц 5, и т.д. И приходится менять в массиве число 1 на число 5. Замен могут быть сотни. Чисел от 1 до 12 очень много. Проблему решало бы использования функций замены Excel. Но там месяц 12 (как содержащий цифру 1) меняется на 52. И т.д. Приходится вручную делать каждую замену. Долго.
Код следующий:
[vba]
Код
Sub replaceByList() Dim replaceRn As Range, inputRn As Range, replacementsRn As Range ' Определяем диапазон со значениями для замен With ThisWorkbook.Sheets("Список замен") Set replacementsRn = Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(0, 1)) End With With ThisWorkbook.Sheets("Массив замен") ' Устанавливаем стартовый диапазон Set replaceRn = Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)) ' Выделяем стартовый диапазон replaceRn.Parent.Activate replaceRn.Select ' Выведем запрос на изменение диапазона On Error Resume Next Set inputRn = Application.InputBox( _ Prompt:="Адрес для массовой замены", _ Title:="Замена по списку", _ Default:=replaceRn.Address(True, True, xlA1, True), _ Type:=8) Err.Clear On Error GoTo 0 ' Если пользователь отменил выделение - выйдем из макроса с предупреждением If Not inputRn Is Nothing Then Set replaceRn = inputRn Else MsgBox "Диапазон не выбран", vbCritical Exit Sub End If End With
' Для каждой пары заменяемых значений сделаем замену For Each rrow In replacementsRn.Rows replaceRn.Replace What:=rrow.Cells(1, 1).Value, Replacement:=rrow.Cells(1, 2).Value Next rrow
' Выведем сообщение о завершении работы (можно убрать) MsgBox "Done!", vbInformation End Sub
[/vba]
Прикрепляю сам файл. Он сильно упрощен, но содержит суть проблемы. Что можно сделать чтоб не было таких месяцев как 52 при замене месяца 1 на 5 при массовой замене?
Суть проблемы в следующем: Есть массив натуральных чисел от 1 до 12, означающих номер (или количество) месяца (месяцев) исполнения. Чисел очень много, поскольку этот массив (файл xlsm )"разбирается" по другим программам. И формируется этот файл другими программами, и разными людьми.
Но проблема в том, что потом досылаются распоряжения о переносе месяца исполнений, например, с 1 месяца на месяц 5, и т.д. И приходится менять в массиве число 1 на число 5. Замен могут быть сотни. Чисел от 1 до 12 очень много. Проблему решало бы использования функций замены Excel. Но там месяц 12 (как содержащий цифру 1) меняется на 52. И т.д. Приходится вручную делать каждую замену. Долго.
Код следующий:
[vba]
Код
Sub replaceByList() Dim replaceRn As Range, inputRn As Range, replacementsRn As Range ' Определяем диапазон со значениями для замен With ThisWorkbook.Sheets("Список замен") Set replacementsRn = Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(0, 1)) End With With ThisWorkbook.Sheets("Массив замен") ' Устанавливаем стартовый диапазон Set replaceRn = Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)) ' Выделяем стартовый диапазон replaceRn.Parent.Activate replaceRn.Select ' Выведем запрос на изменение диапазона On Error Resume Next Set inputRn = Application.InputBox( _ Prompt:="Адрес для массовой замены", _ Title:="Замена по списку", _ Default:=replaceRn.Address(True, True, xlA1, True), _ Type:=8) Err.Clear On Error GoTo 0 ' Если пользователь отменил выделение - выйдем из макроса с предупреждением If Not inputRn Is Nothing Then Set replaceRn = inputRn Else MsgBox "Диапазон не выбран", vbCritical Exit Sub End If End With
' Для каждой пары заменяемых значений сделаем замену For Each rrow In replacementsRn.Rows replaceRn.Replace What:=rrow.Cells(1, 1).Value, Replacement:=rrow.Cells(1, 2).Value Next rrow
' Выведем сообщение о завершении работы (можно убрать) MsgBox "Done!", vbInformation End Sub
[/vba]
Прикрепляю сам файл. Он сильно упрощен, но содержит суть проблемы. Что можно сделать чтоб не было таких месяцев как 52 при замене месяца 1 на 5 при массовой замене?selles-2013