Консультация № 150064
10.11.2008, 04:37
0.00 руб.
0 6 2
Здравствуйте, уважаемые эксперты.
Помогите, пожалуйста!
Есть ленточная форма с выведенными данными. Одно из текстовых полей это фамилии людей, которые повторяются в хаотичном порядке. Возможно ли посчитать количество фамилий и вывести в техт бокс на форме число? Не могу использовать Count т.к., например, фамилия "Иванов" встречается 5 раз, а "Петров" - 3 раза, т.е. фамилии две, а значений пять.
Данные на форме появляются в результате сложных перекрестных запросов, сделанных давно и не мной :-(, поэтому хотелось бы оперировать именно с данными выведенными на форме.
Заранее благодарен ответившим и всем здоровья!

Приложение:
Задача рассчитать и отобразить на форме среднее значение. Форма отображает фамилию работника и сумму зарплаты. Зарплату считаю с помощью Sum а данные по количеству людей получит не могу.

Обсуждение

Неизвестный
10.11.2008, 08:00
общий
это ответ
Здравствуйте, Alex Morozov!
Вашу структуру не знаю, приыведу пример нга основе VBA Excel
Код и описание в приложении.

Приложение:
Private Sub Workbook_Open()
Dim fam() As String
Dim temp As String
Dim i, j, kol As Integer
Dim priznak As Boolean
Dim Sheet As Variant

kol = 0
ReDim Preserve fam(kol) ''масив fam - массив фамилий
Set Sheet = ThisWorkbook.Sheets(1)
For i = 1 To 10 '' у Вас перебор с 1 до RecordCount
temp = Sheet.Range("a" & CInt(i)) '' Присваиваем временной переменной текущее значение фамилии
priznak = False
For j = 1 To UBound(fam) ''просматриваем наш массив фамилий
If temp = fam(j) Then priznak = True '' если есть сравение, то переключаем признак
Next j
If Not priznak Then ''Если сравнений нет, то добавляем запись в массив фамилий
kol = kol + 1
ReDim Preserve fam(kol)
fam(kol) = temp
End If
Next i
Sheet.Range("b1") = kol ''количество фамилий
End Sub
Неизвестный
10.11.2008, 19:02
общий
это ответ
Здравствуйте, Alex Morozov!
для подсчета количества записей отображаемых формой, в качестве источника данных поля отображающего количество, используйте: =Count(*)
Либо воспользуйтесь собственной, подобной функцией:
Код:
Function countRec()
countRec = Me.Recordset.RecordCount
End Function
и тогда значение в поле можно будет получить: =countRec()
Евгений.
Неизвестный
10.11.2008, 19:16
общий
To Шичко Игорь.
Здравствуйте Игорь,
в Вашем коде присутствует строка:
Код:
Dim i, j, kol As Integer
такой способ объявления переменных в VB6 (VBA) не корректен.
декларированные переменные i и j имеют тип [b]Variant[/b]
явное указание типа требуется всем переменным в строке:
Dim i As Integer, j As Integer, kol As Integer
или
Dim i%, j%, kol%
Евгений.

Неизвестный
11.11.2008, 07:27
общий
to Тесленко Евгений Алексеевич
Спасибо. Иногда забываю, переключаясь ч Delphi на VBA.
Век живи - век учись.
Неизвестный
11.11.2008, 10:12
общий
Здравствуйте Alex Morozov.
даже если "если внимательнее прочитать", слова:
"...отобразить на форме среднее значение...отображает фамилию работника и сумму зарплаты....данные по количеству людей получит не могу..."
неоднозначно понять нельзя.
Вы очевидно подразумевали "Среднее значение по фамилиям", для решения такой задачи потребуется применение подобного запроса:
Код:
SELECT ФамилияРаботника, Avg([СуммаЗарплаты]) 
FROM [сложный перекрестный запрос]
GROUP BY ФамилияРаботника;
использование поля "фамилия" в качестве идентификатора записи - такой подход неверный(!), т.к. может привести к проблемам неоднозначности.
Евгений.
Неизвестный
11.11.2008, 21:17
общий
to Тесленко Евгений Алексеевич
Вы процитировали именно то, что я и хотел сказать: именно количество людей. Ведь это совпадает с количеством фамилий. Во всяком случае в моем списке. Я думал всё просто: Ивановых 5, Петровых 2, Сидоровых 3; значений 10, а людей (или фамилий) 3. Вот это значения я и хотел бы получить. "Среднее значение по фамилиям" здесь вообще не клеится.

В любом случае, огромное Вам спасибо за участие!
Форма ответа