Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/37: Рейтинг темы: голосов - 37, средняя оценка - 4.51
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718

выбрать из колонки неповторяющияся символы в матрицу

21.01.2013, 12:55. Показов 7998. Ответов 122
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как проще выбрать из колонки(строки) неповторяющияся символы(даные ячеек) в матрицу, тоесть грубо говоря то что отображается в списке автофильтра
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.01.2013, 12:55
Ответы с готовыми решениями:

Заполнить матрицу А[N,M] с файла символами, если символы повторяются в рядах то эти же символы заменить на их коды.
Заполнить матрицу А с файла символами, если символы повторяются в рядах то эти же символы заменить на их коды. Добавлено через 4 часа...

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

Какие выбрать колонки?
Не могу определиться с выбором акустики для помещения 18 кв.м потолок 2,5 м. Примерное расстояние от колонок до места прослушивания 3,5м. ...

122
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2013, 10:26
Студворк — интернет-сервис помощи студентам
Кто искал словарь словарей? Вот же в этой теме: выбрать из колонки неповторяющияся символы в матрицу
И даже 2 раза - мой первый код тоже .
А по изменившейся задаче - я думаю ничего кардинально не изменилось, и собирать там нечего.
Просто выходные массивы делаем пошире, результаты перекладываем чуть иначе. А наполнение словаря менять вообще не нужно, сравнение со словарём тоже в общем только чуть подкорректировать...
Но поздно уже... Если бы сразу (Вчера в 15:09) был этот пример - уже вчера и было бы решение. А так уже 2 кода написано почти впустую... Почти потому, что по сути алгоритм не менял, его и в третьем коде можно применить.

Добавлено через 8 часов 27 минут
Скорректировал код под новый файл.
Но что делать с этой жёлтой областью - не понял. Это что, зачем? Пока отодвинул в сторону...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Option Explicit
 
Sub subscet()
    Dim a(), i&, bi&, bbi&, x&, ii&, t$, el
 
    With CreateObject("Scripting.Dictionary")
        .CompareMode = 1
 
        a = Sheets("Справочник").[a1].CurrentRegion.Value
 
        For i = 1 To UBound(a)
            t = Trim(a(i, 1))
            If Not .exists(t) Then .Add t, CreateObject("Scripting.Dictionary")
            For x = 2 To UBound(a, 2)
                .Item(t).Item(Trim(a(i, x))) = 0&
            Next
        Next
 
        a = Sheets("База").[a1].CurrentRegion.Resize(, 6).Value
 
        ReDim b(1 To UBound(a), 1 To 5)
        ReDim bb(1 To UBound(a), 1 To 5)
        b(1, 1) = "Счет"
        b(1, 2) = "валюта"
        b(1, 3) = "субсчет"
        b(1, 4) = "отдел"
        b(1, 5) = "сумма"
        bb(1, 1) = "Счет"
        bb(1, 2) = "валюта"
        bb(1, 3) = "субсчет"
        bb(1, 4) = "отдел"
        bb(1, 5) = "сумма"
        bi = 1: bbi = 1
 
        For i = 2 To UBound(a)
            t = CStr(a(i, 2))
            If .exists(t) Then
                If Not .Item(t).exists(CStr(a(i, 4))) Then
                    bbi = bbi + 1
                    bb(bbi, 1) = a(i, 2)
                    bb(bbi, 2) = a(i, 3)
                    bb(bbi, 3) = a(i, 4)
                    bb(bbi, 4) = a(i, 1)
                    bb(bbi, 5) = a(i, 6)
                Else
                    bi = bi + 1
                    b(bi, 1) = a(i, 2)
                    b(bi, 2) = a(i, 3)
                    b(bi, 3) = a(i, 4)
                    b(bi, 4) = a(i, 1)
                    b(bi, 5) = a(i, 6)
                End If
            Else
                bbi = bbi + 1
                bb(bbi, 1) = a(i, 2)
                bb(bbi, 2) = a(i, 3)
                bb(bbi, 3) = a(i, 4)
                bb(bbi, 4) = a(i, 1)
                bb(bbi, 5) = a(i, 6)
            End If
        Next
 
    End With
 
    Sheets("Результат(сума)с Базы").[a1].Resize(bi, 5) = b
    Sheets("Несоотвествие с справочником").[a1].Resize(bbi, 5) = bb
 
End Sub
1
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
20.02.2013, 11:41  [ТС]
Hugo121, почему в пустую я его применю в другой задаче

