powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Повторяющиеся значения в массиве
25 сообщений из 49, страница 1 из 2
Повторяющиеся значения в массиве
    #33193500
SNV.1979
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дорогие все,

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

Пример:
Массив 1
Сахар - 6 кг
Мука - 100 кг
Рис - 10 кг
Сахар - 7 кг
Рис - 2 кг

Массив 2
Массив 1
Сахар - 13 кг
Мука - 100 кг
Рис - 12 кг
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #33194103
Код: plaintext
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.
Sub TestX()
    Dim rng As Range
    Dim lngI As Long
    Dim lngRows As Long
    Dim sum As Long
    
    Set rng = Cells( 1 ,  1 ).CurrentRegion
    
    lngRows = rng.Rows.Count
    
    ' Сортируем данные.
    rng.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
      OrderCustom:= 1 , MatchCase:=False, Orientation:=xlTopToBottom
    
    sum =  0 
    
    On Error Resume Next
    
    For lngI =  1  To lngRows
        If rng.Cells(lngI,  1 ).Value = rng.Cells(lngI,  1 ).Offset( 1 ,  0 ).Value Then
            sum = rng.Cells(lngI,  1 ).Offset( 0 ,  1 ).Value + rng.Cells(lngI,  1 ).Offset( 1 ,  1 )
            rng.Cells(lngI,  1 ).Offset( 0 ,  3 ) = sum
            rng.Cells(lngI,  1 ).Offset( 0 ,  2 ) = rng.Cells(lngI,  1 ).Value
        ElseIf rng.Cells(lngI,  1 ).Value <> rng.Cells(lngI,  1 ).Offset( 1 ,  0 ).Value _
          And rng.Cells(lngI,  1 ).Value <> rng.Cells(lngI,  1 ).Offset(- 1 ,  0 ).Value Then
            sum = rng.Cells(lngI,  1 ).Offset( 0 ,  1 ).Value
            rng.Cells(lngI,  1 ).Offset( 0 ,  2 ) = rng.Cells(lngI,  1 ).Value
            rng.Cells(lngI,  1 ).Offset( 0 ,  3 ) = sum
        End If
    Next lngI
    
    Range("C:D").SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
End Sub

Результат (см. рисунок).
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #33194106
А если проще.

Импортировать данные в Access. Сделать запрос с группировкой по продуктам и суммой по весу. Экпортировать данные.
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #33194163
Фотография talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще можно сделать сводную таблицу
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #33197098
SNV.1979
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно эту задачу решить как нибудь не выгружая данные на лист Excel'я?

Импорт в Access, конечно тоже решит задачу, но слишком громоздко
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #33197305
SNV.1979А можно эту задачу решить как нибудь не выгружая данные на лист Excel'я?
А где у тебя эти данные находятся?
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #33197392
Toking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, с этим нуна на форум VB :-)

Код: plaintext
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.
Sub AAA()
  Dim Arr( 4 ,  1 ) As Variant
  Dim Res( 4 ,  1 ) As Variant
  Dim i As Integer, j As Integer, k As Integer, c As Integer

  'Заполняем массив
  Arr( 0 ,  0 ) = "Сахар":   Arr( 0 ,  1 ) =  6 
  Arr( 1 ,  0 ) = "Мука":    Arr( 1 ,  1 ) =  100 
  Arr( 2 ,  0 ) = "Рис":      Arr( 2 ,  1 ) =  10 
  Arr( 3 ,  0 ) = "Сахар":   Arr( 3 ,  1 ) =  7 
  Arr( 4 ,  0 ) = "Рис":      Arr( 4 ,  1 ) =  2 

  'Решаем
  c = - 1 
  For i =  0  To  4 
    k = - 1 
    For j =  0  To c
      If Arr(i,  0 ) = Res(j,  0 ) Then
        k = j
        Exit For
      End If
    Next
    If k = - 1  Then
      c = c +  1 
      Res(c,  0 ) = Arr(i,  0 ):  Res(c,  1 ) = Arr(i,  1 )
    Else
      Res(k,  1 ) = Res(k,  1 ) + Arr(i,  1 )
    End If
  Next


  'Выводим результат
  For i =  0  To c
    Debug.Print Res(i,  0 ) & " - " & Res(i,  1 ) & " кг "
  Next

End Sub

зы: учиться нужно своими силами
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #33198728
Тоже накидал.

