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

Вход

Регистрация

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

 

= Мир MS Excel/Обработка массива через Collection - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обработка массива через Collection (Макросы/Sub)
Обработка массива через Collection
argetlam Дата: Пятница, 12.02.2016, 20:39 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 46
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Доброго времени.
Задача вполне тривиальная: имеется массив, необходимо сделать так, чтобы для каждого уникального значение первого столбца выводилось соответствующее минимальное из второго и максимальное из третьего. После чего вычислялась разница max-min. Я попытался сделать макрорекордером через сводные, но это не подходит, ибо массив намного больше и обработка занимает много времени. Должен быть способ сделать это с помощью создания коллекции, только я не знаю как. Поделитесь мудростью, пожалуйста :)
К сообщению приложен файл: 6787363.xls(60Kb)


Сообщение отредактировал argetlam - Пятница, 12.02.2016, 20:40
 
Ответить
СообщениеДоброго времени.
Задача вполне тривиальная: имеется массив, необходимо сделать так, чтобы для каждого уникального значение первого столбца выводилось соответствующее минимальное из второго и максимальное из третьего. После чего вычислялась разница max-min. Я попытался сделать макрорекордером через сводные, но это не подходит, ибо массив намного больше и обработка занимает много времени. Должен быть способ сделать это с помощью создания коллекции, только я не знаю как. Поделитесь мудростью, пожалуйста :)

Автор - argetlam
Дата добавления - 12.02.2016 в 20:39
Апострофф Дата: Пятница, 12.02.2016, 21:52 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 28 ±
Замечаний: 0% ±

Excel 2003
argetlam, если Вам нужен результат типа этого
[vba]
Код
Асеев Николай Александрович    05.08.15 18:20:22    06.08.15 05:55:36    11:35:14
Буркица Павел Иванович               05.08.15 09:04:46    05.08.15 11:36:05  02:31:19
[/vba]
то результат можно получить макросом за один проход без всяких коллекций.
Уточните, правильно ли я понял Вашу задачу.


Сообщение отредактировал Sclif666 - Пятница, 12.02.2016, 21:53
 
Ответить
Сообщениеargetlam, если Вам нужен результат типа этого
[vba]
Код
Асеев Николай Александрович    05.08.15 18:20:22    06.08.15 05:55:36    11:35:14
Буркица Павел Иванович               05.08.15 09:04:46    05.08.15 11:36:05  02:31:19
[/vba]
то результат можно получить макросом за один проход без всяких коллекций.
Уточните, правильно ли я понял Вашу задачу.

Автор - Апострофф
Дата добавления - 12.02.2016 в 21:52
argetlam Дата: Пятница, 12.02.2016, 22:10 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 46
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Sclif666, да, это похоже на результат, которого я пытаюсь добиться, буду благодарен, если Вы поделитесь решением)
 
Ответить
СообщениеSclif666, да, это похоже на результат, которого я пытаюсь добиться, буду благодарен, если Вы поделитесь решением)

Автор - argetlam
Дата добавления - 12.02.2016 в 22:10
Kuzmich Дата: Пятница, 12.02.2016, 22:37 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 238
Репутация: 42 ±
Замечаний: 0% ±

Excel 2003
Минимум можно выделить так
[vba]
Код

Range("A1:C264").Subtotal GroupBy:=1, Function:=xlMin, TotalList:=2, Replace:=True, _
                    PageBreaks:=False, SummaryBelowData:=True
[/vba]
 
Ответить
СообщениеМинимум можно выделить так
[vba]
Код

Range("A1:C264").Subtotal GroupBy:=1, Function:=xlMin, TotalList:=2, Replace:=True, _
                    PageBreaks:=False, SummaryBelowData:=True
[/vba]

Автор - Kuzmich
Дата добавления - 12.02.2016 в 22:37
Апострофф Дата: Пятница, 12.02.2016, 22:37 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 28 ±
Замечаний: 0% ±

Excel 2003
Как-то так -
[vba]
Код
Sub main()
Dim a As Double
Columns(4).Clear
For r = 2 To Rows.Count
  If Cells(r, 1) <> Cells(r - 1, 1) Then
    If a > 0 Then
      Cells(r - 1, 4) = Cells(r - 1, 3) - a
    End If
    a = Cells(r, 2)
  End If
  If Cells(r, 1) = "" Then Exit For
Next
End Sub
[/vba]
К сообщению приложен файл: 6787363n.xls(59Kb)
 
Ответить
СообщениеКак-то так -
[vba]
Код
Sub main()
Dim a As Double
Columns(4).Clear
For r = 2 To Rows.Count
  If Cells(r, 1) <> Cells(r - 1, 1) Then
    If a > 0 Then
      Cells(r - 1, 4) = Cells(r - 1, 3) - a
    End If
    a = Cells(r, 2)
  End If
  If Cells(r, 1) = "" Then Exit For
Next
End Sub
[/vba]

Автор - Апострофф
Дата добавления - 12.02.2016 в 22:37
argetlam Дата: Пятница, 12.02.2016, 23:00 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 46
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Sclif666, Это определенно оно! Не совсем понятно как, однако работает! Спасибо!
А можете пояснить, какое значение вначале принимает "a"? А то моя не понимает...

P.S. Открылась проблема - если ФИО не по порядку, то макрос отрабатывает некорректно. Хотя сделать сортировку не проблема)


Сообщение отредактировал argetlam - Пятница, 12.02.2016, 23:21
 
Ответить
СообщениеSclif666, Это определенно оно! Не совсем понятно как, однако работает! Спасибо!
А можете пояснить, какое значение вначале принимает "a"? А то моя не понимает...

P.S. Открылась проблема - если ФИО не по порядку, то макрос отрабатывает некорректно. Хотя сделать сортировку не проблема)

Автор - argetlam
Дата добавления - 12.02.2016 в 23:00
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обработка массива через Collection (Макросы/Sub)
Страница 1 из 11
Поиск:

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