Страницы: 1
RSS
Проверка ячеек по нескольким условиям
 
Существует необходимость проверить тест. Для этого необходимо сравнить содержимое одной ячейки с содержимым другой ячейки и в зависимости от варианта засчитать как правильный или неправильный ответ (0 или 1). Эту формулу я прописал.
Код
=ЕСЛИ($A2=1;ЕСЛИ('Ввод ответов'!B2='Матрица ответов'!B$2;"1");"0")+ЕСЛИ($A2=2;ЕСЛИ('Ввод ответов'!B2='Матрица ответов'!B$3;"1");"0")
Но теперь мне нужно прописать такую формулу, которая могла бы проверить задания с несколькими ответами. Задание считается выполненным, если правильно выбраны два варианта ответа и оценится в таком случае задание в 2 балла. За неполный ответ - правильно назван один из двух ответов или названы три ответа, из которых два верные, - выставляется 1 балл. Остальные варианты оценятся в 0. Все ответы даются в цифрах. Если есть решение этой проблемы, прошу помочь!
Изменено: vasek007 - 18.11.2016 20:31:43
 
Здравствуйте, vasek007,  "решение этой проблемы" наверняка есть, если проблему понятно описать.
Цитата
vasek007 написал:
За неполный ответ - правильно назван один из двух ответов или названы три ответа, из которых два верные,
В каком случае и как выбирать - один из двух или два из трех?
 
Я нифига не понял как понять два там верных ответа, только один ответ верный или все три верные
 
Пример: правильный ответ 34, ответ 43 тоже верный и оцениваются такие ответы в 2 балла. Ответы типа 13, 31, 32, 23, 53, 35, 42, 24, 45, 54 - где даны два ответа (две цифры), но правильный из них только один (там где встречаются цифры 3 или 4) и оцениваются такие ответы в 1 балл. Ответы типа 345, 435, 534, 341, 143, 431, 413, 453, 354 и т.д. (три цифры из которых обязательно встречаются цифры 3 и 4) тоже оцениваются в 1 балл. Положение цифры в числе не имеет значения, главное, чтобы она там была. Ответ, где указана лишь одна цифра 3 или 4 тоже верный и оценивается в 1 балл. Ответы типа 1234, 2345 и т.д., где 4 цифры и более оцениваются в 0 баллов в независимости от того, есть ли там цифры 3 и 4.
 
В код листа "Протокол":
Код
Private Sub Worksheet_Activate()
arrV = Sheets(1).[a1:d3]: arrM = Sheets(2).[a1:d3]
For i = 2 To 3
  For j = 2 To 4
  s = 0
    If Len(arrV(i, j)) < 4 Then
      For h = 1 To Len(arrV(i, j))
      If CStr(arrM(i, j)) Like "*" & Mid(arrV(i, j), h, 1) & "*" Then s = s + 1
      Next h
    End If
  Cells(i, j) = s
  Next j: Next i
End Sub
 
Кнопка цитирования не для ответа [МОДЕРАТОР]

Спасибо за отклик, НО:
Макрос считает ответ 123 (и подобные ответы) в 1 балл, хотя должен считать в 0 баллов, так как совпадений одно из трех (правильный ответ 34). Ответ 345 также должен считаться в 1 балл, а считается в 2 балла.
Может возможно подкорректировать данный макрос, я, к сожалению, не умею работать с макросами
 
Код
Option Explicit
Sub qwe()
Dim a$, b$, i%, ii%, iii%, summ%
For i = 2 To 4
    For ii = 2 To 3
        a = CStr(Sheets(2).Cells(ii, i).Value)
        b = CStr(Sheets(1).Cells(ii, i).Value)
            For iii = 1 To Len(b)
                If InStr(1, a, Mid(b, iii, 1)) Then summ = summ + 1 Else summ = summ - 1
            Next iii
            If summ < 0 Then summ = 0
            Sheets(3).Cells(ii, i).Value = summ
            summ = 0
    Next ii