Код: plaintext
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.
Sub GroupBy()
    Dim varIn( 1  To  6 ,  1  To  2 ) As Variant
    Dim varOut( 1  To  6 ,  1  To  2 ) As Variant
    Dim intI As Integer
    Dim intJ As Integer
    Dim intK As Integer
    Dim bln As Boolean
    
    varIn( 1 ,  1 ) = "Сахар"
    varIn( 2 ,  1 ) = "Мука"
    varIn( 3 ,  1 ) = "Рис"
    varIn( 4 ,  1 ) = "Сахар"
    varIn( 5 ,  1 ) = "Рис"
    varIn( 6 ,  1 ) = "Рис"
    
    varIn( 1 ,  2 ) =  6 
    varIn( 2 ,  2 ) =  100 
    varIn( 3 ,  2 ) =  10 
    varIn( 4 ,  2 ) =  7 
    varIn( 5 ,  2 ) =  2 
    varIn( 6 ,  2 ) =  8 

    intK =  1 
    bln = False

    For intI = LBound(varIn,  1 ) To UBound(varIn,  1 )
        For intJ = LBound(varOut,  1 ) To UBound(varIn,  1 )
            If varIn(intI,  1 ) <> varOut(intJ,  1 ) Then
                bln = False
            Else
                bln = True
                Exit For
            End If
        Next intJ
        If Not bln Then
            varOut(intK,  1 ) = varIn(intI,  1 )
            varOut(intK,  2 ) = varIn(intI,  2 )
            intK = intK +  1 
        Else
            varOut(intJ,  2 ) = varOut(intJ,  2 ) + varIn(intI,  2 )
        End If
    Next intI
            
    For intK = LBound(varOut,  1 ) To UBound(varOut,  1 )
        If Not IsEmpty(varOut(intK,  1 )) Then
            Debug.Print varOut(intK,  1 ) & " - " & varOut(intK,  2 ) & " кг."
        End If
    Next
End Sub
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #33198884
MX--ALEX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SNV.1979Дорогие все,

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

Пример:
Массив 1
Сахар - 6 кг
Мука - 100 кг
Рис - 10 кг
Сахар - 7 кг
Рис - 2 кг

Массив 2
Массив 1
Сахар - 13 кг
Мука - 100 кг
Рис - 12 кг

подсоедини EXCEL к базе данных например M3-LITE (Free)
инструмент на сайте
http://cell-soft.eclub.lv/
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #33200440
Rustam-27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно и не прибегая к vba!

1. Список сортируется по наименованию
2. Далее выделяется первое упоминание нового наименования
3. Определяется сколько раз оно идет подряд
4. Складывается сумма по наименованию

все через формулы Excel

файл вложен.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Повторяющиеся значения в массиве
    #35479808
Stas_stas_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rustam-27, у меня тоже есть вопрос по повторяющимся значениям. Твои формулы очень интересны, не мог бы ты и мне помочь?

топег здесь
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #35480021
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
см. приложение, хотя в 5-м задании я не рекомендую использовать формулы из-за длительности пересчета.

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #35480102
Stas_stas_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL, это невероятно! Во-первых, спасибо огромное за такие формулы! И хотя и я сам был на верному пути - понимал, что в 4-м задании нужно как-то оперировать МАКС и ЕСЛИ, но вот до такого не допёр; ну и 5-е я никогда бы не сделал именно формулой (сделал почти по аналогии как предлагал Рустам по другому заданию: сортировка по возрастанию, пошаговое сравнение, при совпадении - возвращается заданное число в другой столбец, автофильтр по возвращаемому значению), но я бы до такого как ты никогда не допёр :D.


А во-вторых... Не мог бы ты начинающему человеку пояснить:
1. Какую функцию выполняет "*" вот в этой твоей формуле: =МАКС(ИНДЕКС((Исходные!$B$4:$B$3402=B41)*Исходные!$C$4:$C$3402;0))
2. В каком направлении надо начать думать, чтобы самому суметь написать такую форумулу как в 5-м задании?))))
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #35618902
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задание 5 можно значительно ускорить (см. вложение...)
KL (XL)см. приложение, хотя в 5-м задании я не рекомендую использовать формулы из-за длительности пересчета.
А как бы ты предложил сделать по другому ?
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #35626934
IgorPol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может быть проще всего использовать функцию "Итоги"? И быстро и верно.
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #35627076
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А правда, чё бы не итогами: сортируем по алфавиту и итогами при изменении названия выставляем сумму... Не для всех случаев, зато самый быстрый способ
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #35627154
Algol70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если у вас Excel-овский файл то используйте функцию =SUMIF()
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #35627221
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не, Algol70, вы немного не то сделали..... Надо выбрать повторяющиеся значения, а не суммы по группам
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #35627231
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PlanBА правда, чё бы не итогами: сортируем по алфавиту и итогами при изменении названия выставляем сумму... Не для всех случаев, зато самый быстрый способ Выложи пример..., а то что-то я не могу понять как с итогами сделать
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #35628634
IgorPol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
A-NikPlanBА правда, чё бы не итогами: сортируем по алфавиту и итогами при изменении названия выставляем сумму... Не для всех случаев, зато самый быстрый способ Выложи пример..., а то что-то я не могу понять как с итогами сделать

Вот примерчик
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #35628656
IgorPol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Файлик что-то не отправился
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #35628725
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опять не то! Требуется получить повторяющиеся значения в большом массве! (см. вложения, что были выше)
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #35655412
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL)см. приложение, хотя в 5-м задании я не рекомендую использовать формулы из-за длительности пересчета.
Что именно KL имел в виду он так и не ответил, но я думаю, что что-нибудь из этого (см.вложение). Всего мне удалось придумать 13 вариантов решения данной задачи !! Зацените!
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #35655413
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Повторяющиеся значения в массиве
    #35655416
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
25 сообщений из 49, страница 1 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Повторяющиеся значения в массиве
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]