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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2014, 09:57   #1
Karakyl
Новичок
Джуниор
 
Регистрация: 28.08.2014
Сообщений: 2
По умолчанию Соответствие строк в таблице

Добрый день, мастера excel.
Периодически приходится делать отчеты с очень неудобными исходными данными. Пероначальная таблица имеет следующий вид: http://c2n.me/iOjXX0
Необходимо, чтобы в столбцах A, C, E, G, I ячейки выстроились вот так: http://c2n.me/iOjXF6
Числовые значения должны перемещаться вместе с ячейкой слева от него, как видно на втором скриншоте. Во вложении исходный вариант таблицы. Поскольку в отчетах около тысячи строк, то автоматизация этого процесса поможет не тратить на него несколько часов. Заранее спасибо за помощь!
Вложения
Тип файла: rar example.rar (11.9 Кб, 10 просмотров)
Karakyl вне форума Ответить с цитированием
Старый 28.08.2014, 11:25   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

сделайте активным лист с данными, выполните этот
Код:
Sub TblMakedGood()
  Dim c As Long, r As Long, minV As String
  For c = 1 To 9 Step 2
    r = Cells(Rows.Count, c).End(xlUp).Row
    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Cells(1, c).Resize(r, 1), _
      SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("data").Sort
      .SetRange Cells(1, c).Resize(r, 2): .Header = xlGuess: .MatchCase = False
      .Orientation = xlTopToBottom: .SortMethod = xlPinYin: .Apply
    End With
  Next
  r = 1
  Do
    minV = Cells(r, 1)
    For c = 3 To 9 Step 2
      If Cells(r, c) < minV Then minV = Cells(r, 3)
    Next
    If minV = "" Then Exit Sub
    For c = 1 To 9 Step 2
      If Cells(r, c) <> minV Then Cells(r, c).Resize(1, 2).Insert shift:=xlDown
    Next
    r = r + 1
  Loop Until False
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 28.08.2014, 13:32   #3
Karakyl
Новичок
Джуниор
 
Регистрация: 28.08.2014
Сообщений: 2
По умолчанию

Огромное спасибо, все работает!
Karakyl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление строк в таблице Antib Microsoft Office Excel 2 27.06.2011 10:34
подсчет строк в таблице Екатрина Microsoft Office Excel 16 19.04.2011 12:16
Группировка строк в таблице Lara181278 SQL, базы данных 1 11.10.2010 12:31
Удаление строк в таблице maksim_serg Microsoft Office Word 5 30.04.2010 13:18
дублирование строк в таблице windrun БД в Delphi 0 27.02.2010 22:53