Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Объединение значений столбца 1 по значению столбца 2 - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Объединение значений столбца 1 по значению столбца 2
Ksenya Дата: Среда, 05.09.2012, 13:53 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

У меня массив примерно из 5000 строк. 2 колонки: 1 индикатор и 2 значение.
Нужно по значению сделать объединение индикаторов. Пример прикрепляю. Правда упрощенный вариант.
Причём нужно, чтобы индикаторы вычислялись и объединялись в одной ячейке.
Помогите решить задачку, плиз.
К сообщению приложен файл: ind-zn.xlsx (9.1 Kb)


Сообщение отредактировал Ksenya - Среда, 05.09.2012, 13:54
 
Ответить
СообщениеУ меня массив примерно из 5000 строк. 2 колонки: 1 индикатор и 2 значение.
Нужно по значению сделать объединение индикаторов. Пример прикрепляю. Правда упрощенный вариант.
Причём нужно, чтобы индикаторы вычислялись и объединялись в одной ячейке.
Помогите решить задачку, плиз.

Автор - Ksenya
Дата добавления - 05.09.2012 в 13:53
Hugo Дата: Среда, 05.09.2012, 14:22 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Стандартными функциями сделать трудно.
Проще использовать UDF, например такую:

код в модуле (или в надстройке):
(при участии The_Prist и RAN)
[vba]
Code

Function VLOOKUPCOUPLE6(Table As Variant, SearchColumnNum As Integer, SearchValue As Variant, _
                            RezultColumnNum As Integer, Separator_ As String, Optional BezPovtorov As Boolean = True)
'Table - таблица, где ищем
'SearchColumnNum - столбец, где ищем
'SearchValue - данные, которые ищем
'RezultColumnNum - колонка, откуда берём результат
'Separator_ - разделитель, желательно вводить с пробелом в конце
'BezPovtorov - если поставить 0, то будут выведены все повторяющиеся совпадения

        Dim i As Long, oDict As Object, tmp As String, vlk
            
        If TypeName(Table) = "Range" Then Table = Table.Value

        If BezPovtorov Then
            Set oDict = CreateObject("Scripting.Dictionary")

            For i = 1 To UBound(Table)
                If Table(i, SearchColumnNum) = SearchValue Then
                    tmp = Table(i, RezultColumnNum)
                    If tmp <> "" Then
                        If Not oDict.Exists(tmp) Then
                            oDict.Add tmp, 0&
                            vlk = vlk & Separator_ & Table(i, RezultColumnNum)
                        End If
                    End If
                End If
            Next i

        Else
            For i = 1 To UBound(Table)
                If Table(i, SearchColumnNum) = SearchValue Then
                    vlk = vlk & Separator_ & Table(i, RezultColumnNum)
                End If
            Next i
        End If
        If vlk > 0 Then vlk = Mid(vlk, Len(Separator_) + 1) Else vlk = ""
        VLOOKUPCOUPLE6 = vlk
End Function

[/vba]

Ещё существует пара UDF под названием СЦЕПИТЬЕСЛИ() - http://www.excelworld.ru/forum/3-26-1#282
В одной из них тоже есть отбор без повторов.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеСтандартными функциями сделать трудно.
Проще использовать UDF, например такую:

код в модуле (или в надстройке):
(при участии The_Prist и RAN)
[vba]
Code

Function VLOOKUPCOUPLE6(Table As Variant, SearchColumnNum As Integer, SearchValue As Variant, _
                            RezultColumnNum As Integer, Separator_ As String, Optional BezPovtorov As Boolean = True)
'Table - таблица, где ищем
'SearchColumnNum - столбец, где ищем
'SearchValue - данные, которые ищем
'RezultColumnNum - колонка, откуда берём результат
'Separator_ - разделитель, желательно вводить с пробелом в конце
'BezPovtorov - если поставить 0, то будут выведены все повторяющиеся совпадения

        Dim i As Long, oDict As Object, tmp As String, vlk
            
        If TypeName(Table) = "Range" Then Table = Table.Value

        If BezPovtorov Then
            Set oDict = CreateObject("Scripting.Dictionary")

            For i = 1 To UBound(Table)
                If Table(i, SearchColumnNum) = SearchValue Then
                    tmp = Table(i, RezultColumnNum)
                    If tmp <> "" Then
                        If Not oDict.Exists(tmp) Then
                            oDict.Add tmp, 0&
                            vlk = vlk & Separator_ & Table(i, RezultColumnNum)
                        End If
                    End If
                End If
            Next i

        Else
            For i = 1 To UBound(Table)
                If Table(i, SearchColumnNum) = SearchValue Then
                    vlk = vlk & Separator_ & Table(i, RezultColumnNum)
                End If
            Next i
        End If
        If vlk > 0 Then vlk = Mid(vlk, Len(Separator_) + 1) Else vlk = ""
        VLOOKUPCOUPLE6 = vlk
End Function

[/vba]

Ещё существует пара UDF под названием СЦЕПИТЬЕСЛИ() - http://www.excelworld.ru/forum/3-26-1#282
В одной из них тоже есть отбор без повторов.