Добавлено через 3 минуты
Igor_Tr, если взять в разрезе 20000 строк то там точно будут идентичные и мне нужно из етой массы выбрать нужное(сумму) инфо в разрезе валют, счетов , субсчетов, по отделам.... пример привел вразборос специально дабы дать понять что идентичность есть но в большой массе и ето и есть причина почему нехочу работать с формулами, спасибо за помощь...

Добавлено через 4 минуты
Igor_Tr, красава...... и ввосторге....а проверить на идентичность с справочником

Добавлено через 4 минуты
только таблица должна иметь вид как на примере....смотри лист результат.....

Добавлено через 16 минут
Hugo121, Ваш код болие подходит онделает проверку на не соотвествие.... и еще результат немного жко не такой должен быть посмотрите пожалуйста на лист результат(можыте даные затереть, и заполнить своими)
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2013, 12:09
Ну вот смотрю на результат -
1. нет отделов в столбик - это я у себя легко могу убрать
2. нет сумм - это тоже легко убирается

Про жёлтое поле я уже сказал - не понятно, как должен выглядеть результат.
Если нужно просто суммы передвинуть в соотв. столбик - это можно.
Чтоб не усложнять уже готовый код - можно это сделать отдельной несложной процедурой.
0
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
20.02.2013, 12:17  [ТС]
Цитата Сообщение от Hugo121 Посмотреть сообщение
нет отделов в столбик - это я у себя легко могу убрать
они дожны ити в первой строке

Добавлено через 26 секунд
Цитата Сообщение от Hugo121 Посмотреть сообщение
нет сумм - это тоже легко убирается
сумму нужно из базы вытащить

Добавлено через 53 секунды
желтое поле ето сумма отвечающия критериям на пересичении
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2013, 12:50
Т.е. раскидать суммы по отделам? Это ведь отделы там в первой строке? Это можно получить отдельной процедурой или сводной.
Вообще не вполне понятна задача (т.к. из примера это выудить нельзя) - для комбинации счёт-субсчёт может ли меняться валюта?
Если нет - то в мой словарь словарей можно добавить ещё один словарь - отделы. И собирать там сумму по отделу в счёт-субсчёт.
В итоге циклом по словарям выгружать на лист.

Или даже упростить конструкцию - первый словарь с ключами счёт &"|"& субсчёт (и проверяем наличие такого составного ключа при анализе базы) - если есть, то в словаре этого ключа собираем сумму по отделам (или отдел &"|"& валюта).
Если нет - то в массив несоответствий отбираем такие строки без доп. группировки (если нужно, ими можно заняться отдельно).
1
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
20.02.2013, 13:07  [ТС]
Цитата Сообщение от Hugo121 Посмотреть сообщение
раскидать суммы по отделам? Это ведь отделы там в первой строке?
да вы пправильно поняли

Добавлено через 54 секунды
Цитата Сообщение от Hugo121 Посмотреть сообщение
комбинации счёт-субсчёт может ли меняться валюта?
может так как я беру не полный счет а только его 4 первых цыфры

Добавлено через 49 секунд
Цитата Сообщение от Hugo121 Посмотреть сообщение
ей можно добавить ещё один словарь - отделы.
получится словарь словарей словарей

Добавлено через 26 секунд
Цитата Сообщение от Hugo121 Посмотреть сообщение
И собирать там сумму по отделу в счёт-субсчёт.
В итоге циклом по словарям выгружать на лист.
вот ето тоже у меня не получается

Добавлено через 55 секунд
Цитата Сообщение от Hugo121 Посмотреть сообщение
Или даже упростить конструкцию - первый словарь с ключами счёт &"|"& субсчёт
принципиально разницы нет главное конечный результат
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
20.02.2013, 13:43
Всем здравствуйте.
То Hugo121. Желтая область была утстановленная мной (забыл убрать, и там 2 на 1), когда заметил, что Счет - субсчтет имеет две валюты. Этого я и не понимаю. Счета могут быть "мультивалютные", а вот субсчет - моно. Из моей практики, но я не экономист. Задавал там вопрос, но внятного обяснения не получил. Я так понимаю, что, если что-то суммировать, тогда нужно привести к одной валюте. А весь код - как демо.
To IvanOK. Вы б выложили несколько результирующих рядов, выполненных вручную. Иначе мы тут все к диссертации приближаемся.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2013, 14:00
Ну тогда не понятно, как выводить результат совпавших...
Несоответствие вывожу на лист, как и было, а соответствие в Debug.Print:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Option Explicit
 
 
'Первый словарь с ключами счёт &"|"& субсчёт (и проверяем наличие такого составного ключа при анализе базы) - если есть, то в словаре этого ключа собираем сумму по отдел &"|"& валюта.
'Если нет - то в массив несоответствий отбираем такие строки без доп. группировки.
 
