PDA

Показать полную графическую версию : [решено] макрос преобразования форматов


kontox
13-04-2015, 21:45
Подскажите, как используя регулярные выражения переделать формат дат с 10.05.2005 на формат 10-05-2005 . нужно именно макросом , а не ctrl+h и заменить точку на тире

okshef
13-04-2015, 22:03
kontox, можно и без макроса. Откройте окно форматов ячеек, выберите "Все форматы",
в окно "Тип" введите ДД-ММ-ГГГГ

kontox
14-04-2015, 10:00
okshef, не -не, тут задачка стоит именно рег.выражениями)

Iska
14-04-2015, 12:54
kontox, упакуйте образец Вашей рабочей книги в архив и выложите последний сюда, либо на RGhost.

okshef
14-04-2015, 20:21
kontox, код такой
Selection.NumberFormat = "dd-mm-yyyy"
Вместо Selecton вы можете использовать любое выражение массива, ячейки, а код вкладывать в циклы... Простор для фантазии огромен.

Все зависит от ваших хотелок и начальных условий

Iska
14-04-2015, 20:52
okshef, ему, наверное, всё же надо не просто установить, а заменить только те, где есть установленный формат «dd.mm.yyyy», т.е., по условию. И, наверное, будет проще использовать поиск и замену, что-то наподобие такого:
Sub Ìàêðîñ1()
With Application
With .FindFormat
.Clear
.NumberFormat = "m/d/yyyy"
End With
With .ReplaceFormat
.Clear
.NumberFormat = "dd-mm-yyyy"
End With
End With

ActiveSheet.Cells.Replace What:="", Replacement:="", SearchFormat:=True, ReplaceFormat:=True
End Sub
хотя меня и удивляет выделенное (полный код был получен из макрорекордера).

kontox
15-04-2015, 20:15
Iska, а можете, помочь с таким преобразованием. вот для примера набор данных. Взял из головы

столбец A это id
B-фио
С номер кейса
D-состояние
E номер телефона

как можно сделать чтобы отобразились те данные, где
в столбце А тип number (4)

в столбце B тип varchar(20 char)
в столбце С тип varchar(12 char)
В столбце D тип number(1)
в столбце E тип number(11)

Iska
16-04-2015, 11:20
kontox, не понял от:
как можно сделать чтобы отобразились те данные, где
в столбце А тип number (4) »
и ниже по тексту.

kontox
16-04-2015, 18:19
все разобрался))

kontox
17-04-2015, 11:45
Такс, вот второй день пытаюсь сам понять в чем дело, когда выполняешь макрос
пишет ошибку в этой строчке
.NumberFormat = "dd-mm-yyyy"

Iska
17-04-2015, 18:04
Надо полагать, его нет у Вас в списке форматов. Насколько я понимаю, перед тем, как использовать пользовательский тип формата в .FindFormat/.ReplaceFormat — его нужно добавить к списку пользовательских форматов. Т.е., что-то наподобие:
Option Explicit

Sub Макрос1()
ActiveSheet.Range("D1").NumberFormat = "dd-mm-yyyy"

With Application
With .FindFormat
.Clear
.NumberFormat = "m/d/yyyy"
End With

With .ReplaceFormat
.Clear
.NumberFormat = "dd-mm-yyyy"
End With
End With

ActiveSheet.Cells.Replace What:="", Replacement:="", SearchFormat:=True, ReplaceFormat:=True

ActiveSheet.Range("D1").NumberFormat = "General"
End Sub

поскольку единственным известным мне способом программного добавления является применение формата к ячейке листа рабочей книги. В примере была взята некая пустая ячейка, отформатирована потребным форматом, сделан поиск и замена, затем эта же пустая ячейка приведена к формату по умолчанию.

kontox
18-04-2015, 10:58
Iska,
вот для примера набор данных. Взял из головы
столбец A это id
B-фио
С номер кейса
D-состояние
E номер телефона
как можно сделать чтобы отобразились те данные, где
в столбце А тип number (4)
в столбце B тип varchar(20 char)
в столбце С тип varchar(12 char)
В столбце D тип number(1)
в столбце E тип number(11)
Вложения »


что-то код написан, а не работает. Можете посмотреть, где в нем ошибка?

Iska
18-04-2015, 18:31
что-то код написан, а не работает. Можете посмотреть, где в нем ошибка? »
Что значит «не работает»? А как должен был работать?

Ваших потребностей я не понял, о чём писал уже выше. Других пояснений Вы не дали.

kontox
19-04-2015, 18:36
Исходя из описанного ниже формата нужно выделить только корректные записи, т.е. записи такого вида.
Название поля Тип (длина) Обязательность
1 ID number (4) NOT NULL
2 FIO varchar (20 char ) NOT NULL
3 Document varchar (12 char NOT NULL
4 Type_phone number (1) NULL
5 Phone number (11) NULL

Iska
19-04-2015, 18:52
kontox, что означает, например, «длина (4)» применительно к «number»? Число десятичных символов при отображении?!

Update: и по поводу:
4 Type_phone number (1) NULL
5 Phone number (11) NULL
как понимать — должны быть пустыми? Или могут быть пустыми?

В общем, как-то так:
Sub Sample()
Dim objRow As Range
Dim objRange As Range
Dim objSelection As Range

Dim boolSkipFromSelection As Boolean


Set objSelection = Nothing

For Each objRow In ThisWorkbook.Worksheets.Item("proverka").UsedRange.Rows
boolSkipFromSelection = False

For Each objRange In objRow.Range(Cells(1, 1), Cells(1, 3)).Cells
If IsEmpty(objRange.Value) Then
boolSkipFromSelection = True

Exit For
End If
Next

If Len(CStr(objRow.Cells(1, 1).Value)) > 4 Then
boolSkipFromSelection = True
ElseIf Len(CStr(objRow.Cells(1, 2).Value)) > 20 Then
boolSkipFromSelection = True
ElseIf Len(CStr(objRow.Cells(1, 3).Value)) > 12 Then
boolSkipFromSelection = True
ElseIf Len(CStr(objRow.Cells(1, 4).Value)) > 1 Then
boolSkipFromSelection = True
ElseIf Len(CStr(objRow.Cells(1, 5).Value)) > 11 Then
boolSkipFromSelection = True
End If

If Not boolSkipFromSelection Then
If objSelection Is Nothing Then
Set objSelection = objRow
Else
Set objSelection = Union(objSelection, objRow)
End If
End If
Next

objSelection.Select

Set objSelection = Nothing
Set objRange = Nothing
Set objRow = Nothing
End Sub




© OSzone.net 2001-2012