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

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

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

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

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

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

Господа! Прошу помощи. Есть такая задачка - нужно преобразовать столбцы в строки, причем по определённому ключу сгруппировать. В примере строки группируются по столбцу А, причём если в столбце В есть цифра 3 - то остальные значения В и С с идентичными А дописываются в эту строку. Предпологается что цифра 3 есть в В всегда. Может кто-то помочь?
Вложения
Тип файла: rar primer.rar (6.6 Кб, 14 просмотров)
Serzh83 вне форума Ответить с цитированием
Старый 25.11.2009, 23:23   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Serzh83.
скорее всего существует способ решения Ваше задачи с применением формул, но я его не знаю, и потому код:
Код:
Sub transpArray()
Const iRow& = 11, sC = "^"
Dim i%, j%, s$, sA$, vArr0(), vA() As String
Range("A1:C7").Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1"), Order2:=xlAscending
    vArr0 = Range("A1:C7").Value
    j = iRow
    For i = 1 To UBound(vArr0)
        If Len(s) = 0 Then
            s = vArr0(i, 1): sA = s + IIf(vArr0(i, 2) >= 3, sC & vArr0(i, 2) & sC & vArr0(i, 3), "")
        ElseIf s = vArr0(i, 1) And vArr0(i, 2) >= 3 Then
            sA = sA + sC & vArr0(i, 2) & sC & vArr0(i, 3)
        Else
            vArr1 = Split(sA, sC)
            Range(Cells(j, 1), Cells(j, UBound(vArr1) + 1)).Value = vArr1
            j = j + 1: s = vArr0(i, 1)
            sA = s + IIf(vArr0(i, 2) >= 3, sC & vArr0(i, 2) & sC & vArr0(i, 3), "")
        End If
    Next
    If Len(sA) = 0 Then Exit Sub
    vA = Split(sA, sC)
    Range(Cells(j, 1), Cells(j, UBound(vArr1) + 1)).Value = vA
End Sub
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 26.11.2009, 10:21   #3
Serzh83
Новичок
Джуниор
 
Регистрация: 25.11.2009
Сообщений: 2
По умолчанию

Евгений, огромное спасибо за код!

А есть ли возможность сделать тоже, только когда в столбце В вместо цифр символовы. Т.е. группировка идет в строке не с цифрой 3, а к примеру с буквой М. В столбце В только буквы.

Просто в коде идет условие >=, а с буквами я так думаю оно работать не будет.
Serzh83 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан двухмерный массив из 20 столбцов. Вставить в него столбец из чисел 10 после всех четных столбцов. Дмитрий142 Помощь студентам 9 07.06.2012 19:32
Поиск в бинарном дереве не по ключу lebrosha Помощь студентам 2 26.05.2009 15:32
Перестановка столбцов матрицы и строки. MaGWaY_minsk Помощь студентам 3 06.02.2009 00:55
Как извлечь из двух столбцов несовпадающие строки Shavminator Microsoft Office Excel 4 28.12.2007 12:23
Упорядовачивание таблицы по ключу. Юлкунчик Помощь студентам 2 09.12.2007 20:59