Sub subscetV4()
    Dim a(), i&, bi&, x&, t$, tt$, kk, el
 
    With CreateObject("Scripting.Dictionary")
        .CompareMode = 1
 
        a = Sheets("Справочник").[a1].CurrentRegion.Value
 
        For i = 1 To UBound(a)
            For x = 2 To UBound(a, 2)
                t = Trim(a(i, 1)) & "|" & Trim(a(i, x))
                If Not .exists(t) Then .Add t, CreateObject("Scripting.Dictionary")
            Next
        Next
 
        a = Sheets("База").[a1].CurrentRegion.Resize(, 6).Value
 
        ReDim b(1 To UBound(a), 1 To 5)
        b(1, 1) = "Счет"
        b(1, 2) = "валюта"
        b(1, 3) = "субсчет"
        b(1, 4) = "отдел"
        b(1, 5) = "сумма"
        bi = 1
 
        For i = 2 To UBound(a)
            t = a(i, 2) & "|" & a(i, 4) '"счёт" & "|" & "субсчёт"
            tt = a(i, 1) & "|" & a(i, 3) '"отдел" & "|" & "валюта"
            If .exists(t) Then
                .Item(t).Item(tt) = .Item(t).Item(tt) + a(i, 6)
            Else
                bi = bi + 1
                b(bi, 1) = a(i, 2)
                b(bi, 2) = a(i, 3)
                b(bi, 3) = a(i, 4)
                b(bi, 4) = a(i, 1)
                b(bi, 5) = a(i, 6)
            End If
        Next
 
        Debug.Print "счёт" & "|" & "субсчёт" & "|" & "отдел" & "|" & "валюта" & "|" & "сумма"
        
        For Each kk In .keys
            If .Item(kk).Count > 0 Then
                For Each el In .Item(kk).keys
                    Debug.Print kk & "|" & el & "|" & .Item(kk).Item(el)
                Next
            End If
        Next
 
    End With
 
    Sheets("Несоотвествие с справочником").[a1].Resize(bi, 5) = b
 
End Sub
Добавлено через 6 минут
Точно, есть "перекрытие" по валютам на счёт|субсчёт - а я сразу и не заметил...
Но код это показал - см. 1001|15:

Visual Basic
1
2
3
4
5
6
счёт|субсчёт|отдел|валюта|сумма
1000|01|1|1|125
1000|15|2|3|21.55
1001|12|3|3|4665.54
1001|15|2|2|855
1001|15|5|1|482.45
1
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
20.02.2013, 14:02
To Hugo121. Ну да. Только думаю, пример СЛИШКОМ обрезанный. В столбике "Валюты" 1,2,3 в моем понимании - это рубли, форинты, доллары... Вот пока IvanOK не определится (или опровергнет) - все остальное "мертвому припарки".
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2013, 14:09
Думаю, с формированием вывода как раз и проблема - оно в двумерную таблицу примера не влазит
Там под каждым отделом ещё должна быть подтаблица по количеству валют.
И как это должно выглядеть - это не нам придумывать
Я то результат уже на свой вкус вывел...
1
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
20.02.2013, 14:14  [ТС]
Цитата Сообщение от Igor_Tr Посмотреть сообщение
" 1,2,3 в моем понимании - это рубли, форинты, доллары
вы правы

Добавлено через 4 минуты
Igor_Tr, таблица должна иметь вид
---------------------------отдел-----1---------2-------3
счет--субсчет-- валюта
1000--01--------1---------------100,00-------15,66---100
1000--02--------1----------------15,16-------14,00---200
1000--05--------2----------------12,25------123,33---300
1001--01--------3--------------1000,12------156,60---400
0
 Аватар для murom2013
386 / 180 / 42
Регистрация: 20.02.2013
Сообщений: 470
20.02.2013, 14:20
здорова, народ. интересно тут у вас.
сам, как правило, для получения уникальных значений использую Range.RemoveDuplicates
здесь это на поможет?
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
20.02.2013, 14:20
Знаете анекдот. Малыш у папы: "Пап, а что такое аборт". Бедный папа, весь мокрый, и так, и сяк, с горем пополам, в допустимых границах, обяснил. Потом спрашивает: "Вовочка, а где ты это взял?" "Да вот же ж, пап, тут в книге написано - "...а волны бились о борт корабля...".
А это как понимать?
---------------------------отдел-----1---------2-------3
По каждому отделу отдельно, или кучей?
0
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
20.02.2013, 14:25  [ТС]
Hugo121, пример я привел может поможет вам....

