Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
Excel

Посчитать количество совпадений в столбце

29.05.2018, 12:40. Показов 6467. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как посчитать кол-во совпадений в столбце. Аналог Excel СчетЕсли. мокрокодер код написал, несоображу как в VBA грамотно вставить
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.05.2018, 12:40
Ответы с готовыми решениями:

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

Как посчитать количество не пустых строк в каждом столбце
Добрый день! Помогите, пожалуйста, посчитать количество не пустых строк в столбцах. Не знаю как лучше сделать, в голове уже полная...

Удаление совпадений в столбце и вывод в Combobox
Всем привет! Извиняюсь за наглость, но подскажите какой-нибудь макрос, который будет перебирать ячейки в одном столбце моей таблицы(Столбец...

32
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,670
29.05.2018, 12:45
посчитать можно несколькими способами
тут важно куда вывести результат и в каком виде
ну и хотя бы пример с тем что сделали и подробным описанием того что хотите увидеть
0
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
29.05.2018, 12:54  [ТС]
Мне нужно посчитать одинакоавые значения в вкладке 1, добавить такое кол-во строк данной должности в вкладку 2 правую таблицу, и подтянуть из вкладки 1 в вкладку 2 значения из столбца рядом) ну главное первый вопрос мне сделать) спасибо

Можно конечно сразу в один цикл записать добавление строки со вставкой....но я не пойму как
Вложения
Тип файла: xlsx Книга2.xlsx (14.8 Кб, 11 просмотров)
0
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
29.05.2018, 13:26  [ТС]
snipe, я Вам писал. Простите
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,670
29.05.2018, 13:52
вот ваш файлик
что исправлено:
1. наименование листов - должны начинаться с буквы
2. на листе l1 исправлены названия столбцов (убран знак переноса, лишние пробелы и грамматические ошибки)
Вложения
Тип файла: rar Книга2 (2).rar (19.8 Кб, 15 просмотров)
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
29.05.2018, 14:50  [ТС]
Супер здорово. Спасибо огромное.Привязал макрос к кнопке. Все работает. Постараюсь разобраться и переделать под себя....у меня большая умная таблица и....было бы здорово, если бы Вы сделали для умной....ПРостите за наглость. Если нет, уже огромное спасибо. буду разбираться

Добавлено через 22 минуты
snipe, Огромное спасибо
0
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
29.05.2018, 16:38  [ТС]
snipe, немогу Ваш макрос перенести себе в таблицу. Слишком сложно для меня
Вложения
Тип файла: zip Автозаполнение (макрос!!!!)2.zip (67.6 Кб, 8 просмотров)
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,670
29.05.2018, 18:39
я не зря написал какие изменения внес в файле
Цитата Сообщение от snipe Посмотреть сообщение
2. на листе l1 исправлены названия столбцов (убран знак переноса, лишние пробелы и грамматические ошибки)
вы этого не сделали
дело в том что знак переноса это символ (он не печатается но он есть) так же как и лишний пробел, который с ходу можно и не увидеть, ну а ошибки - они в одном случае могут быть а в другом случае их может и не быть (например в названии столбца есть а в коде уже без ошибки)

вот строка со вторым запросом
Visual Basic
1
sqlStr = "SELECT i3.[Наименование средств защиты] from [База сотрудников$] is a3 Where i3.[Профессия или должность]='" & rs.Fields(0) & "'"
а вот правильная строка
Visual Basic
1
sqlStr = "SELECT i3.[Наименование средств защиты] FROM [Нормы СИЗ ()$] as i3 Where i3.[Профессия или должность]='" & rs.Fields(0) & "'"
три ошибки

далее если ставите
Option Explicit
то описание переменных обязательно
у вас в начале кода идет присвоение
Visual Basic
1
2
3
4
5
Set sh_workers = ThisWorkbook.Worksheets("База сотрудников") ' закрепление объекта за переменной
    Set workersListObj = sh_workers.ListObjects("employees") ' обозначение таблицы
    Set workersListRow = workersListObj.ListRows.Add ' добавление строки
     Set sh_prof = ThisWorkbook.Worksheets("Нормы СИЗ ()")
    Set profListObj = sh_prof.ListObjects("СИЗы")
а переменные не описаны через dim
0
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
29.05.2018, 19:58  [ТС]
snipe, А может быть посмотрите мой код? Дело в том, что там я в цикле определенное количество СИЗ использую(10), а нужно тут переменную количества для каждой должности подставить...Или, как сделали Вы. Не соображу как количество посчитать и зациклить все. Посмотрите пожалуйста. Работает по нажатию кнопки. Спасибо
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,670
29.05.2018, 20:08
ок - посмотрю
завтра (у меня уже ночь)
0
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
29.05.2018, 20:13  [ТС]
Доброй ночи. Простите. Спасибо за помощь ]snipe[/url],
0
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
29.05.2018, 21:32  [ТС]
snipe, вот мой файл
Вложения
Тип файла: zip Книга1.zip (25.2 Кб, 12 просмотров)
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
29.05.2018, 22:43
Если правильно понял задачу - нужно/проще менять алгоритм.
1. Сперва пробегаемся по листу Нормы СИЗ () и собираем словарь с коллекциями - каждому "Профессия или должность" собираем коллекцию "Наименоваие средств защиты"
2. Затем работаем с базой - идём по должностям (выгоднее вероятно снизу вверх), проверяем текущую на наличие в словаре - если есть, то добавляем строки с заполнением согласно собранной коллекции.
Советую изучить словари вообще и с коллекциями или другими словарями внутри - пригодится.
0
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
30.05.2018, 15:00  [ТС]
Hugo121, да. Все верно. С коллекциями и словарями не знаком.изучу спасибо.я только начинаю

