Товарищи экселисты! Я - чайник, но я учусь! Учусь по Эйткену. Дошел до преобразования текста в число. Решил поставить себе задачу преобразования в выделенном диапазоне текста в число. Вот мой код по теме: [vba]
Код
Public Sub numbers() Dim i As Integer With ActiveSheet.UsedRange Cells(i) = Val(Cells(i)) i = i + 1 End With End Sub
[/vba] Ошибки здесь в каждой строчке, но чтобы их исправить мне нужна Ваша помощь! Нужно пройтись циклом по каждой ячейке в диапазоне. Тут-то и проблемы у меня. За выделенный диапазон я беру ActiveSheet.UsedRange, но выскакивает ошибка
Товарищи экселисты! Я - чайник, но я учусь! Учусь по Эйткену. Дошел до преобразования текста в число. Решил поставить себе задачу преобразования в выделенном диапазоне текста в число. Вот мой код по теме: [vba]
Код
Public Sub numbers() Dim i As Integer With ActiveSheet.UsedRange Cells(i) = Val(Cells(i)) i = i + 1 End With End Sub
[/vba] Ошибки здесь в каждой строчке, но чтобы их исправить мне нужна Ваша помощь! Нужно пройтись циклом по каждой ячейке в диапазоне. Тут-то и проблемы у меня. За выделенный диапазон я беру ActiveSheet.UsedRange, но выскакивает ошибкаМурад
Public Sub numbers() For Each oCell In ActiveSheet.UsedRange.Cells If oCell <> "" And Val(oCell) <> 0 Then oCell.Formula = Val(oCell) End If Next End Sub
[/vba]
[vba]
Код
Public Sub numbers() For Each oCell In ActiveSheet.UsedRange.Cells If oCell <> "" And Val(oCell) <> 0 Then oCell.Formula = Val(oCell) End If Next End Sub
Ошибка не в каждой строчке, но есть. 2 штуки, и одна может вылезти позже. 1 - если пишите with, то внутри нужны точки! Иначе with смысла не имеет. 2 - i = i + 1 пишите перед использованием i - сейчас при первом использовании i=0, что и вызывает ошибку. 3 - Integer для значений, которые могут быть больше предела Integer использовать конечно же нежелательно. 4 - "За выделенный диапазон я беру ActiveSheet.UsedRange" - тут непонятно. Возможно тоже можно посчитать за ошибку. Это разные вещи.
Ошибка не в каждой строчке, но есть. 2 штуки, и одна может вылезти позже. 1 - если пишите with, то внутри нужны точки! Иначе with смысла не имеет. 2 - i = i + 1 пишите перед использованием i - сейчас при первом использовании i=0, что и вызывает ошибку. 3 - Integer для значений, которые могут быть больше предела Integer использовать конечно же нежелательно. 4 - "За выделенный диапазон я беру ActiveSheet.UsedRange" - тут непонятно. Возможно тоже можно посчитать за ошибку. Это разные вещи.Hugo
krosav4ig, сегодня кстати использовал твой код для исправления текстовых значений в плане закупок. Запустил. Значения начальной цены поправились, а вот сроки размещения и исполнения контракта, указанные в формате Даты 01.хх.хх поменялись на 1900 год... Так что надо поправить маленько код. Вот тебе кусок от моей таблицы, проверь сам. [p.s.] да, и еще во второй графе значения с точкой меняет на значения с запятой.
krosav4ig, сегодня кстати использовал твой код для исправления текстовых значений в плане закупок. Запустил. Значения начальной цены поправились, а вот сроки размещения и исполнения контракта, указанные в формате Даты 01.хх.хх поменялись на 1900 год... Так что надо поправить маленько код. Вот тебе кусок от моей таблицы, проверь сам. [p.s.] да, и еще во второй графе значения с точкой меняет на значения с запятой.Мурад
Public Sub numbers() With ActiveSheet.UsedRange For Each oCell In .Range("A:A,C:K,N:O") If oCell <> "" And Val(oCell) <> 0 Then oCell.Formula = Val(oCell) End If Next End With End Sub
[/vba]
если в таблицу будут добавляться столбцы справа, которые нужно будет обработать, то можно вместо
[vba]
Код
For Each oCell In .Range("A:A,C:K,N:O")
[/vba] написать [vba]
Код
For Each oCell In .Range("A:A,C:K,N:" & _ Split(Columns(.Column + .Columns.Count - 1).Address(False, False), ":")(0))
[/vba]
чтобы ускорить работу макроса можно ограничить диапазон, указав количество обрабатываемых строк, но этот способ работает только с непрерывными диапазонами, из-за этого приходится добавлять еще один цикл [vba]
Код
Public Sub numbers() With ActiveSheet.UsedRange For Each Rng In Array("A:A", "C:K", "N:O") For Each ocell In .Range(Rng).Rows(.Row & ":" & .Row + .Rows.Count - 1).Cells If ocell <> "" And Val(ocell) <> 0 Then ocell.Formula = Val(ocell) End If Next Next End With End Sub
[/vba]
как-то так [vba]
Код
Public Sub numbers() With ActiveSheet.UsedRange For Each oCell In .Range("A:A,C:K,N:O") If oCell <> "" And Val(oCell) <> 0 Then oCell.Formula = Val(oCell) End If Next End With End Sub
[/vba]
если в таблицу будут добавляться столбцы справа, которые нужно будет обработать, то можно вместо
[vba]
Код
For Each oCell In .Range("A:A,C:K,N:O")
[/vba] написать [vba]
Код
For Each oCell In .Range("A:A,C:K,N:" & _ Split(Columns(.Column + .Columns.Count - 1).Address(False, False), ":")(0))
[/vba]
чтобы ускорить работу макроса можно ограничить диапазон, указав количество обрабатываемых строк, но этот способ работает только с непрерывными диапазонами, из-за этого приходится добавлять еще один цикл [vba]
Код
Public Sub numbers() With ActiveSheet.UsedRange For Each Rng In Array("A:A", "C:K", "N:O") For Each ocell In .Range(Rng).Rows(.Row & ":" & .Row + .Rows.Count - 1).Cells If ocell <> "" And Val(ocell) <> 0 Then ocell.Formula = Val(ocell) End If Next Next End With End Sub