Добрый день. В общем и целом VBA не основная моя работа, но иногда приходится столкнуться. При выгрузке данных и формировании отчета часть значений теряет "0" в начале. Требуется добавить простой скрипт на поиск таких значений в столбце 7 и добавление в начало "0". Формулой делается элементарно, но кол-во строк бывает огромным, нужен эффективный скрипт. Набросал за целый день вот такое, но работать не хочет, не могу понять что он от меня хочет.
[vba]
Код
Sub ZAMENA035()
Dim massPR As Range Dim s As Long
sFile = ActiveWorkbook.Name Set sP0 = Workbooks(sFile).Sheets("СВОД") 'Подсчет кол-ва заполненных ячеек h = sP0.Cells.SpecialCells(xlLastCell).Row.Value 'Цикл перебора ячеек For i = 2 To h massPR = sP0.Range(sP1.Cells(2, 7), sP0.Cells(i, 7)).Value s = massPR.Value 'Сравнение значения ячейки с условием If Left(s, 2) = "35" Then 'Совмещение символа "0" со значением в ячейке s = "0" & s End If Next End Sub
[/vba]
Добрый день. В общем и целом VBA не основная моя работа, но иногда приходится столкнуться. При выгрузке данных и формировании отчета часть значений теряет "0" в начале. Требуется добавить простой скрипт на поиск таких значений в столбце 7 и добавление в начало "0". Формулой делается элементарно, но кол-во строк бывает огромным, нужен эффективный скрипт. Набросал за целый день вот такое, но работать не хочет, не могу понять что он от меня хочет.
[vba]
Код
Sub ZAMENA035()
Dim massPR As Range Dim s As Long
sFile = ActiveWorkbook.Name Set sP0 = Workbooks(sFile).Sheets("СВОД") 'Подсчет кол-ва заполненных ячеек h = sP0.Cells.SpecialCells(xlLastCell).Row.Value 'Цикл перебора ячеек For i = 2 To h massPR = sP0.Range(sP1.Cells(2, 7), sP0.Cells(i, 7)).Value s = massPR.Value 'Сравнение значения ячейки с условием If Left(s, 2) = "35" Then 'Совмещение символа "0" со значением в ячейке s = "0" & s End If Next End Sub
sFile = ActiveWorkbook.Name Set sP0 = Workbooks(sFile).Sheets(1) 'Подсчет кол-ва заполненных ячеек h = sP0.Cells.SpecialCells(xlLastCell).Row massPR = sP0.Range(sP0.Cells(2, 7), sP0.Cells(h, 7)).Value 'Цикл перебора ячеек For i = 1 To h - 1 's = massPR(i, 1) 'Сравнение значения ячейки с условием If Left(massPR(i, 1), 2) = "35" Then 'Совмещение символа "0" со значением в ячейке massPR(i, 1) = "0" & massPR(i, 1) End If Next sP0.Cells(2, 7).Resize(h - 1) = massPR End Sub
[/vba]
Здравствуйте. Вариант [vba]
Код
Sub ZAMENA035()
Dim massPR Dim s As String
sFile = ActiveWorkbook.Name Set sP0 = Workbooks(sFile).Sheets(1) 'Подсчет кол-ва заполненных ячеек h = sP0.Cells.SpecialCells(xlLastCell).Row massPR = sP0.Range(sP0.Cells(2, 7), sP0.Cells(h, 7)).Value 'Цикл перебора ячеек For i = 1 To h - 1 's = massPR(i, 1) 'Сравнение значения ячейки с условием If Left(massPR(i, 1), 2) = "35" Then 'Совмещение символа "0" со значением в ячейке massPR(i, 1) = "0" & massPR(i, 1) End If Next sP0.Cells(2, 7).Resize(h - 1) = massPR End Sub
Не знаю, у меня Ленин макрос из сообщения №2 прекрасно отрабатывает (Excel 2013). Увеличил размер диапазона до 10 тысяч строк - всё четко и мгновенно. А если поиграться с параметрами строки:[vba]
Код
If Left(massPR(i, 1), 2) = "35" Then ... If Left(massPR(i, 1), 4) = "0035" Then
[/vba], то легко добавляется и второй, и третий ноль...
Не знаю, у меня Ленин макрос из сообщения №2 прекрасно отрабатывает (Excel 2013). Увеличил размер диапазона до 10 тысяч строк - всё четко и мгновенно. А если поиграться с параметрами строки:[vba]
Код
If Left(massPR(i, 1), 2) = "35" Then ... If Left(massPR(i, 1), 4) = "0035" Then
[/vba], то легко добавляется и второй, и третий ноль...Gustav