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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2013, 09:46   #1
Y@R
Новичок
Джуниор
 
Регистрация: 21.03.2013
Сообщений: 6
По умолчанию замена текста в ячейке

Всем привет. Я тут первый раз, поэтому сильно не ругайте.
Задача вот в чем, Есть большой файл excel, где в столбце А периодически встречаются ячейки с одним и тем же текстом. Пусть к примеру текст будет AAABBB. Нужно текст в таких ячейках заменить на текст ячейки, которая выше данной. С VBA не сталкивался сроду. Простую замену вроде освоил, а как тут поступить- не могу сообразить.
спасибо заранее
Y@R вне форума Ответить с цитированием
Старый 21.03.2013, 10:29   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Y@R, есть два способа решения вашей задачи с учётом форматирования (форматирование - это, например, размер шрифта, цвет шрифта):
  1. один способ сохраняет форматирование, но при больших объёмах данных будет медленно работать;
  2. второй способ не сохраняет форматирование, но при больших объёмах данных сработает быстрее.
Какой вариант вам подходит?
Скрипт вне форума Ответить с цитированием
Старый 21.03.2013, 10:32   #3
Y@R
Новичок
Джуниор
 
Регистрация: 21.03.2013
Сообщений: 6
По умолчанию

форматирование - Вы что имеете ввиду? Регистр текста? он неважен. Главное чтобы было понятно написано
Y@R вне форума Ответить с цитированием
Старый 21.03.2013, 10:40   #4
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Y@R, форматирование - это внешний вид данных, например, цвет шрифта, размер шрифта, что-то ещё.

В программе "Excel" нет такого элемента форматирования "регистр". В программе "Word" есть.

Поэтому если использовать второй вариант из сообщения #2, то регистр останется.

Какой вариант вам подходит?
Скрипт вне форума Ответить с цитированием
Старый 21.03.2013, 10:43   #5
Y@R
Новичок
Джуниор
 
Регистрация: 21.03.2013
Сообщений: 6
По умолчанию

а - форматирование неважно. главное, чтобы текст остался
Y@R вне форума Ответить с цитированием
Старый 21.03.2013, 10:46   #6
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Y@R, я форумулы не учёл ещё. Формулы есть в столбце "A"? При втором способе формулы пропадут.
Скрипт вне форума Ответить с цитированием
Старый 21.03.2013, 10:50   #7
Y@R
Новичок
Джуниор
 
Регистрация: 21.03.2013
Сообщений: 6
По умолчанию

не не - в столбце а только текст - наименование товаров из прайса.
и ещё вдогонку. Хотелось бы ещё удалить все строки, у которых в столбце h пусто.
Это было бы идеально
Y@R вне форума Ответить с цитированием
Старый 21.03.2013, 10:58   #8
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

По первому вопросу

Код работает с активным листом, со столбцом "A" в диапазоне "A1:A100".
Код:
Sub Procedure_1()
    
    '1. Создаём в оперативной памяти компьютера поименованную
        'область - константу "mySearchText".
    'В эту константу поместим данные, которые нужно искать.
    Const mySearchText As String = "AAABBB"

    '2. Создаём в оперативной памяти компьютера поименованную область - массив.
    'В него поместим данные из Excel-книги, чтобы макрос быстрее работал.
    'Т.к. работа с самими ячейками медленнее.
    Dim myArray() As Variant
    
    '3. Создаю в оперативной памяти компьютера различные поименованные области -
        'переменные, которые понадобятся для написания кода.
    Dim i As Long
    
    '4. Помещаю данные из Excel-листа в массив "myArray".
    myArray() = Range("A1:A100").Value
    
    'Двигаемся по массиву сверху вниз.
    'Цикл "For ... To ... Step " - используется, чтобы делать одну
        'и ту же команду несколько раз.
    'UBound(myArray, 1) - это количество строк в массиве.
    'Двигаюсь со второй строки, т.к. у первой строки сверху нечего брать.
    For i = 2 To UBound(myArray, 1) Step 1
        'С помощью "If ... Then ... End If" выбираем, какое действие сделать.
        '5. Если в элементе массива есть искомый текст, то
            'берём данные из элемента выше.
        If myArray(i, 1) = mySearchText Then
            myArray(i, 1) = myArray(i - 1, 1)
        End If
    Next i
    
    '6. Вставляем данные обратно на Excel-лист.
        'С помощью "Resize" указываем, куда вставить данные
        'относительно ячейки "A1". В вашем случаем можно было бы просто записать:
        'Range("A1:A100").Value =myArray()
        'Это я на всякий случай написал.
    Range("A1").Resize(UBound(myArray, 1), 1).Value = myArray()
    
End Sub

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

По второму вопросу

Можно использовать "фильтр" - отобрать то, что нужно, а потом удалить. Можно сделать вручную. Если вручную долго делать, то можно макрос написать.

Можно попробовать вот такой макрос:
Код:
Sub Procedure_2()

    Dim myRangeForDelete As Excel.Range
    
    '1. Получаем доступ в столбце "H", к диапазону ячеек "H1:H100",
        'к ячейкам, которые пустые.
    Set myRangeForDelete = Range("H1:H100").SpecialCells(xlCellTypeBlanks)
    
    '2. Удаляем целые строки.
    '"EntireRow" используется, чтобы получить доступ к строкам.
    myRangeForDelete.EntireRow.Delete
    
End Sub
Только первое время проверяйте - все ли пустые ячейки удаляются. Потому что VBA-Excel-команда "SpecialCells" работает по правилам, которые в VBA-справке не описаны. Например, может дать неправильный результат, если внесли изменения, а книгу не сохранили.

Последний раз редактировалось Скрипт; 21.03.2013 в 12:09.
Скрипт вне форума Ответить с цитированием
Старый 21.03.2013, 11:32   #10
Y@R
Новичок
Джуниор
 
Регистрация: 21.03.2013
Сообщений: 6
По умолчанию

огромное спасибо - всё заработало) - круто. По итогу 30000 строк обработал менее чем за минуту - супер.
оч благодарен
Y@R вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
замена картинки в данной ячейке Mcduff JavaScript, Ajax 2 23.10.2012 01:39
Автоматическая замена имени файла в связанной ячейке ProkVS Microsoft Office Excel 0 29.12.2010 21:25
замена символов в строке(ячейке) pooli Microsoft Office Excel 6 27.09.2010 08:46
Замена текста в ячейке Пашка_1977 Microsoft Office Excel 3 17.08.2010 22:54
Замена символа в ОДНОЙ ячейке Excel.... Al_Sha Общие вопросы Delphi 2 11.06.2010 21:13