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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2013, 12:18   #1
Aegi
Новичок
Джуниор
 
Регистрация: 06.02.2013
Сообщений: 9
По умолчанию поиск и удаление чисел по размеру шрифта в указанном диапазоне

Доброго времени суток!
Имеется таблица с картинками,описанием и ценами товаров.Проблема в следующем - цены бывают новые и старые,новые имеют размерность шрифта 15, старые выполнены с размерностью 11. Мне необходимо избавиться от старых, сохранив новые.
Поэтому мне необходим макрос проверяющий размерность шрифта в заполненных ячейках столбца С и очищающий ячейки имеющих размерность шрифта цифр равной 11.
Подскажите ещё макрос по поиску ячеек значение которых равно 0 и их очищение.
Заранее благодарен.
Вложения
Тип файла: zip Книга1.zip (45.1 Кб, 10 просмотров)

Последний раз редактировалось Aegi; 07.02.2013 в 14:27.
Aegi вне форума Ответить с цитированием
Старый 07.02.2013, 12:23   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вы бы файл свой прикрепили - макрос был бы уже готов

А то воссоздавать ваш файл для теста макроса дольше, чем писать макрос из 3 строк...
EducatedFool вне форума Ответить с цитированием
Старый 07.02.2013, 14:29   #3
Aegi
Новичок
Джуниор
 
Регистрация: 06.02.2013
Сообщений: 9
По умолчанию

В загруженном примере надо избавиться от чисел выделенных красным в столбце С.
В столбце Е при автозаполнении кроме нужных значений появляется 0, хочу его удалить, а не скрывать.
Aegi вне форума Ответить с цитированием
Старый 07.02.2013, 15:24   #4
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Aegi, в столбце "E" у вас формулы. Нужно сохранить формулу или прямо можно ноль вместе с формулой удалить?
Скрипт вне форума Ответить с цитированием
Старый 07.02.2013, 15:42   #5
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Макрос, который на активном листе, в столбце "C" находит и удаляет текст, который имеет размер 11 пунктов и имеет красный цвет:
Код:
Sub Макрос1()

    '1. Ускоряем работу кода.
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual

    '2. Макрос будет работать на основе команды "Replace".
    'Команда "Replace" связана с окном "Найти и заменить".
        'Чтобы параметры из окна "Найти и заменить" не повлияли
        'на работу кода, очищаем параметры форматирования,
        'связанные с командой "Replace".
    Application.FindFormat.Clear
    
    '2. Устанавливаем параметры для поиска формата текста.
    'Под форматом подразумевается: размер шрифта, цвет шрифта.
    With Application.FindFormat.Font
        .Size = 11
        .Color = 255
    End With
    
    '3. Поиск и замена.
    'Часть кода получена с помощью макрорекордера.
    Columns("C").Replace What:="", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=True, _
        ReplaceFormat:=False
        
    '4. Убираем настройки поиска, чтобы не мешало пользователю
        'работать с окном "Найти и заменить".
    Application.FindFormat.Clear
    
    '5. Включаем то, что отключали.
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    
End Sub

Примечание

Номер цвета шрифта можно вот так узнать:
  1. перейдите в программу Excel;
  2. сделайте активной ячейку, у которой нужно узнать: какой цвет текста;
  3. перейдите в программу VBA;
  4. View - Immediate Window. Появится окно;
  5. в это окно скопируйте и вставьте этот код и нажмите клавишу "Enter".
  6. будет получен номер цвета и этот номер можно подставить в код.
    Код:
    print activecell.Font.Color

Последний раз редактировалось Скрипт; 07.02.2013 в 15:47.
Скрипт вне форума Ответить с цитированием
Старый 07.02.2013, 15:54   #6
Aegi
Новичок
Джуниор
 
Регистрация: 06.02.2013
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Скрипт Посмотреть сообщение
Aegi, в столбце "E" у вас формулы. Нужно сохранить формулу или прямо можно ноль вместе с формулой удалить?
там просто рассчитали, а далее столбец E копируется и вставляется вместо С посредством "вставка значение"
В прикреплённом файле мне нужно уже удалить нули макросом.