Добавлено через 1 минуту
Igor_Tr,

Добавлено через 47 секунд
Igor_Tr, напишите что вам не понятно, я обясню

Добавлено через 55 секунд
1 ето один отдел
2 второй
3 третий

Добавлено через 59 секунд
Цитата Сообщение от IvanOK Посмотреть сообщение
--------------------------отдел-----1---------2-------3
счет--субсчет-- валюта
1000--01--------1---------------100,00-------15,66---100
1000--02--------1----------------15,16-------14,00---200
1000--05--------2----------------12,25------123,33---300
1001--01--------3--------------1000,12------156,60---400
я привел вид таблици результатов которую вы просили, она там есть только без сумм
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
20.02.2013, 14:26
1 ето один отдел
2 второй
3 третий
Еще раз. Это в куче, или должно быть разнесено по углам?
0
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
20.02.2013, 14:31  [ТС]
сумма по 1000 субсчет 01 по валюте 1 отдела 1 должна равнятся 100,00
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
20.02.2013, 14:55
Прогоните мой код с Upload. Посмотрите на листе результаты. Там практически каждая запись результата уникальна!!!
Разширьте пример, что б можно было что-то демонстрировать
0
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
20.02.2013, 15:23  [ТС]
Hugo121, в 68 сообщение ваш вариант то что надо только вывод в таблицу другой

Добавлено через 5 минут
Igor_Tr, ваш вариант в части выборки сум тоже катит....только отдели идут по строке и не повторяються, тогда будет все ок.... тоесть первырядок нужно выводить в строку а не в колонку
спасибо за терпение и за жалание помочь
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
20.02.2013, 15:24
Там в этом коде (в 68 сообщении) вообще нет вывода в таблицу совпавших. Только отбраковка выводится в таблицу, а совпавшие печатаются в окно отладки.
Вот как это выводить на лист - нужно делать. Можно и как Вы написали текстом - только не вполне понятно, как поступать с отделами. Их список есть где-то, или он есть уже на листе, или его нужно получить из наличия в базе, и нужно ли его сортировать или без разницы, или может ещё что всплывёт...
А вообще лениво уже и неинтересно - задачка решена, а с выводом возиться неохота. Посмотрите при пошаговом прогоне что в каких переменных лежит и забирайте куда угодно
Это уже рутина неинтересная...
1
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
20.02.2013, 15:38  [ТС]
Hugo121, есть в debug.print

Добавлено через 2 минуты
список нужно брать из базы даных они там есть и постоянно меняються
тоесть смысл ввесь сводится к созданию уныкального списка отделов, валют, счетов, сусчетов и вывести все суммы в результаты

Добавлено через 34 секунды
Цитата Сообщение от Hugo121 Посмотреть сообщение
его сортировать или без разницы,
желательно

Добавлено через 50 секунд
Цитата Сообщение от Hugo121 Посмотреть сообщение
ещё что всплывёт
на етом все

Добавлено через 5 минут
Цитата Сообщение от Hugo121 Посмотреть сообщение
Это уже рутина неинтересная
как я вас понимаю, но в етом есть тоже проблема вывода в сроку е не в колонку

Добавлено через 1 минуту
Hugo121, если вы считаете так .....ну и на етом спасибо мое уважение к вам ни как не ухудшыдся.....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.02.2013, 15:38
Помогаю со студенческими работами здесь

Какие колонки 2.1 выбрать ?
Подскажите пожалуйста , какие хорошие колонки 2.1 можно купить до 15к рублей ,чтобы был хороший басс и звук .

Какие выбрать колонки+звуковуху
Музыку слушаю через колонки/наушники примерно 50/50. Решил всё-таки купить нормальную звуковуху, и заодно колонки. Есть наушники(32...

Какую звуковую карту и колонки выбрать?
Бюджет 10 - 15к, лучше 10. Колонки нужны 2.0 или 2.1. Комната 9 м2.

Какие колонки выбрать? Недорогие, ~600руб.
Хочу приобрести недорогие колонки на работу (под музыку работается лучше). Предлагают за 600 руб. б/у Sven SPS-678 (см. картинку). ...

Помогите выбрать колонки 5.1 ~700 грн на комп
Помогите выбрать колонки 5.1 ~700 грн на комп Добавлено через 20 минут посмортите пожалуйста это норм колонки ? F&D 5.1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru