Здравствуйте. В столбце А содержатся даты, вида 1-2 июня 2017 г. 23 июн 2017 г. 30 июня - 2 июля 2017 г. Необходимо, чтобы в столбец B записовалось 01.06.17 23.06.17 30.06.17 А в столбец С соотвественно 02.06.17 23.06.17 02.07.17 Помогите поправить код, чтобы разделять даты вида 30 июня - 2 июля 2017 г. Для других дат код работает. [vba]
Код
Sub Дата() Dim a() Dim i& Dim sp_date, sp_day Dim d1$, d2$, m$, y$ '------------------------- Application.ScreenUpdating = False With ActiveSheet a = .UsedRange.Value For i = 1 To UBound(a) If a(i, 1) <> "" Then sp_date = Split(a(i, 1), " ") sp_day = Split(sp_date(0), "-") d1 = sp_day(0) d2 = d1 If UBound(sp_day) > 0 Then d2 = sp_day(1) m = sp_date(1) y = sp_date(2) .Cells(i, 2) = CDate(d1 & " " & m & " " & y) .Cells(i, 3) = CDate(d2 & " " & m & " " & y) End If Next End With Application.ScreenUpdating = True End Sub
[/vba]
Здравствуйте. В столбце А содержатся даты, вида 1-2 июня 2017 г. 23 июн 2017 г. 30 июня - 2 июля 2017 г. Необходимо, чтобы в столбец B записовалось 01.06.17 23.06.17 30.06.17 А в столбец С соотвественно 02.06.17 23.06.17 02.07.17 Помогите поправить код, чтобы разделять даты вида 30 июня - 2 июля 2017 г. Для других дат код работает. [vba]
Код
Sub Дата() Dim a() Dim i& Dim sp_date, sp_day Dim d1$, d2$, m$, y$ '------------------------- Application.ScreenUpdating = False With ActiveSheet a = .UsedRange.Value For i = 1 To UBound(a) If a(i, 1) <> "" Then sp_date = Split(a(i, 1), " ") sp_day = Split(sp_date(0), "-") d1 = sp_day(0) d2 = d1 If UBound(sp_day) > 0 Then d2 = sp_day(1) m = sp_date(1) y = sp_date(2) .Cells(i, 2) = CDate(d1 & " " & m & " " & y) .Cells(i, 3) = CDate(d2 & " " & m & " " & y) End If Next End With Application.ScreenUpdating = True End Sub
Sub Дата() Dim a() Dim i& Dim sp_date, sp_day Dim d1$, d2$, m1$, m2$, y$ Application.ScreenUpdating = False With ActiveSheet a = .UsedRange.Value For i = 1 To UBound(a) If a(i, 1) <> "" Then a(i, 1) = WorksheetFunction.Trim(a(i, 1)) a(i, 1) = Replace(a(i, 1), " -", "-") a(i, 1) = Replace(a(i, 1), "- ", "-") sp_date = Split(a(i, 1), " ") fl = 0 For j = 0 To UBound(sp_date) If InStr(sp_date(j), "-") Then sp_day = Split(sp_date(j), "-") Exit For End If Next j If j Then If j = UBound(sp_date) + 1 Then d1 = sp_date(0) m1 = sp_date(1) d2 = d1 m2 = m1 y = sp_date(2) Else d1 = sp_date(0) m1 = sp_day(0) d2 = sp_day(1) m2 = sp_date(2) y = sp_date(3) End If Else d1 = sp_day(0) m1 = sp_date(1) d2 = sp_day(1) m2 = m1 y = sp_date(2) End If .Cells(i, 2) = CDate(d1 & " " & m1 & " " & y) .Cells(i, 3) = CDate(d2 & " " & m2 & " " & y) End If Next i End With Application.ScreenUpdating = True End Sub
[/vba]
Такой вариант
[vba]
Код
Sub Дата() Dim a() Dim i& Dim sp_date, sp_day Dim d1$, d2$, m1$, m2$, y$ Application.ScreenUpdating = False With ActiveSheet a = .UsedRange.Value For i = 1 To UBound(a) If a(i, 1) <> "" Then a(i, 1) = WorksheetFunction.Trim(a(i, 1)) a(i, 1) = Replace(a(i, 1), " -", "-") a(i, 1) = Replace(a(i, 1), "- ", "-") sp_date = Split(a(i, 1), " ") fl = 0 For j = 0 To UBound(sp_date) If InStr(sp_date(j), "-") Then sp_day = Split(sp_date(j), "-") Exit For End If Next j If j Then If j = UBound(sp_date) + 1 Then d1 = sp_date(0) m1 = sp_date(1) d2 = d1 m2 = m1 y = sp_date(2) Else d1 = sp_date(0) m1 = sp_day(0) d2 = sp_day(1) m2 = sp_date(2) y = sp_date(3) End If Else d1 = sp_day(0) m1 = sp_date(1) d2 = sp_day(1) m2 = m1 y = sp_date(2) End If .Cells(i, 2) = CDate(d1 & " " & m1 & " " & y) .Cells(i, 3) = CDate(d2 & " " & m2 & " " & y) End If Next i End With Application.ScreenUpdating = True End Sub