Добавлено через 1 час 17 минут
snipe, snipe, Перемеррые у меня глобальные. Забыл совсем. Вот

Visual Basic
1
2
3
4
Dim workersListObj As ListObject
Dim profListObj As ListObject
Dim workersListRow As ListRow
Dim profListRow As ListRow


Добавлено через 53 секунды
snipe, ну я и тупой...не соображу как ни Ваш код перенести, ни как свой дописать

Добавлено через 2 часа 43 минуты
Ребят, что не так в моем коде.
0
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
30.05.2018, 20:20  [ТС]
snipe, я чувствую, разгадка совсем близко. Что я сделал не так? Подскажите пожалуйста
Вложения
Тип файла: zip Книга1 (2).zip (25.4 Кб, 6 просмотров)
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
30.05.2018, 21:41
Проще написать на словаре.
Вот код для модуля, хотя и из листа должен сработать:
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
Option Explicit
 
Sub tt()
    Dim Dic As Object, a, i&, t$, c As Collection, el
    a = Sheets("Нормы СИЗ ()").[a1].CurrentRegion.Value
    Set Dic = CreateObject("Scripting.Dictionary")
    With Dic
        .comparemode = 1
        For i = 2 To UBound(a)
            t = a(i, 1)
            If Not .exists(t) Then .Add t, New Collection
            .Item(t).Add a(i, 2)
        Next
    End With
 
    With Sheets("База сотрудников")
        For i = 4 To 2 Step -1
            t = .Cells(i, 9)
            If Dic.exists(t) Then
                Set c = Dic.Item(t)
                For Each el In c
                    Rows(i + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
                    .Cells(i + 1, 10) = el
                    '.Cells(i + 1, 11) = cell.Cells(1, 4)(i)
                    .Cells(i + 1, 12) = "18.04.2017"
                Next
            End If
        Next
    End With
End Sub
Пример файла конечно хреновый, и не понял что собирались тянуть там где закомментировал строку из старого кода. Можно эти данные добавить в коллекцию - сделать строку с разделителем, и затем сплитить.
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
30.05.2018, 22:29  [ТС]
Hugo121, Все работает, спасибо. Почему-то при переносе в мою БД (в мой файл), обрабатывает только последнюю позицию. Вверх не идет.

То, что закомментировали, это вставлял найденную строку FIND-ом "Set cell = profListObj.ListColumns.Item(1).Range.Fi nd(workersListRow.Range(9), lookat:=xlWhole)"
Про сплитить не понял) прошу прощения. Я только учусь

Добавлено через 2 минуты
а еще добавляемые СИЗ в задом наперед идут...Хотя Вы делали обратный цикл
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
30.05.2018, 22:37
Лучший ответ Сообщение было отмечено mor_sergey как решение

Решение

Про "сплитить" - это значит использовать Split(строка, разделитель)
Собираем строку (например "Каска|5"), затем при извлечении сплитим её в массив, его раскладываем по ячейкам (всё одним действием).
Про "задом наперёд" точно, мой косяк. Или перебирайте коллекцию снизу вверх, или можно её/их наполнять снизу вверх Это проще.

Добавлено через 47 секунд
Visual Basic
1
For i = UBound(a) To 2 Step -1
Добавлено через 1 минуту
Цитата Сообщение от mor_sergey Посмотреть сообщение
обрабатывает только последнюю позицию. Вверх не идет.
- предположение: есть только эта одна позиция, другие отличаются. Ну как вариант...
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
30.05.2018, 22:46  [ТС]
Вот теперь все супер. Огромное Вам спасибо....А с переносом в мой файл я разберусь

Добавлено через 4 минуты
Hugo121, Спасибо
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,670
31.05.2018, 05:48
вот ваш файлик
изменены названия столбцов на первом листе (убран знак переноса на другую строку в ячейке и удален лишний пробел
Вложения
Тип файла: 7z Книга11.7z (28.7 Кб, 21 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.05.2018, 05:48
Помогаю со студенческими работами здесь

Необходимо посчитать сколько совпадений будет в каждом столбце матрицы с соответсвующим элементом вектора
Здравствуйте. Пожайлуста, помогите выполнить задание в Mathcad. Даны матрица m на n элементов, и вектор в m элементов. Необходимо...

Посчитать количество совпадений в listbox
Есть listbox1 с семью Items: три строки "apple" и четыре строки "orange". Если ввести в textBox1 слово: "app". Тогда нужно чтоб в...

Посчитать количество совпадений (count)
здравствуйте! приведу пример. есть табличка, в ней три поля - TelNumber , IMEI, Dates (ни каких идентифицирующих столбцов нет). create...

Как мне посчитать количество совпадений в поле
Привет! есть вопрос, как мне правильно составить вопрос к базе данных mysq чтобы запрос посчитал сколько всего совпадений в поле ...

Сравнить числа массива РПД из 10-ти элементов, с содержимым R5, посчитать количество совпадений
Сравнить числа массива РПД из 10-ти элементов, с содержимым R5, посчитать количество совпадений.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru