2017-01-11 7 views
-1

Я учитель и пытаюсь создать лист с меткой, проблема заключается в том, что присвоения отмечены с использованием разных схем (например,% [1 - 100], уровня [1-4], буквы [F - A]). Проблема заключается в том, что я хочу только сообщать об использовании одной схемы маркировки и нуждаться в преобразовании или вычислении других схем маркировки, основанных на схеме, там она отмечена.Excel - вычисление нескольких ячеек

Я сделал таблицу Excel, содержащую имена и задания учеников. Затем в листе есть еще 3 столбца, каждый из которых представляет каждую схему «Письмо», «Уровень», Процент столбца для каждой схемы. Теперь в любой момент времени в одном из столбцов «схемы» будет значение - мне нужно, чтобы Excel или автоматически вычислил соответствующее значение в других ячейках.

Например, есть три присвоения, каждый из которых имеет разную схему на одном листе.

Assignment 1 - % 
Assignment 2 - Level 
Assignment 3 - Letter Grade 

Как я могу получить Excel, чтобы проверить, что существует значение метки, а затем заполнить/вычислить две другие соответствующие значения.

Mike получил 80% (%) от Assignment 1, но я хочу, чтобы excel заполнил столбцы столбцов и столбцов уровня соответствующими значениями одновременно. Уровень 3 в Assignment 2 превосходит для вычисления соответствующих процентов и букв и на В то же время для буквы А по назначению 3 должны быть рассчитаны соответствующие% и уровень.

Не знаю, возможно ли это или имеет смысл, но я пробовал VLOOKUP и не был успешным, потому что я должен делать все это вручную - я нацелен на автоматизированный процесс.

Извините, если это непонятно или смущает ... но я был в этом в течение двух дней без везения и даже не уверен, что то, что я делаю, возможно.

ответ

0

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

один из возможных подходов может быть следующим:

Option Explicit 

Sub main() 
    Dim grades As Variant, levels As Variant 
    Dim cell As Range 
    Dim index As Double 

    grades = Array("F", "E", "D", "C", "B", "A") 
    levels = Array(1, 2, 3, 4) 

    For Each cell In Intersect(Range("A:C"), ActiveSheet.UsedRange).Offset(1).SpecialCells(xlCellTypeConstants) 
     Select Case cell.Column 
      Case 1 '% 
       index = cell.value/100 
       cell.Offset(, 1).value = GetRate(index, levels) 
       cell.Offset(, 2).value = GetRate(index, grades) 
      Case 2 ' Level 
       index = InStr(Join(levels, ""), cell.value)/Len(Join(levels, "")) 
       cell.Offset(, -1).value = index * 100 
       cell.Offset(, 1).value = GetRate(index, grades) 
      Case 3 
       index = InStr(Join(grades, ""), cell.value)/Len(Join(grades, "")) 
       cell.Offset(, -2).value = index * 100 
       cell.Offset(, -1).value = GetRate(index, levels) 
     End Select 
    Next 
End Sub 

Function GetRate(index As Double, rates As Variant) 
    GetRate = rates(WorksheetFunction.Max(Round(index * (UBound(rates) - LBound(rates) + 1), 0) - 1, 0)) 
End Function 

благодаря простоте алгоритма перевода он не обеспечивает биективные отношения между сортировочными системами с различными пролетами, но вы можете получить ближе к цели

+0

[здесь] (http://stackoverflow.com/questions/41612730/why-variable-is-not-accessed-inside-a-case-statement-in-excel-vba/41613112#41613112) вы можете принять вдохновение для «алгоритмов перевода» – user3598756

+0

Спасибо за руководство, я постараюсь посмотреть, что я могу придумать. – Syngh

+0

добро пожаловать – user3598756

0

Создайте таблицу так (вы можете добавить больше строк, если вам нужно определить +/- оценки типа «B +» и т. Д.). Ключ здесь сортирует таблицу по возрастанию на%, при этом каждая строка имеет минимум баллов, необходимых для соответствующего уровня/грамотности.

enter image description here

Затем вы можете использовать VLOOKUP формулу к этой таблице, как и получить уровень:

=VLOOKUP(F2,$A$1:$C$7,2,TRUE) 

И вот так, чтобы получить письмо Оценка:

=VLOOKUP(F2,$A$1:$C$7,3,TRUE) 

enter image description here

Это относится к ntage параметра True в функции VLOOKUP, которая вернет приблизительное соответствие (и предполагает, что данные сортируются по возрастанию). Итак, когда вы вводите значение типа «81%», оно возвращает ближайшую строку, которая равна не более 81%, поэтому она вернет данные из строки 5. Аналогично, 12% вернут данные из строки 2, 75% из строки 4 и т.д.

и ваши результаты:

enter image description here

Вам может понадобиться использовать два таблицы, если вы не можете 1: 1 карта уровня/буквенную в процентах подряд , но идея была бы такой же.

+0

Спасибо за ответ, я продолжаю искать ответы на Google и попробовать разные вещи. Я знаю, что есть способ сделать это в Excel, и я решил сделать это. В конце концов, я думаю, что это может идти по пути базы данных доступа, но я хочу, чтобы все было просто, поскольку мои навыки кодирования не самые большие. – Syngh

+0

@Syngh делает вышеуказанный подход * не работает * для вас? Если нет, можете ли вы уточнить (пересмотреть свой первоначальный вопрос с новой/релевантной информацией)? Это должно работать и не требует * никакого программирования * VBA ... –

+0

спасибо за код Дэвид, мой основной вопрос, который я пытаюсь решить для этого (и снова мне жаль, если я не сформулирую его очень хорошо). Мне нужно Excel, чтобы автоматически смотреть на ячейки в 3 разных столбцах - как только он видит «метку» в одной из этих ячеек, мне нужно, чтобы она автоматически заполняла соответствующее значение в две другие ячейки. VLookup работает, но мне нужно вставить формулу в правильные строки, я надеюсь сделать это на более высоком уровне, где мне не нужен VLookup как fx в ячейке, и просто запустите скрипт для выполнения Результаты. – Syngh

Смежные вопросы