Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/84: Рейтинг темы: голосов - 84, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 4

Заполнить combobox неповторяющимися данными из столбца excel

20.10.2011, 22:55. Показов 16900. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!

никак не могу додумать как сделать

есть огромная таблица, 5000 строк

нужно combobox при открытии листа заполнить данными, например, из 1 столбца. но там много повторяющихся строк, т.е. нужны только уникальные значения в списке

заранее спасибо!! жду ответа! нужно очень срочно
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.10.2011, 22:55
Ответы с готовыми решениями:

Заполнить ComboBox данными из листа Excel
Как сделать, чтобы список составлялся из данных на листе ексель, при этом данные могут прибавляться

Заполнить Combobox данными из столбца БД
Добрый день :curtsy:! Я новичок в VB 6.0. Подскажите, как в VB 6.0 реализовать след. задачку: на форме размещен Combobox . Нужно, чтобы в...

Заполнить comboBox данными из Excel
Добрый день, уважаемые знатоки :) Прошу сильно не пинать, форум почитал, но не разобраться :-( Есть на форме комбобокс, значения для...

7
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
20.10.2011, 23:57
Отфильтруй сначала средствами ексела(только уникальные значения)
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
21.10.2011, 08:39
Пример быстрого заполнения списка уникальными значениями с одновременной сортировкой -
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
Sub InitBoxSort(B As MSForms.ComboBox)
Dim I As Long, C As Long, S$, L As Long, R As Long
For I = 2 To Cells.Rows.Count 'заполняем со второй строки
  S = Cells(I, 1)             'первого столбца
  If S = "" Then Exit For
  L = 0
  R = B.ListCount - 1
  Do While R >= L
    C = (R + L) \ 2
    Select Case StrComp(S, B.List(C))
      Case -1: R = C - 1
      Case 1: L = C + 1
      Case Else: GoTo NextI
    End Select
  Loop
  B.AddItem S, L
NextI:
Next I
End Sub
 
Private Sub UserForm_Initialize()
  InitBoxSort ComboBox1
End Sub
Берутся значения из первого столбца начиная со второй строки активного листа.
1
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
21.10.2011, 10:47
Без сортировки значительно быстрей будет считать в массив(одной строкой без циклов), записывать в словарь из массива(словарь не допускает повторений, но может подсчитать количество повторений) и затем вывалить словарь на лист(опять же одной строкой без циклов.
Но свои средства ексела обычно работают ещё быстрей

Добавлено через 6 минут
Выглядеть это будет примерно так:
Последние пять строк - сортировка, если не нужна можно удалить, и сообщение
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
Sub Мак()
    Dim Arr()
    Dim i
    Dim Dict As Object
Set Dict = CreateObject("Scripting.Dictionary")
Arr() = Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).Value
With Dict
    For i = 1 To N
        If .Exists(Arr(i)) Then
           .Item(Arr(i)) = .Item(Arr(i)) + 1
        Else
           .Add Arr(i), 1
        End If
    Next i
End With
Range("A1").Resize(Dict.Count) = Application.Transpose(Dict.keys)
Range("B1").Resize(Dict.Count) = Application.Transpose(Dict.items)
Columns("A:B").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
MsgBox "ГОТОВО"
End Sub
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
21.10.2011, 11:35
Ну если сортировать на листе, тогда и уникальные надо выделять расширенным фильтром.
Вот код, который делает то же самое, что код Апострофф:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub UserForm_Initialize()
Dim m
With Application
    .ScreenUpdating = False
    Set m = ActiveSheet
    m.Columns(1).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheets.Add.Range("A1"), Unique:=True
    Rows(1).Delete
    [A1].Sort [A1], xlAscending, Header:=xlNo
    ComboBox1.List = ActiveSheet.UsedRange.Value
    .DisplayAlerts = False
    ActiveSheet.Delete
    .DisplayAlerts = True
    .ScreenUpdating = True
End With
End Sub
0
0 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 4
31.10.2011, 15:58  [ТС]
Спасибо вам большое!!!

А подскажите, то же самое, только значения не в список заносить, а в столбец на другой лист???

с помощью программного кода на кнопочку!!
0
0 / 0 / 0
Регистрация: 02.11.2012
Сообщений: 33
05.12.2012, 20:35
один маленький вопросик с вашего позволения, в коде Апостроффа, что означает S$ в определении переменных?
0
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 7
06.12.2012, 09:07
_Vados, старый вариант описания типа переменных. s$ - string, % - Integer и т. д. Не все типы можно описать таким образом.

Alex77755, интересный вариант через словарь. Почему-то не задумывался над таким применением.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2012, 09:07
Помогаю со студенческими работами здесь

Заполнить данными combobox в datagridview
Я новичок, не пинайте сильно... Заполняю данными dataGridView1 данными из таблицы Employees источник: dataGridView1.DataSource =...

Как заполнить ComboBox данными из TADOTable программно?
У меня в программе список в таблице может пополняться. ComboBox я использую для редактирования заказов. И в нем должен быть список вида...

Как заполнить combobox данными для выбора?
Сделала форму кинула combobox.Как заполнить combo данными для выбора и как сделать, чтобы при выборе какого-либо пункта выходил отчет? ...

Как заполнить ArrayList данными столбца БД?
Подскажите как заполнить ArrayList столбцом из БД? Dim i As Integer Dim rab As New ArrayList SqlCom = New...

Заполнить ArrayList данными из столбца DataTable
Приветствую. Такой вопрос. dataGridView1.DataSource = (DataTable)dal.materialsNEW(); Есть в программе класс, который...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru