Добрый день. Имеется следующая проблема: при выгрузке значений из программы сбился номер товара (был 1111-2222-3333-4444, стал 1111-22223333-4444), при небольшом количестве позиций руками поправить можно, но если таблица состоит из тысячи позиций, как можно исправить это встроенными функциями? Пример таблицы в файле.
Добрый день. Имеется следующая проблема: при выгрузке значений из программы сбился номер товара (был 1111-2222-3333-4444, стал 1111-22223333-4444), при небольшом количестве позиций руками поправить можно, но если таблица состоит из тысячи позиций, как можно исправить это встроенными функциями? Пример таблицы в файле.Тамоя
Алексей, не покатит. Посмотрите на последнюю цифру полученного. У нас количество цифр 4+4+4+4=16, а Excel поддерживает только 15 разрядов числа._Boroda_
Попробуйте такой макрос, запустите на той странице, где у Вас номера UPD немного подкорректировал код [vba]
Код
Sub NN() Dim Col As Integer: Col = Val(InputBox("Введите номер столбца, который будете исправлять")) If Col = 0 Then Exit Sub Application.ScreenUpdating = False Dim S$ Dim arr(0 To 3) Dim L As Long: L = Cells(Rows.Count, Col).End(xlUp).Row For I = 2 To L With Cells(I, Col) S = Replace(.Value, "-", "") If Len(S) = 16 Then .Value = "" For J = 0 To 3 arr(J) = Mid(S, 1 + 4 * J, 4) Next J .Value = Join(arr, "-") End If End With Next I Application.ScreenUpdating = True End Sub
[/vba]
Попробуйте такой макрос, запустите на той странице, где у Вас номера UPD немного подкорректировал код [vba]
Код
Sub NN() Dim Col As Integer: Col = Val(InputBox("Введите номер столбца, который будете исправлять")) If Col = 0 Then Exit Sub Application.ScreenUpdating = False Dim S$ Dim arr(0 To 3) Dim L As Long: L = Cells(Rows.Count, Col).End(xlUp).Row For I = 2 To L With Cells(I, Col) S = Replace(.Value, "-", "") If Len(S) = 16 Then .Value = "" For J = 0 To 3 arr(J) = Mid(S, 1 + 4 * J, 4) Next J .Value = Join(arr, "-") End If End With Next I Application.ScreenUpdating = True End Sub
смысл такой - берем строк и убираем все тире, а потом считываем по 4 знака с определенной позиции, ну и вставляем тире обратно. Можно еще проверку прикрутить, чтобы цифр было строго 16
смысл такой - берем строк и убираем все тире, а потом считываем по 4 знака с определенной позиции, ну и вставляем тире обратно. Можно еще проверку прикрутить, чтобы цифр было строго 16Udik
вот вам барабан яд 41001231307558 wm R419131876897 udik1968@gmail.com
Сообщение отредактировал Serge_007 - Пятница, 19.06.2015, 19:44
MBT, спасибо, интересный макрос если можно, то уточню пару моментов (с vba работала уж очень давно): Вы организовываете 2 цикла: 1-й просмотр всех ячеек, начиная со второй в указанном столбце, вопрос: на каком этапе останавливается данный цикл? когда программа сталкивается с пустой ячейкой? S - по факту это номер строки, верно? вот эта переменная .Value используется для вывода значения в ячейку?
MBT, спасибо, интересный макрос если можно, то уточню пару моментов (с vba работала уж очень давно): Вы организовываете 2 цикла: 1-й просмотр всех ячеек, начиная со второй в указанном столбце, вопрос: на каком этапе останавливается данный цикл? когда программа сталкивается с пустой ячейкой? S - по факту это номер строки, верно? вот эта переменная .Value используется для вывода значения в ячейку?Тамоя
Сообщение отредактировал Serge_007 - Пятница, 19.06.2015, 20:24
Нет, макрос вычисляет последнюю заполненную строку в указанной колонке и проверяет все до нее. S - промежуточная текстовая переменная (она равна Вашему номеру без "-"). А .Value - значение, содержащееся в ячейке, к которой это .Value относится. Как-то так, надеюсь, что не очень сумбурно
Нет, макрос вычисляет последнюю заполненную строку в указанной колонке и проверяет все до нее. S - промежуточная текстовая переменная (она равна Вашему номеру без "-"). А .Value - значение, содержащееся в ячейке, к которой это .Value относится. Как-то так, надеюсь, что не очень сумбурноМВТ