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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2011, 17:17   #1
Настя.Пенская
 
Регистрация: 06.05.2011
Сообщений: 4
По умолчанию макрос, который переворачивает таблицу

Здраствуйте.
Помогите, пожалуйста, написать макрос который переворачивает таблицу.
Вот пример:
исходник:
а 1 2 3 4
б 1 2

результат:
1 а б
2 а б
3 а
4 а

Плииз. Очень надо!
Заранее ОГРОМНОЕ спасибо!
Настя.Пенская вне форума Ответить с цитированием
Старый 06.05.2011, 17:24   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Массивная =TRANSPOSE(A1:E2) похоже не годится?

Тогда так. Диапазоны в [] можно задать любые.
Код:
Option Explicit

Sub tt()
Dim a, b, i As Long, ii As Long

a = [a1:e2]
ReDim b(1 To UBound(a, 2) - 1, 1 To UBound(a, 1) + 1)

For i = 1 To UBound(a)
For ii = 2 To UBound(a, 2)
    If a(i, ii) = ii - 1 Then b(ii - 1, i + 1) = a(i, 1)
Next ii, i

For i = 1 To UBound(b): b(i, 1) = i: Next
[a4].Resize(UBound(b, 1), UBound(b, 2)) = b

End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 06.05.2011 в 17:45.
Hugo121 вне форума Ответить с цитированием
Старый 06.05.2011, 22:26   #3
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Только макрос?
vikttur вне форума Ответить с цитированием
Старый 06.05.2011, 22:31   #4
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Файл здесь
Вложения
Тип файла: rar трансп.rar (1.7 Кб, 19 просмотров)
vikttur вне форума Ответить с цитированием
Старый 03.06.2011, 00:18   #5
Настя.Пенская
 
Регистрация: 06.05.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Массивная =TRANSPOSE(A1:E2) похоже не годится?

Тогда так. Диапазоны в [] можно задать любые.
Код:
Option Explicit

Sub tt()
Dim a, b, i As Long, ii As Long

a = [a1:e2]
ReDim b(1 To UBound(a, 2) - 1, 1 To UBound(a, 1) + 1)

For i = 1 To UBound(a)
For ii = 2 To UBound(a, 2)
    If a(i, ii) = ii - 1 Then b(ii - 1, i + 1) = a(i, 1)
Next ii, i

For i = 1 To UBound(b): b(i, 1) = i: Next
[a4].Resize(UBound(b, 1), UBound(b, 2)) = b

End Sub

спасибо за макрос, но он выполняет немного не ту функцию. он переносит номер столбца сверху вниз. а необходимо, чтобы он переносит именно значение. например:

а 5 6 7 1 2
б 3 4
с 1 2 8 7
к 6 1

результат должен выглядеть так:

1 a c к
2 a c
3 б
4 б
5 а
6 а к
7 а с
8 с

в идеале еще группировать данные в одну ячейку через запятую. функция сцепить не подходит, т.к. столбцов будет больше через поддерживает функция.

ЗАРАНЕЕ СПАСИБО.

ОЧЕНЬ НАДЕЮСЬ НА ПОМОЩЬ
Настя.Пенская вне форума Ответить с цитированием
Старый 03.06.2011, 00:40   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Не знаю, вроде я всё сделал так, как в первом примере было.
Хотя какой это пример...
Давайте в файле - как есть, как надо.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 03.06.2011, 01:44   #7
Настя.Пенская
 
Регистрация: 06.05.2011
Сообщений: 4
По умолчанию

вот пример, спасибо
Вложения
Тип файла: rar art_photo.rar (9.5 Кб, 15 просмотров)
Настя.Пенская вне форума Ответить с цитированием
Старый 03.06.2011, 02:10   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Так тут совсем другой алгоритм нужен, транспонирование тут совсем не годится.
Тут нужно отбирать уникальные в словарь и как итем собирать записи из первого столбца. Ну или в параллельный массив.
Всего данных сколько строк/столбцов?
Но впрочем уже поздно сейчас делать... Завтра...

Настало завтра:

выполните на активном листе с данными

Код:
Option Explicit

Sub Nastja()
Dim a, aa(), i&, ii&, j&, u&, s$
a = [a1].CurrentRegion.Value
ReDim aa(1 To UBound(a, 1) * (UBound(a, 2) - 1), 1 To 2)

With CreateObject("Scripting.Dictionary")
    .CompareMode = 1
    For i = 1 To UBound(a, 1)
    For ii = 2 To UBound(a, 2)
        s = Trim(a(i, ii))
        If Len(s) Then
        If Not .Exists(s) Then
            j = j + 1: .Item(s) = CStr(j)
            aa(j, 1) = s: aa(j, 2) = CStr(a(i, 1))
            Else
            u = .Item(s): aa(u, 2) = aa(u, 2) & ", " & a(i, 1)
        End If
        End If
    Next
    Next
End With

Workbooks.Add.Sheets(1).[a1:b1].Resize(j) = aa

End Sub
На словаре и массиве.
Если [a1].CurrentRegion будет состоять из одного столбца - будет ошибка.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 03.06.2011 в 09:50.
Hugo121 вне форума Ответить с цитированием
Старый 03.06.2011, 09:28   #9
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Пока Солнце до Hugo не дошло...
Коллекция.
Вложения
Тип файла: zip art_photo.zip (17.9 Кб, 29 просмотров)
nilem вне форума Ответить с цитированием
Старый 03.06.2011, 09:56   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Николай, привет!
Кажется, я когда начинал пост редактировать, ниже ничего не было...
Но не важно, больше решений, хороших и разных!
P.S. Глянул вариант на коллекции - брат-близнец
Мне кажется, первый номер лучше как строку добавлять:
aa(j, 2) = CStr(a(i, 1))
Хотя при выгрузке эксель всё равно в число преобразует, сперва бы формат диапазону задать...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 03.06.2011 в 10:01.
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Триггер , который после добавления записи в одну таблицу редактирует запись другой таблицы Rin БД в Delphi 7 18.12.2010 03:50
Помогите создать макрос, который бы удалил все ячейки, кроме каждой 8-ой Рамирас Microsoft Office Excel 7 24.07.2010 19:37
Запрос, который создает новую таблицу Olya2131 Microsoft Office Access 4 08.06.2010 20:27
макрос который во время вычислений меняет курсор мыши. Екатерина__ Microsoft Office Excel 2 06.08.2009 23:49
Вот! Тот макрос, который заставил обратится меня на этот форум! Дмитрий Фукс Microsoft Office Excel 6 10.04.2009 10:29