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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2014, 15:47   #1
Kapkom
Пользователь
 
Регистрация: 22.09.2014
Сообщений: 27
По умолчанию Макрос "Скрытие/удаление/добавление столбца по условию"

Добрый день!

Мне необходимо настроить 3 макроса:
1. Скрытие столбцов по диапазону (например, A:Z), ячейки которых по определенной строке (например, строке "1") содержат цифру "1" (или какой-нибудь текст (например, "да")).
2. Удаление таких столбцов.
3. Добавление слева от них одного (или двух, трех и т.п.) столбцов.

Подскажите, пожалуйста, что в тексте таких макросов необходимо прописать.
Буду очень благодарен за помощь!

С уважением, Артем.
Kapkom вне форума Ответить с цитированием
Старый 10.10.2014, 16:33   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

по пунктам 1 и 2 - вы пробовали найти готовый макрос в инете?

почему-то все, кто ищет, - сразу находит...
http://excelvba.ru/code/ConditionalRowsDeleting
EducatedFool вне форума Ответить с цитированием
Старый 10.10.2014, 16:53   #3
Kapkom
Пользователь
 
Регистрация: 22.09.2014
Сообщений: 27
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
по пунктам 1 и 2 - вы пробовали найти готовый макрос в инете?

почему-то все, кто ищет, - сразу находит...
http://excelvba.ru/code/ConditionalRowsDeleting
Этот макрос я видел. Там речь идет про строки, а у меня - о столбцах. Не знаю, что делаю неправильно, но подделать этот макрос под столбцы не получается.
На текущий момент я написал макрос на скрытие строк:
For Each c In Range("a1:a5000")
If c = 1 Then
c.Select
Selection.EntireRow.Hidden = True
End If
Next

В таком же виде - по удалению строк.
Но для скрытия, удаления столбцов этот макрос настроить у меня не выходит. Можете подсказать, что надо мне сделать?
Kapkom вне форума Ответить с цитированием
Старый 10.10.2014, 17:11   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

а всё аналогично для столбцов:

Код:
For Each c In Range("a1:h1")
If c = 1 Then c.EntireColumn.Hidden = True
Next
EducatedFool вне форума Ответить с цитированием
Старый 10.10.2014, 17:14   #5
Kapkom
Пользователь
 
Регистрация: 22.09.2014
Сообщений: 27
По умолчанию

Спасибо большое!
Kapkom вне форума Ответить с цитированием
Старый 10.10.2014, 18:06   #6
Kapkom
Пользователь
 
Регистрация: 22.09.2014
Сообщений: 27
По умолчанию

Извините, пожалуйста!

Как все-таки мне настроить макрос по пункту 3 моего вопроса (Добавление слева от столбца в конкретном диапазоне одного (или двух, трех и т.п.) столбцов)?
Kapkom вне форума Ответить с цитированием
Старый 10.10.2014, 18:56   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

добавляем справа 2 столбца:
Код:
For Each c In Range("a1:h1")
If val(c) = 1 Then c.EntireColumn.offset(,1).resize(,2).Insert
Next
в .resize(,2) - 2 отвечает за количество вставляемых столбцов
EducatedFool вне форума Ответить с цитированием
Старый 10.10.2014, 19:28   #8
Kapkom
Пользователь
 
Регистрация: 22.09.2014
Сообщений: 27
По умолчанию

Круто, большое спасибо! Буду использовать такой код.
А есть какая-нибудь возможность на добавление столбцов слева?
Kapkom вне форума Ответить с цитированием
Старый 10.10.2014, 22:25   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

offset(,1) - это смешение вправо на один столбец, перед вставкой
если смещение не делать - вставится перед столбцом

c.EntireColumn.offset(,0).resize(,2 ).Insert
или
c.EntireColumn.resize(,2).Insert
EducatedFool вне форума Ответить с цитированием
Старый 12.10.2014, 13:20   #10
Kapkom
Пользователь
 
Регистрация: 22.09.2014
Сообщений: 27
По умолчанию

Здравствуйте!

Извините, пожалуйста, но возникла еще одна проблема.
Я написал макрос по вставке столбца влево:
For Each c In Range("c1:z1")
If Val(c) = 1 Then
c.EntireColumn.Offset(, 0).Resize(, 1).Insert
End If
Next
По такому макросу получаются следующие действия.
1) Находится первая 1 в диапазоне c1:z1.
2) Вставляется слева от этой 1 столбец.
3) Дальше находится опять эта 1 и опять вставляется слева от нее еще один столбец.
В результате, вставляются столбцы от этой единицы до самого упора листа, при этом другие единицы указанного диапазона по макросу даже не выявляются и слева от них, как следствие, не вставляется столбец.
Как я понимаю, чтобы решить эти проблемы нужно, чтобы после вставки столбца слева от каждой найденной 1, эту 1 макрос должен удалить.
Скажите, пожалуйста:
1. Что надо указать в макросе, чтобы удалилась эта 1?
2. Что надо прописать в макросе, чтобы указанные проблемы решались без удаления найденных 1?


Я буду очень признателен за помощь!

С уважением, Артем.
Kapkom вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос "Скрытие строк при условии" Kapkom Microsoft Office Excel 2 22.09.2014 16:57
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Скрытие и отображения формы "Календарь" MickMick Microsoft Office Excel 10 06.12.2009 00:37
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04