Математический форум Math Help Planet
Обсуждение и решение задач по математике, физике, химии, экономике Теоретический раздел |
Часовой пояс: UTC + 3 часа [ Летнее время ] |
новый онлайн-сервис число, сумма и дата прописью |
|
Часовой пояс: UTC + 3 часа [ Летнее время ] |
![]() ![]() |
Страница 1 из 1 |
[ Сообщений: 7 ] |
|
Автор | Сообщение | |
---|---|---|
alekscooper |
|
|
Здравствуйте, дан столбец с буквами, например, A, B, C, A, A, C, D, C, B, B... Нужно подсчитать, сколько раз каждая буква входит в столбец, но проблема в том, что неизвестно, какие именно буквы туда входят. Нужно построить то, что в Питоне называется словарём, то есть, получить таблицу вида: А 3, B 3, C 3, D 1 и т. п. То есть, Excel должен сам сформировать множество букв, пробегая по столбцу, и подсчитать количество. Как это сделать? Я даже прошу не столько формулу, сколько направление, в котором искать информацию. Как сформулировать задачу в терминах Excel? Спасибо. |
||
Вернуться к началу | ||
![]() |
Pirinchily |
|
|
alekscooper писал(а): Как это сделать? Я даже прошу не столько формулу, сколько направление, в котором искать информацию. Как сформулировать задачу в терминах Excel? Если умеете писать макросов на VBA for EXCEL - то напишите макрос пользуяс двойном циклом : например : For ... to ... next или repeat ... until или do ... loop Где в первом цикле проходите по столбец с буквами, а во втором накопляйте число каждого из встретившим в столбец букв. Отделно создайте масив с множество букв и проверяйте каждой элемент столбца с какой из букв множества совпадает - тогда по этом индиксом и нокопляйте число встретившим в столбец букв. |
||
Вернуться к началу | ||
![]() |
erjoma |
|
|
alekscooper писал(а): Здравствуйте, дан столбец с буквами, например, A, B, C, A, A, C, D, C, B, B... Нужно подсчитать, сколько раз каждая буква входит в столбец, но проблема в том, что неизвестно, какие именно буквы туда входят. Нужно построить то, что в Питоне называется словарём, то есть, получить таблицу вида: А 3, B 3, C 3, D 1 и т. п. То есть, Excel должен сам сформировать множество букв, пробегая по столбцу, и подсчитать количество. Как это сделать? Я даже прошу не столько формулу, сколько направление, в котором искать информацию. Как сформулировать задачу в терминах Excel? Спасибо. Извлечение уникальных элементов из диапазона |
||
Вернуться к началу | ||
![]() |
erjoma |
|
|
Pirinchily писал(а): Если умеете писать макросов на VBA for EXCEL - то напишите макрос пользуяс двойном циклом Возможно сделать все в одном цикле перебора букв. Для этого нужно найти способ учитывать встречалась это буква или нет ранее. |
||
Вернуться к началу | ||
![]() |
Exzellenz |
|
|
Используйте функцию COUNTIF (английская версия), или ZÄHLENWENN (немецкая версия), или СЧЁТЕСЛИ (русская версия)
|
||
Вернуться к началу | ||
![]() |
Exzellenz |
|
|
А можно с помощь функции пользователя.
Я написал ее программку на Excel-VBA. К сожалению, без вложенного цикла не обошлось: Function WasWieOft(Feld As Range) As String Dim X, List(), Table(), Anzahl() As Integer Dim N As Integer, i As Integer, j As Integer, k As Integer Dim WasNot As Boolean N = 0 For Each X In Feld ' считывает таблицу в массив "Table" N = N + 1 ReDim Preserve Table(1 To N) ' копия таблицы Excel Table(N) = X Next k = 0 ' счетчик списка, в котором не будет повторений For i = 1 To N ' текущая строка в таблице WasNot = True For j = 1 To i - 1 ' проверяет, встречалась ли такая буква в предыдущих строках If Table(i) = Table(j) Then ' если такая буква уже была раньше WasNot = False Exit For Else WasNot = True End If Next j If WasNot Then k = k + 1 ReDim Preserve List(1 To k) ReDim Preserve Anzahl(1 To k) Anzahl(k) = 0 List(k) = Table(i) For j = i To N ' считает, сколько раз повторяется новая буква в нижележащем списке If Table(j) = List(k) Then Anzahl(k) = Anzahl(k) + 1 Next j End If Next i WasWieOft = "" For i = 1 To k WasWieOft = WasWieOft & List(i) & " = " & Anzahl(i) & " " Next i End Function |
||
Вернуться к началу | ||
![]() |
erjoma |
|
|
С одним циклом
Public Sub CountingUniqueValues() Dim cell As Range 'Текущая ячейка Set cell = Application.ActiveCell Dim processedRange As Range 'Диапозон, в котором считаем уникальные значения Set processedRange = Application.InputBox("Выберите диапозон: ", "Меню выбора диапозона", Type:=8) 'А нужны ли проверки 1. выбран ли диапазон ? ' 2. пересечения диапозона и текущей ячейки пусто? ' 3. .... Dim k As Integer 'Количество найденных уникальных значений k = 0 Dim iterateCell As Range 'Для перебора ячеек диапозона Dim auxiliaryCell As Range 'Для проверки встречали мы уже уникальное значение при переборе или нет 'Можно обойтись строкой, если мы уверены, что проверяемые значения - только буквы 'Но тогда нужно использовать функцию InStr поиска в строке, а не Find 'А вообще можно через словарь CreateObject("Scripting.Dictionary") или CreateObject("System.Collections.ArrayList"), ' но лень разбираться Application.ScreenUpdating = False 'скрываем работу макроса For Each iterateCell In processedRange If k > 0 Then Set auxiliaryCell = Range(cell, cell.Offset(k - 1, 0)).Find(iterateCell.Value, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True) If auxiliaryCell Is Nothing Then cell.Offset(k, 0).Value = iterateCell.Value cell.Offset(k, 1).Value = 1 k = k + 1 Else auxiliaryCell.Offset(0, 1) = auxiliaryCell.Offset(0, 1) + 1 End If Else cell.Value = iterateCell.Value cell.Offset(0, 1).Value = 1 k = 1 End If Next Application.ScreenUpdating = True End Sub Без циклов Public Sub CountingUniqueValues1() Dim cell As Range 'Текущая ячейка Set cell = Application.ActiveCell Dim processedRange As Range 'Диапозон, в котором считаем уникальные значения Set processedRange = Application.InputBox("Выберите диапозон: ", "Меню выбора диапозона", Type:=8) 'А нужны ли проверки 1. выбран ли диапазон ? ' 2. пересечения диапозона и текущей ячейки пусто? ' 3. .... Application.ScreenUpdating = False 'скрываем работу макроса processedRange.Copy cell ' Копирум диапозон в активную ячейку Range(cell, cell.Offset(processedRange.Rows.Count - 1, 0)).RemoveDuplicates (1) ' Удаляем дупликаты в скопированном дипозоне !!! не различает регистр !!! Dim k As Integer 'количество уникальных значений k = WorksheetFunction.CountA(Range(cell, cell.Offset(processedRange.Rows.Count - 1, 0))) '!!! Не учитывает регистр !!! Range(cell.Offset(0, 1), cell.Offset(k - 1, 1)).FormulaArray = "=COUNTIF(" + processedRange.Address + ", " + Range(cell, cell.Offset(processedRange.Rows.Count - 1, 0)).Address + ")" Application.ScreenUpdating = True End Sub |
||
Вернуться к началу | ||
![]() |
![]() ![]() |
[ Сообщений: 7 ] |
Похожие темы | Автор | Ответы | Просмотры | Последнее сообщение |
---|---|---|---|---|
Подсчитать число функций, принадлежащих мн-ву | 3 |
163 |
16 дек 2020, 15:16 |
|
Подсчитать число функций F(~x^n) , у которых | 1 |
137 |
09 мар 2021, 14:17 |
|
Подсчитать число особых логических функций | 5 |
194 |
10 май 2021, 23:52 |
|
Подсчитать число слов длины n,довлетворяющих данным условиям | 3 |
164 |
04 дек 2020, 18:06 |
|
Слова, алфавит. Подсчитать число вхождений буквы в слово | 1 |
191 |
04 дек 2020, 17:42 |
|
Какова сторона квадрата, если её значение натуральное число
в форуме Геометрия |
2 |
259 |
11 апр 2017, 20:59 |
|
Число элементов, значения которых находятся в интервале | 1 |
493 |
21 июн 2014, 15:30 |
|
Подсчитать приближенно
в форуме Дифференциальное исчисление |
4 |
286 |
30 мар 2019, 22:35 |
|
Как подсчитать вероятность
в форуме Палата №6 |
57 |
3800 |
22 ноя 2013, 02:46 |
|
Подсчитать количество конфигураций 4-х пар | 20 |
1310 |
02 мар 2015, 20:55 |
Часовой пояс: UTC + 3 часа [ Летнее время ] |
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |