Здравствуйте
Есть макрос который позволяет быстрее вводить даты и время - без написания разделительных символов между числами, т.е., пишем:
080918 (или 80918) > макрос преобразует это число в дату > 08.09.2018
или
800 (или 0800) > макрос преобразует это число в время > 08:00
Это экономит много времени и сил, но можно ли сделать такое же для процентов? (десятичных знаков после точки будет всегда 2) т.е. пишем:
1246 > макрос преобразует это число в проценты > 12.46%
или
-700 > -7.00%
12306 > 123.06%
598700 > 5987.00%
Макрос состоит из 2 блоков, первый отвечает за даты, второй за время, в каждом блоке указывается диапазон для работы макроса в нужных столбцах, т.е. нужен третий блок только для процентов (в указаном диапазоне ячеек будут вводится только проценты и макрос может быть уверен что введенное число нужно преобразовать в процент).
Код макроса:
Есть макрос который позволяет быстрее вводить даты и время - без написания разделительных символов между числами, т.е., пишем:
080918 (или 80918) > макрос преобразует это число в дату > 08.09.2018
или
800 (или 0800) > макрос преобразует это число в время > 08:00
Это экономит много времени и сил, но можно ли сделать такое же для процентов? (десятичных знаков после точки будет всегда 2) т.е. пишем:
1246 > макрос преобразует это число в проценты > 12.46%
или
-700 > -7.00%
12306 > 123.06%
598700 > 5987.00%
Макрос состоит из 2 блоков, первый отвечает за даты, второй за время, в каждом блоке указывается диапазон для работы макроса в нужных столбцах, т.е. нужен третий блок только для процентов (в указаном диапазоне ячеек будут вводится только проценты и макрос может быть уверен что введенное число нужно преобразовать в процент).
Код макроса:
| Код |
|---|
Private Sub Worksheet_Change(ByVal Target As Range)
Dim vVal
Dim StrVal As String
Dim dDate As Date
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A1:A999")) Is Nothing Then
With Target
StrVal = Format(.Text, "000000")
If IsNumeric(StrVal) And Len(StrVal) = 6 Then
Application.EnableEvents = False
dDate = DateValue(Left(StrVal, 2) & "/" & Mid(StrVal, 3, 2) & "/" & Right(StrVal, 2))
.NumberFormat = "dd/mm/yyyy"
.Value = CDate(DateSerial(Year(dDate), Month(dDate), Day(dDate)))
End If
End With
End If
If Not Intersect(Target, Range("B1:B999")) Is Nothing Then
With Target
vVal = Format(.Value, "0000")
If IsNumeric(vVal) And Len(vVal) = 4 Then
Application.EnableEvents = False
.Value = Left(vVal, 2) & ":" & Right(vVal, 2)
.NumberFormat = "[hh]:mm"
End If
End With
End If
Application.EnableEvents = True
End Sub
|
Изменено: - 08.09.2018 16:11:49