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

Функция оценки уровня

07.07.2019, 13:40. Показов 3907. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, задача простая и придумал как решить... не соображу как сделать....Прошу помочь. Анкета

если в диапазоне одного уровня (1 столбец) есть ответ "n"(4 столбец), то результат на уровень меньше....

в примере единственная "n" на уровне 3.....значит результат будет "уровень 2


пишу функцию (в файле)
в цикле ищет диапазоны с одинаковым уровнем и в диапазоне проверка ячеек на ответ "n". если он есть, то результат Уровень -1 и конец

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
Function xxx(rng As Range)
    
    a = ActiveCell.Row - 1
    b = rng.End(xlToRight).Row
    
    For i = rng.End(xlToRight).Row To ActiveCell.Row - 1 Step 2
        ' формируем диапазон одного уровня
        If ActiveSheet.Cells(i - 2, 1) = ActiveSheet.Cells(i, 1) Then x = x + 1
        'пробывал Resize, не понял как использовать
        Set rn = ActiveSheet.Range(ActiveSheet.Cells(i - 2, 1), ActiveSheet.Cells(i + x, 1))
        'пробывал Resize, не понял как использовать, но нужно наверное его
        rn.Select
        row1 = rn.Cells(1).Row
        row2 = rn.Cells(Selection.Cells.Count).Row
        
        ' ищем в диапазоне ответ "n"
        For Each rn In rng.Cells
            If rn.Cells(1, 1) = "n" Then xxx = ' то результат УРОВЕНЬ -1
            Exit Function
            End If
        Next
    Next
End Function
Миниатюры
Функция оценки уровня  
Вложения
Тип файла: zip Книга1.zip (15.3 Кб, 3 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.07.2019, 13:40
Ответы с готовыми решениями:

Функция оценки персонала
Ребят,pashulka, надо функцию придумать, которая по табличным данным присваивает класс человеку(разряд)... пример приложил. Посмотрите...

Функция IIf: студенты и оценки(прописью)
нужно создать базу данных где будет всего 5 столбцов. 1) студент 2)химия оценка 3)физика оценка 4)математика оценка 5) итоги за...

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

42
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
10.01.2020, 10:19
Студворк — интернет-сервис помощи студентам
mor_sergey, Зачем обращаться ко мне персонально, если Вы игнорируете мой вопрос.
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
10.01.2020, 12:25  [ТС]
pashulka, E9 L1. вручную писал..ошибся на строку. Прошу прощения....вот посчитать все группы нужно и выдать максимальный результат...казалось бы не сложно, а как не знаю
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
10.01.2020, 12:48
Альтернативный вариант. Если разделы всегда содержат по 11 строк, то можно просто перебирать по 11 строк.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Function getLevel2$(r As Range)
   Dim ws As Worksheet, c As Range, a$, t$, i&, m&, l
   Set ws = r.Worksheet
   Set r = r.Offset(, -2): Set c = r(1, 1).MergeArea
   For i = 1 To Application.CountA(r)
       a = Replace(c.Address, "C", "E")
       l = Application.Match("n", ws.Range(a), 0)
       If Not IsError(l) Then
          t = c(l, 0).MergeArea(1, 1)
          l = Val(Mid(t, 2)) - 1
          m = Application.Max(m, l)
       End If
       Set c = c.Offset(1).MergeArea
    Next
    getLevel2 = "L" & l
End Function
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
10.01.2020, 13:28  [ТС]
pashulka, огромное спасибо. разбираюсь. подстраиваю
0
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
10.01.2020, 14:34  [ТС]
pashulka, перенес мою таблицу с такими же координатами. немного не так считает. посмотрите пожалуйста
Вложения
Тип файла: zip 2 (2).zip (16.3 Кб, 2 просмотров)
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
10.01.2020, 15:37
Считает всё правильно. А возвращает последний уровень ибо максимум это m, а не l

Visual Basic
1
getLevel2 = "L" & m

Повторюсь, но при одинаковом количестве вопросов во всех заданиях, можно :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Function getLevel3$(r As Range)
   Dim i&, t$, m&, l
   For i = 1 To r.Rows.Count Step 11
       l = Application.Match("n", r(i).Resize(11), 0)
       If Not IsError(l) Then
          t = Mid(r(l, -3).MergeArea(1, 1), 2)
          l = Val(t) - 1:  If l > m Then m = l
       End If
    Next
    getLevel3 = "L" & m
End Function
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
10.01.2020, 16:13  [ТС]
pashulka, количество вопросов разное..
формула работает, но не совсем....в примере большинство разделов Л4....а пишет не так
Вложения
Тип файла: zip 3.zip (16.6 Кб, 4 просмотров)
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
10.01.2020, 17:37
В чём якобы не совсем корректный результат ? Если функция возвращает L3 и этот результат Вы и требуете (см.ячейку H94)

И да, L4 - 1 = L3
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
10.01.2020, 18:22  [ТС]
pashulka, столбец H это старое....я в новом файле ответы менял...по такому раскладу должно быть L4. ведь почти все ответы Y. и m тоже 4 должна быть..максимальное

