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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2011, 13:01   #1
masterenergy
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 34
По умолчанию Из вертикальной выборки уникальных, в горизонтальную.

Здравствуйте уважаемые форумчане. Возник вопрос: Как переделать этот макрос чтобы, он выбирал уникальные значения не из столбцов (вертикально), а из строк. Заранее благодарствую.
Option Explicit

Sub unq()
Dim arr, arr1
Dim Uniq1 As New Collection
Dim lr As Long, lc As Integer, c As Integer, i As Integer
Application.ScreenUpdating = False

arr = ActiveSheet.UsedRange
lr = Cells(Rows.Count, 1).End(xlUp).Row
lc = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count


For c = 1 To lc
For i = 1 To UBound(arr)
On Error Resume Next
Uniq1.Add arr(i, c), arr(i, c)
Next

ReDim arr1(1 To Uniq1.Count, 1 To 1)
For i = 1 To Uniq1.Count
arr1(i, 1) = Uniq1(i)
Next

Range(Cells(lr + 1, c), Cells(lr + UBound(arr1), c)).Value = arr1
Set Uniq1 = Nothing

Next

Application.ScreenUpdating = True
End Sub

Пытался переделать:

lr = Cells(Rows.Count, 1).End(xlUp).Row
lc = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count

в

lr = Cells(Columns.Count, 1).End(xlRight).Column
lc = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count


Не помогло.
masterenergy вне форума Ответить с цитированием
Старый 01.04.2011, 15:38   #2
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Так попробуйте (если ничего особо не менять):
Код:
Sub unq2()
Dim arr, arr1()
Dim Uniq1 As New Collection
Dim lr As Long, lc As Integer, c As Integer, i As Integer
Application.ScreenUpdating = False

arr = ActiveSheet.UsedRange
lr = Cells(Rows.Count, 1).End(xlUp).Row
lc = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count

On Error Resume Next
For c = 1 To lr

    For i = 1 To UBound(arr, 2)
        Uniq1.Add arr(c, i), CStr(arr(c, i))
    Next

    ReDim arr1(1 To Uniq1.Count)
    For i = 1 To Uniq1.Count
        arr1(i) = Uniq1(i)
    Next

    Range(Cells(c, lc + 1), Cells(c, lc + UBound(arr1))).Value = arr1
    Set Uniq1 = Nothing

Next

Application.ScreenUpdating = True
End Sub
PS Похоже на раннего Hugo (могу ошибаться)
nilem вне форума Ответить с цитированием
Старый 01.04.2011, 16:00   #3
masterenergy
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 34
По умолчанию

Скорее всего не ошибаетесь потому как этот код вроде он мне и подсказал (могу тоже конечно ошибаться). Хотя может вы и не о том.
Спасибо за помощь.
masterenergy вне форума Ответить с цитированием
Старый 01.04.2011, 16:14   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Не, это не я
lr, lc - это не моё.
И я обычно Integer не использую. Кстати, здесь на этом прокол:

lr As Long, c As Integer, i As Integer
...
lr = Cells(Rows.Count, 1).End(xlUp).Row
...
For c = 1 To lr
...
For i = 1 To Uniq1.Count

Но ошибки не будет, ведь:
On Error Resume Next



P.S. Хотя Uniq1 вроде никогда до предела Integer в варианте Николая не дойдёт... ну ладно, один прокол возможен.
А в верхнем коде два, а может и больше.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 01.04.2011 в 16:21.
Hugo121 вне форума Ответить с цитированием
Старый 01.04.2011, 16:32   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

сообщение к теме не имеет отношения, извините.
Цитата:
Похоже на раннего Hugo
замечательно))) вспомнилось из раннего Шекспира:
2B OR NOT 2B = FF
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 01.04.2011, 16:41   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию


Это наверное не обо мне, я меньше года на этом форуме... Цифры в ник пришлось добавить потому, что есть/был? другой Hugo
P.S. уже нет, я один остался...
webmoney: E265281470651 Z422237915069 R418926282008

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для сайта на юкозе горизонтальную алфавитку cusha Фриланс 0 25.03.2011 22:13
Особенности вертикальной синхронизации Lotles Компьютерное железо 3 14.12.2010 17:48
Вывести на экран горизонтальную линию из символов AleksENN Помощь студентам 6 02.07.2010 13:44
Кнопка с вертикальной надписью Pirit Компоненты Delphi 18 15.04.2009 01:37
Шифр вертикальной перестановки funny Общие вопросы C/C++ 0 27.09.2008 18:59