Next i
End Sub
 
Большое спасибо!!! Все работает как надо!

НО: нет связи с вариантами...Т.е. должна быть связь номера варианта на стр. "ВВОД ОТВЕТОВ" с "МАТРИЦОЙ ОТВЕТОВ". Например, на странице "ВВОД ОТВЕТОВ" в ячейке А2 или A3 может стоять как первый, так и второй вариант, а может там и там только первый, а может там и там только второй. Необходимо, чтобы макрос срабатывал в зависимости от вариантов прописанных в этих ячейках.

Если есть возможность, помогите подкорректировать макрос.

И еще... извините, конечно, за наглость, хотелось бы, чтобы диапазон проверки был шире, так как страница ВВОД ОТВЕТОВ может содержать ответы до 30 участников, а вариантов в МАТРИЦЕ ОТВЕТОВ (с чем сравниваем все ячейки с ВВОД ОТВЕТОВ) допустим только два.
Изменено: vasek007 - 18.11.2016 19:51:05
 
Это все потому,  что условие задачи какое-то мутное. Что вам стоило сделать нормальный файл пример? Вы же просто скопировали одну таблицу три раза. сделали бы нормальную таблицу с тремя отвечающими первого варианта и тремя второго. Ответы правильные и не правильные, двойные и нет. Но вам видимо некогда было это делать и вы предоставили честь разбираться с задачей нам самим. я только сейчас например получил уверенность что варианты это столбец а не строка. Раньше же мог только гадать.
 
Извиняюсь, конечно должен был более четко поставить задачу. Исправления в файле.
Изменено: vasek007 - 18.11.2016 20:07:14
 
Только завтра
 
Спасибо за отклик и терпение! Буду искренне благодарен за помощь!
 
Если тема еще актуальна завтра как вернусь с вахты сделаю
 
Тема очень актуальна! Я с нетерпением жду вашего ответа! Начал изучать VBA, интересно, но сложно. Сам не решу...
 
Код
Sub qwe()
Dim kolvo_otv%, kolvo_zad%
kolvo_otv = InputBox("Введите количество отвечающих")
kolvo_zad = InputBox("Введите количество заданий")


For i = 1 To kolvo_otv

'заполнение массивов
    fst = Sheets(1).Range(Sheets(1).Cells(i + 2, 3), Sheets(1).Cells(i + 2, kolvo_zad + 2))
        If Sheets(1).Cells(i + 2, 2) = 1 Then
            snd = Sheets(2).Range(Sheets(2).Cells(3, 2), Sheets(2).Cells(3, kolvo_zad + 1))
        Else
            snd = Sheets(2).Range(Sheets(2).Cells(4, 2), Sheets(2).Cells(4, kolvo_zad + 1))
        End If
'конец заполнения массивов

matr = fst 'инициализация массива оценок

'проверка ответов
For ii = 1 To UBound(fst, 2)
otvet = CStr(fst(1, ii))
proverka = CStr(snd(1, ii))
    
    For iii = 1 To Len(otvet)
        If InStr(1, proverka, Mid(otvet, iii, 1)) Then summ = summ + 1 Else summ = summ - 1
    Next iii
    
    If summ < 0 Then summ = 0
    matr(1, ii) = summ
    summ = 0
            
Next ii
'конец проверки ответов

'заполнение протокола
Sheets(3).Cells(i + 2, 1) = Sheets(1).Cells(i + 2, 1)
Sheets(3).Cells(i + 2, 2) = Sheets(1).Cells(i + 2, 2)
Sheets(3).Range("C" & i + 2).Resize(1, UBound(fst, 2)) = matr
'конец заполнение протокола

Next i
End Sub
 
ОГРОМНОЕ, ПРОСТО БОЛЬШУЩЕЕ СПАСИБО!!!
 
работает?
 
Сегодня обязательно протестирую! Попробую внедрить в нужную книгу.  
Страницы: 1
Читают тему
Наверх