Последний раз редактировалось Aegi; 07.02.2013 в 16:11.
Aegi вне форума Ответить с цитированием
Старый 07.02.2013, 16:10   #7
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Макрос, который на активном листе, в столбце "E" удаляет из ячейки данные, если в ячейке ноль. При это, удаляется и формула из ячейки.
Код:
Sub Procedure_1()

    Dim myE() As Variant
    Dim myLastRow As Long
    Dim i As Long
    
    '1. Ускоряем работу кода.
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual

    '2. Определяем последнюю строку с данными, чтобы
        'знать: со скольки данными работать.
    myLastRow = Columns("E").Find(What:="?", LookIn:=xlValues, LookAt:=xlPart, _
        SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, _
        MatchCase:=False, SearchFormat:=False).Row
    
    '3. Берём данные из Excel-листа в VBA-массив.
    'В VBA-массиве быстрее работать, чем с Excel-ячейками.
    myE() = Range("E1:E" & myLastRow).Value
    
    '4. Удаляем ноль и формулу из Excel-листа.
    'С помощью цикла с "i" двигаемся по массиву "myE".
    For i = 1 To UBound(myE, 1) Step 1
        'Если в элементе массива "myE" ноль, то
        'удаляем данные из Excel-ячейки. Порядковые номера
        'элементов массива и строки Excel-листа совпадают в этом коде.
        If myE(i, 1) = 0 Then
            Cells(i, "E").Formula = ""
        End If
    Next i
    
    '5. Включаем то, что отключали.
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic

End Sub
Скрипт вне форума Ответить с цитированием
Старый 07.02.2013, 16:20   #8
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Макрос, который на активном листе, в столбце "E" удаляет из ячейки данные, если в ячейке ноль. Макрос удаляет формулы из всех ячеек в столбце "E", где есть данные.
Этот макрос должен быстрее работать, чем макрос из сообщения #7.
Код:
Sub Procedure_1()

    Dim myE() As Variant
    Dim myLastRow As Long
    Dim i As Long
    
    '1. Ускоряем работу кода.
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual

    '2. Определяем последнюю строку с данными, чтобы
        'знать: со скольки данными работать.
    myLastRow = Columns("E").Find(What:="?", LookIn:=xlValues, LookAt:=xlPart, _
        SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, _
        MatchCase:=False, SearchFormat:=False).Row
    
    '3. Берём данные из Excel-листа в VBA-массив.
    'В VBA-массиве быстрее работать, чем с Excel-ячейками.
    myE() = Range("E1:E" & myLastRow).Value
    
    '4. Удаляем ноль в массиве "myE".
    'С помощью цикла с "i" двигаемся по массиву "myE".
    For i = 1 To UBound(myE, 1) Step 1
        'Если в элементе массива "myE" ноль, то
        'удаляем данные из элемента массива "myE".
        If myE(i, 1) = 0 Then
            myE(i, 1) = Empty
        End If
    Next i
    
    '5. Вставляем изменённые данные на Excel-лист.
    Range("E1:E" & myLastRow).Value = myE()
    
    '6. Включаем то, что отключали.
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic

End Sub
Скрипт вне форума Ответить с цитированием
Старый 07.02.2013, 16:31   #9
Aegi
Новичок
Джуниор
 
Регистрация: 06.02.2013
Сообщений: 9
По умолчанию

Всё работает как и задумано,Огромное спасибо вам Скрипт.
Aegi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск в диапазоне Yusch Microsoft Office Excel 8 27.08.2012 11:21
Как организовать поиск по размеру Зод Общие вопросы Delphi 3 29.12.2011 01:11
Удаление символов в диапазоне по выбору. Vasek007 Microsoft Office Excel 4 06.10.2010 09:02
Не во всём указанном диапазоне работает формула. oleg_sh Microsoft Office Excel 2 02.03.2010 13:00
Расчет значений функций в указанном диапазоне изменения аргумента и параметра. aijan Помощь студентам 1 27.11.2009 07:52