Добавлено через 11 минут
если все ответы сделать Y, результат L0...даже если поставить где нибудь N, все равно должно быть L4. максмальный ведь
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
10.01.2020, 19:09
Если N нет, будет 0. А касательно 4го уровня, в третий раз повторяю, Вы зачем-то уменьшаете уровень на 1, поэтому при 4м уровне результат будет 3. Если не устраивает, правьте код.
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
10.01.2020, 19:31  [ТС]
pashulka, это вы очень правильно придумали...про -1. цель функции показать оценочный уровень. ответы на который Y..и когда первая N, уровень оискакивает назад и все замечательно работает...а тут надо зациклить этот ппоцесс на количество разделов...и максимальный результат написать
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
10.01.2020, 20:18
mor_sergey, моего в этой минусовке ничего нет. в общем, если откажитесь от -1, получите 4
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
10.01.2020, 20:33  [ТС]
pashulka, и без вычета получается не верно. в чате в цепочке ваш ник....подумал вы и автор.
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
10.01.2020, 20:49
Зачем мешать всё в кучу, автор я, а требование минусовки, наличествует в самом первом сообщении, цитирую

Цитата Сообщение от mor_sergey Посмотреть сообщение
If rn.Cells(1, 1) = "n" Then xxx = ' то результат УРОВЕНЬ -1
Что касается, якобы неверных рассчётов, то это даже не смешно, вот скриншот файла из сообщения27, где Вы требуете L3, функция возвращает L3, но ...
Миниатюры
Функция оценки уровня  
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
11.01.2020, 11:07  [ТС]
pashulka, Да. простите, был не прав. тогда как мне сделать, чтобы если весь диапазон раздела Y, то ответ L4
код ниже не работает.

Visual Basic
1
If ws.Range(a) = "Y" Then getLevel2 = "L4": Exit Function
-1 не уберешь.
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
11.01.2020, 12:41
Visual Basic
1
2
3
4
5
6
If Not IsError(l) Then
   t = Mid(r(l, -3).MergeArea(1, 1), 2)
   l = Val(t) - 1:  If l > m Then m = l
Else
   m = 3 '4
End If
И если это максимально возможный уровень, то либо Exit For, либо сразу присваиваете нужное значение и Exit Function
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
11.01.2020, 18:58  [ТС]
pashulka, заменил условие. на строке 2 вылетает.
что-то я делаю не так..может код целиком пришлете

Добавлено через 3 часа 45 минут
pashulka, все получилось....Спасибо
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Function getLevel2$(r As Range)
   Dim ws As Worksheet, c As Range, a$, t$, i&, m&, l
   Set ws = r.Worksheet
   Set r = r.Offset(, -3): Set c = r(1, 1).MergeArea
   For i = 1 To Application.CountA(r)
       a = Replace(c.Address, "C", "F")
       l = Application.Match("n", ws.Range(a), 0)
       If Not IsError(l) Then
          t = c(l, 0).MergeArea(1, 1)
          l = Val(Mid(t, 2)) - 1
          m = Application.Max(m, l)
          Else
            m = 4: Exit For
       End If
       Set c = c.Offset(1).MergeArea
    Next
    getLevel2 = "L" & m
End Function
Добавлено через 1 час 52 минуты
pashulka, простите пожалуйста за наглость. но если ошибка и действует else, действие только одно....
рассматривали если все Y....но и если все N, тоже ошибка, и как сделать на нее условие? т.е. если хотя бы один раздел без ответов(все N), результат должен быть L0...А еще N/A-пропуск вопроса
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
11.01.2020, 22:43
mor_sergey, Так напишите все требования, а не вбрасывайте их по частям.
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
11.01.2020, 22:50  [ТС]
pashulka, это все....думал сам докручу...а тут не получается.
1 пропуск вопроса если N/A
2 если хотя бы один раздел N(без ответов), по умолчанию все вопросы N, то L0
3 если хотя бы один раздел Y (макс), то L4
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
12.01.2020, 00:38
явно видно, что не все, т.к. может быть в одной таблице один раздел без ответов (2) и один раздел только с ответами (3)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.01.2020, 00:38

Целевая функция для оценки равномерности расстановки двух видов точек
Есть два вида точек на плоскости: добывающие скважины и нагнетательные скважины. Т.е. у каждой точки есть три свойства: координата Х,...

Определить количество дней, в которых оценки меньше средней оценки по классу
в массиве записаны оценки по информатике 22 учеников класса. Определить количество дней, в которых меньше средней оценки по классу, и...

Однозначное отделение (классификация) оборудования уровня ядра/аггрегации от уровня доступа
Всем привет. Возник такой вопрос: можно ли по функциям или по железу понять уровень железки (ядра, аггрегации, доступа). Или это всё...

Как отсортировать элементы 1 уровня многомерного массива по значениям 2 уровня?
Доброе время суток. Есть массив фруктов, у каждого элемента есть название и цена. $arr = array( array( 'name' => 'banana', ...

Как выбрать элемент 1 уровня многомерного массива по значениям 2 уровня?
Доброе время суток. Есть массив фруктов, у каждого элемента есть название и цена. $arr = array( array( 'name' =>...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru