Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2013, 15:34   #1
sovareal
Новичок
Джуниор
 
Регистрация: 26.07.2013
Сообщений: 6
По умолчанию форматирование ячеек vba

Возникла необходимость реализовать форматирование текста в формирующемся отчете. Сам я с vba по долгу службы фактически не знаком. Буду очень благодарен за любую помощь.

1)Убрать первую строку(шапку) и 2 последние(подпись)
2)Вместо столбцов S и T сделать один столб информация в котором будет сумой S и T.
3)Все даты формата **,**,13 привести к виду **,**,2013
4)отформатировать столб С так, чтобы вместо **1234 оставался только числовой идентификатор.

Все кроме пункта 4) с горем-пополам удалось реализовать. По идее необходимо проверить вначале есть ли символы из строки B в С и если есть удалить их из С, а потом второй проверкой удалить все оставшиеся буквы из С.

Ниже код того, что пока удалось написать и пример файла. Буду очень благодарен за помощь. Работа горит.

Код:
Sub ListFormat()
    Dim lRow&, iCell As Range, i&
    lRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    ' 1)??????? ??????
        Cells(lRow - 1, "A").Resize(2, 1).EntireRow.Delete
    [A1].EntireRow.Delete
    
    lRow = lRow - 3
    
    ' 2)????????? ?????
       For i = 1 To lRow
        Cells(i, "S") = Cells(i, "S").Value + Cells(i, "T").Value
    Next i
    [T1].EntireColumn.Delete
    
    ' 3)?????? ??????? ?????? ??
    For i = 1 To lRow
        Cells(i, "C") = Mid(Cells(i, "C"), 3)
    Next i
    
    ' 4)?????? ???? **,**,13 ia **,**,2013
     
    
    Dim cell As Range, ra As Range: Application.ScreenUpdating = False
    Set ra = Range([m1], Range("m" & Rows.Count).End(xlUp))
    For Each cell In ra.Cells
        txt = Replace(cell, ".13", ".2013"): pos = InStrRev(txt, ":")
        If pos Then Mid(txt, pos, 1) = ".13"
        If cell <> txt Then cell.NumberFormat = "@": cell = txt
    Next cell
    
    Set ra = Range([n1], Range("n" & Rows.Count).End(xlUp))
    For Each cell In ra.Cells
        txt = Replace(cell, ".13", ".2013"): pos = InStrRev(txt, ":")
        If pos Then Mid(txt, pos, 1) = ".13"
        If cell <> txt Then cell.NumberFormat = "@": cell = txt
    Next cell
End Sub
Вложения
Тип файла: rar Книга1.rar (11.4 Кб, 21 просмотров)
sovareal вне форума Ответить с цитированием
Старый 26.07.2013, 16:04   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

это не вписывается в Ваше тех.задание
Код:
    For i = 1 To lRow
        Cells(i, "C") = Mid(Cells(i, "C"), 3)
    Next i
замените так:
Код:
  For r = 3 To lrow
    If Cells(r, 3) Like "*####" Then c = 4 Else c = 3
    Cells(r, 3) = Right(Cells(r, 3), c)
  Next
я сейчас для Азербайджанских авиалиний "рисую" графики полетов. интересно -обращайтесь.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 26.07.2013, 17:19   #3
sovareal
Новичок
Джуниор
 
Регистрация: 26.07.2013
Сообщений: 6
По умолчанию

Спасибо за помощь, единственная проблема - "*" и 0 тоже, так что если номер рейса начинается с "0" то его тоже "скушает".
Можно ли как-то задать только буквенный интервал?
sovareal вне форума Ответить с цитированием
Старый 26.07.2013, 18:19   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

какие рейсы не обработались этой процедурой, дайте примеры.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 29.07.2013, 09:34   #5
sovareal
Новичок
Джуниор
 
Регистрация: 26.07.2013
Сообщений: 6
По умолчанию

AUI046, AUI048(9 и 12 строка после обработки)
sovareal вне форума Ответить с цитированием
Старый 29.07.2013, 10:57   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

лидирующие нули теряются?
1) задайте колонке С формат "текстовый"
2) в примере выше используйте так:
Код:
    Cells(r, 3) = Format(Right(Cells(r, 3), c), String(c, "0"))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 29.07.2013, 11:48   #7
sovareal
Новичок
Джуниор
 
Регистрация: 26.07.2013
Сообщений: 6
По умолчанию

Эффект тот-же. 0 "кушает"
sovareal вне форума Ответить с цитированием
Старый 29.07.2013, 12:08   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

1. указали формат колонке
2. выполнили макрос и это
Код:
Cells(r, 3) = Format(Right(Cells(r, 3), c), String(c, "0"))
не работает?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 29.07.2013, 12:38   #9
sovareal
Новичок
Джуниор
 
Регистрация: 26.07.2013
Сообщений: 6
По умолчанию

Вот что я сделал

Код:
Sub ListFormat()
    Columns("C:C").Select
    Range("C2").Activate
    Selection.NumberFormat = "@"
    Dim lRow&, iCell As Range, i&
    lRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    ' 1)??????? ??????
        Cells(lRow - 1, "A").Resize(2, 1).EntireRow.Delete
    [A1].EntireRow.Delete
    
    lRow = lRow - 3
    
    ' 2)????????? ?????
       For i = 1 To lRow
        Cells(i, "S") = Cells(i, "S").Value + Cells(i, "T").Value
    Next i
    [T1].EntireColumn.Delete
    
    ' 3)?????? ??????? ?????? ??
        

    For r = 3 To lRow
    If Cells(r, 3) Like "*####" Then c = 4 Else c = 3
        Cells(r, 3) = Format(Right(Cells(r, 3), c), String(c, "0"))
    Next

    
    ' 4)?????? ???? **,**,13 ia **,**,2013
     
    
    Dim cell As Range, ra As Range: Application.ScreenUpdating = False
    Set ra = Range([m1], Range("m" & Rows.Count).End(xlUp))
    For Each cell In ra.Cells
        txt = Replace(cell, ".13", ".2013"): pos = InStrRev(txt, ":")
        If pos Then Mid(txt, pos, 1) = ".13"
        If cell <> txt Then cell.NumberFormat = "@": cell = txt
    Next cell
    
    Set ra = Range([n1], Range("n" & Rows.Count).End(xlUp))
    For Each cell In ra.Cells
        txt = Replace(cell, ".13", ".2013"): pos = InStrRev(txt, ":")
        If pos Then Mid(txt, pos, 1) = ".13"
        If cell <> txt Then cell.NumberFormat = "@": cell = txt
    Next cell
End Sub
Извиняюсь, некорректно выразился.
Первую колонку не форматирует, а 0 оставило.
sovareal вне форума Ответить с цитированием
Старый 29.07.2013, 12:41   #10
sovareal
Новичок
Джуниор
 
Регистрация: 26.07.2013
Сообщений: 6
По умолчанию

Сам разобрался. Нужно было поставить обработку с 2 строки, т.к. мы первую то удаляем.

Получаем
Код:
For r = 2 To lRow
    If Cells(r, 3) Like "*####" Then c = 4 Else c = 3
        Cells(r, 3) = Format(Right(Cells(r, 3), c), String(c, "0"))
    Next
sovareal вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактирование (форматирование) Закрытых ячеек NVolna Microsoft Office Excel 2 18.07.2013 18:13
Не сохраняется форматирование ячеек Андрей АВ Microsoft Office Excel 3 03.04.2013 17:16
Форматирование ячеек shmelvs Microsoft Office Excel 6 24.07.2008 10:24
Условное форматирование ячеек. *Иван* Microsoft Office Excel 2 24.11.2007 13:49
Форматирование ячеек Andr Microsoft Office Excel 12 18.08.2007 20:15