Автор - Hugo
Дата добавления - 05.09.2012 в 14:22
Gustav Дата: Среда, 05.09.2012, 16:53 | Сообщение № 3
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Если речь идёт о том, чтобы сделать это один раз и забыть, то вот мой алгоритм:

1. Сортируете вручную таблицу по возрастанию: 1-й ключ - Значение, 2-й ключ - Индикатор.
2. В колонки C "Конец Значения" и D "Составной индикатор" вводите две простых формулы:
[vba]
Code

С2: =B3<>B2
D2: =ЕСЛИ(B2<>B1;A2;D1&", "&A2)
[/vba]
3. Включаете фильтр по колонке "Конец Значения" = ИСТИНА.
4. Копируете данные специальной вставкой "как значения" в другое место.
К сообщению приложен файл: Ksenya_03.xlsx (10.9 Kb)


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеЕсли речь идёт о том, чтобы сделать это один раз и забыть, то вот мой алгоритм:

1. Сортируете вручную таблицу по возрастанию: 1-й ключ - Значение, 2-й ключ - Индикатор.
2. В колонки C "Конец Значения" и D "Составной индикатор" вводите две простых формулы:
[vba]
Code

С2: =B3<>B2
D2: =ЕСЛИ(B2<>B1;A2;D1&", "&A2)
[/vba]
3. Включаете фильтр по колонке "Конец Значения" = ИСТИНА.
4. Копируете данные специальной вставкой "как значения" в другое место.

Автор - Gustav
Дата добавления - 05.09.2012 в 16:53
Ksenya Дата: Среда, 05.09.2012, 18:12 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Quote (Gustav)
Если речь идёт о том, чтобы сделать это один раз и забыть, то вот мой алгоритм:


К сожалению, это нужно постоянно, из обновления данных. Поэтому хочу автоматизировать. Спасибо за ваш вариант, буду иметь ввиду.
 
Ответить
Сообщение
Quote (Gustav)
Если речь идёт о том, чтобы сделать это один раз и забыть, то вот мой алгоритм:


К сожалению, это нужно постоянно, из обновления данных. Поэтому хочу автоматизировать. Спасибо за ваш вариант, буду иметь ввиду.

Автор - Ksenya
Дата добавления - 05.09.2012 в 18:12
Ksenya Дата: Среда, 05.09.2012, 18:13 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Файл xla с функцией создала, запустила. И в самом файле в исходном тексте функцию прописала. Но всё равно не работает. Файл прилагаю. Помогите. пожалуйста, понять, что не так. Уже второй час голову ломаю. Опыта работы в VBA у меня совсем нет. Но уже вдохновилась и буду постепенно вникать.
К сообщению приложен файл: ind-zn.xlsm (15.2 Kb)
 
Ответить
СообщениеФайл xla с функцией создала, запустила. И в самом файле в исходном тексте функцию прописала. Но всё равно не работает. Файл прилагаю. Помогите. пожалуйста, понять, что не так. Уже второй час голову ломаю. Опыта работы в VBA у меня совсем нет. Но уже вдохновилась и буду постепенно вникать.

Автор - Ksenya
Дата добавления - 05.09.2012 в 18:13
Gustav Дата: Среда, 05.09.2012, 18:31 | Сообщение № 6
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Подправил, заработало. Вы не совсем так и не совсем туда функцию добавили. С непривычки smile Сейчас формула засчитала, изучайте, говорите спасибо Hugo.
К сообщению приложен файл: ind-zn_031.xlsm (15.6 Kb)


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Среда, 05.09.2012, 18:46
 
Ответить
СообщениеПодправил, заработало. Вы не совсем так и не совсем туда функцию добавили. С непривычки smile Сейчас формула засчитала, изучайте, говорите спасибо Hugo.

Автор - Gustav
Дата добавления - 05.09.2012 в 18:31
Hugo Дата: Среда, 05.09.2012, 22:32 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Я там выше всё поменял - теперь новый код, и другое название smile
Название можете поставить любое - замените в коде VLOOKUPCOUPLE6 два раза на что понравится smile
Теперь есть опция исключения повторов.
Работает и с закрытой книгой, только диапазон нужно указывать не целыми столбцами.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеЯ там выше всё поменял - теперь новый код, и другое название smile
Название можете поставить любое - замените в коде VLOOKUPCOUPLE6 два раза на что понравится smile
Теперь есть опция исключения повторов.
Работает и с закрытой книгой, только диапазон нужно указывать не целыми столбцами.

Автор - Hugo
Дата добавления - 05.09.2012 в 22:32
Ksenya Дата: Четверг, 06.09.2012, 09:50 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Спасибо всем огромное. Всё работает. Нет предела моему счастью)


Сообщение отредактировал Ksenya - Четверг, 06.09.2012, 10:18
 
Ответить
СообщениеСпасибо всем огромное. Всё работает. Нет предела моему счастью)

Автор - Ksenya
Дата добавления - 06.09.2012 в 09:50
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!