Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   [решено] макрос преобразования форматов (http://forum.oszone.net/showthread.php?t=298320)

kontox 13-04-2015 21:45 2495323

[решено] макрос преобразования форматов
 
Подскажите, как используя регулярные выражения переделать формат дат с 10.05.2005 на формат 10-05-2005 . нужно именно макросом , а не ctrl+h и заменить точку на тире

okshef 13-04-2015 22:03 2495326

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

kontox 14-04-2015 10:00 2495458

okshef, не -не, тут задачка стоит именно рег.выражениями)

Iska 14-04-2015 12:54 2495526

kontox, упакуйте образец Вашей рабочей книги в архив и выложите последний сюда, либо на RGhost.

okshef 14-04-2015 20:21 2495754

kontox, код такой
Код:

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

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

Iska 14-04-2015 20:52 2495767

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 2496328

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 2496500

kontox, не понял от:
Цитата:

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

и ниже по тексту.

kontox 16-04-2015 18:19 2496725

все разобрался))

kontox 17-04-2015 11:45 2497033

Вложений: 1
  • prov.rar (12.50 KB, скачиваний: 12)
Такс, вот второй день пытаюсь сам понять в чем дело, когда выполняешь макрос
пишет ошибку в этой строчке
.NumberFormat = "dd-mm-yyyy"

Iska 17-04-2015 18:04 2497203

Надо полагать, его нет у Вас в списке форматов. Насколько я понимаю, перед тем, как использовать пользовательский тип формата в .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 2497399

Вложений: 1
Iska,
Цитата:

Цитата kontox
вот для примера набор данных. Взял из головы
столбец 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 2497537

Цитата:

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

Что значит «не работает»? А как должен был работать?

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

kontox 19-04-2015 18:36 2497957

Исходя из описанного ниже формата нужно выделить только корректные записи, т.е. записи такого вида.
Название поля Тип (длина) Обязательность
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 2497966

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



Время: 21:26.

Время: 21:26.
© OSzone.net 2001-