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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2013, 21:29   #1
Arnold9131
Пользователь
 
Регистрация: 15.03.2013
Сообщений: 31
По умолчанию Добавить столбцы

Здравствуйте!
У меня есть таблица состоящая из 30 строк. Надо вставить новый столбец через каждые 5 столбцов.Реализация в VBA.
Помогите пожалуйста.
Arnold9131 вне форума Ответить с цитированием
Старый 11.09.2013, 01:34   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

http://excelvba.ru/code/RepeatRange

Код:
Sub ВставкаСтолбцов() ' пример применения для вашей задачи
    RepeatRange(Cells(6), 10, 5, xlToRight).EntireColumn.Insert
End Sub


Function RepeatRange(ByRef SourceRange As Range, ByVal Count As Long, _
                     ByVal Offset As Long, ByVal Direction As XlDirection) As Range
    ' функция получает в качестве параметра диапазон SourceRange,
   ' количество повторений диапазона Count, и шаг смещения Offset
   ' Возвращает диапазон, являющийся объединением копий диапазона SourceRange,
   ' смещённого на Offset ячеек Count раз в направлении Direction.

    Select Case Direction
        Case xlDown: OffsetX = 0: OffsetY = Offset
        Case xlUp: OffsetX = 0: OffsetY = -Offset
        Case xlToRight: OffsetX = Offset: OffsetY = 0
        Case xlToLeft: OffsetX = -Offset: OffsetY = 0
    End Select

    Set RepeatRange = SourceRange
    For i = 1 To Count - 1
        Set RepeatRange = Union(RepeatRange, SourceRange.Offset(OffsetY * i, OffsetX * i))
    Next i
End Function
EducatedFool вне форума Ответить с цитированием
Старый 11.09.2013, 07:27   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Еще вариант (упрощенный):
Код:
Sub qq()
    InsColumns([B2:AD20], 5).Insert
End Sub

Function InsColumns(x As Range, n As Long) As Range
    Dim i As Long
    Set InsColumns = Columns(x.Column + n)
    For i = x.Column + n To x.Column + x.Columns.Count Step n
        Set InsColumns = Union(InsColumns, Columns(i))
    Next
    Set InsColumns = Intersect(InsColumns, x.EntireRow)
End Function
1-й параметр функции - диапазон таблицы.
2-й параметр функции - шаг вставки столбцов.
Пример во вложении.
Вложения
Тип файла: rar Пример.rar (6.8 Кб, 2 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 11.09.2013, 11:27   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

или так:
Код:
Sub AddTrouth()
  InsRg([B2:AD20], 7, 5).Insert
End Sub

Function InsRg(rg As Range, AtC As Long, AddC As Long) As Range
  Set InsRg = Intersect(rg, Columns(AtC))
  If AtC + AddC < rg.Column + rg.Columns.Count Then Set InsRg = Union(InsRg, InsRg(rg, AtC + AddC, AddC))
End Function
параметры:
1 - обрабатываемый диапазон
2 - в какой колонке сделать первую вставку
3 - через сколько колонок добавлять следующие
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как преобразовать данные и добавить их в столбцы mordvin Microsoft Office Excel 10 05.09.2011 09:40
к элементам первой половины массива добавить минимум, а к элементам второй - добавить максимум specialist Паскаль, Turbo Pascal, PascalABC.NET 3 08.05.2011 01:46
скрыть столбцы allichka Microsoft Office Excel 9 17.02.2010 08:16
Взаимосвязанный столбцы! nikolai_P Microsoft Office Access 0 19.06.2009 11:29