Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Basic / VBA


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Гаряка Асмик
Статус: Профессор
Рейтинг: 5196
∙ повысить рейтинг »
Vasiliy83
Статус: Профессионал
Рейтинг: 2043
∙ повысить рейтинг »
Megaloman
Статус: Профессор
Рейтинг: 1595
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Basic/VBA

Номер выпуска:1050
Дата выхода:13.11.2010, 02:30
Администратор рассылки:Калашников О.А. (Руководитель)
Подписчиков / экспертов:204 / 92
Вопросов / ответов:1 / 1

Вопрос № 180606: Нужна программа на VBA. В верхнем левом углу листа Excel есть заполненная таблица. В каждой строке - несколько пустых ячеек. Теперь условно назовём таблицу до обработки программы старой таблицей, а после - новой таблицей. Нужно попарно поменять места...



Вопрос № 180606:

Нужна программа на VBA. В верхнем левом углу листа Excel есть заполненная таблица. В каждой строке - несколько пустых ячеек. Теперь условно назовём таблицу до обработки программы старой таблицей, а после - новой таблицей. Нужно попарно поменять местами все строки. Причём у каждой строки новой таблицы должно удаляться содержимое из той ячейки, которая была пуста для этой строки старой таблицы. То есть в новой таблице изменён порядок слов, а количество пустых ячеек в 2 раза больше. денежное вознаграждение за написание кода.

Отправлен: 07.11.2010, 19:00
Вопрос задал: igor
Всего ответов: 1
Страница вопроса »


Отвечает Megaloman (Профессор) :
Здравствуйте, igor!
Код:
MaxCol = "IV"                                       'Имя последнего столбца
NCol = Columns(MaxCol).Column

Out = True
i = 1

Do While Out
Out = False
For j = 1 To NCol
M1 = Cells(2 * i - 1, j)
M2 = Cells(2 * i, j)

L1 = (M1 = "")
L2 = (M2 = "")

If L1 Then M2 = ""
If L2 Then M1 = ""

Cells(2 * i - 1, j) = M2
Cells(2 * i, j) = M1

Out = Out Or Not L1 Or Not L2
Next
i = i + 1
Loop
Макрос будет работать на актив ном листе до тех пор, пока не встретятся обе пустые парные строки. Если желательно другой принцип завершения макроса, пишите.
А вот более эффективное решение задачи - за счёт обмена данными через массив
Код:
    MaxCol = "IV"
              'Имя последнего обрабатываемого столбца
N = Columns(MaxCol).Column

Dim M1 As Variant
Dim M2 As Variant
Dim R As Range
Set R = Range("A1:" + MaxCol + "1")

Out = True
i = 1
Do While Out
Out = False

M1 = R.Offset(2 * i - 2, 0)
M2 = R.Offset(2 * i - 1, 0)

For j = 1 To N
L1 = (M1(1, j) = "")
L2 = (M2(1, j) = "")

If L1 Then M2(1, j) = ""
If L2 Then M1(1, j) = ""

Out = Out Or Not L1 Or Not L2
Next

R.Offset(2 * i - 2, 0) = M2
R.Offset(2 * i - 1, 0) = M1

i = i + 1
Loop
По результату оба макроса эквивалентны

-----
Нет времени на медленные танцы

Ответ отправил: Megaloman (Профессор)
Ответ отправлен: 07.11.2010, 23:38
Номер ответа: 263867

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 263867 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Ответ поддержали (отметили как правильный): 1 чел.



    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFPRO.RU, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.23 от 10.11.2010

    В избранное