2017-01-11 310 views
-1

我是一名教師,並試圖創建一個標記表我遇到的問題是,作業使用不同的方案標記(即%[1 - 100],級別[1 -4],字母等級[F A])。我遇到的問題是,我只想使用一種標記方案進行報告,並需要根據標記方案轉換或計算其他標記方案。Excel - 多單元格計算

我做了一個包含學生姓名和作業的Excel工作表。然後該表格還有3個其他列,分別代表每個方案「Letter」,「Level」,每個方案的列的百分比。現在,在任何給定的時間裏,'方案'列中的一個將會有一個值 - 我需要excel自動或通過宏計算適當的值到其他單元格中。

例如,有三個分配,每個分配在同一張紙上標有不同的方案。

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

如何獲得excel來檢查存在哪個標記值,然後填充/計算另外兩個相應的值。

邁克在作業1中獲得80%(%),但我希望擅長使用相應的值同時填充水平欄和字母欄第2作業的第3級擅長計算相應的百分比和字母,同一時間對於任務3中的字母A,應計算相應的%和水平。

不知道這是可能的還是有意義的,但是我嘗試了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

[here](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 +」等+/-分數,則可以添加更多行)。這裏的關鍵是按照%升序排列表,每行都是相應級別/字母等級所需的最低分數。

​​

然後,您可以使用VLOOKUP公式根據此表,像這樣得到等級:

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

而且像這樣,把信等級:

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

enter image description here

這需要adva在VLOOKUP函數中,參數True的ntage將返回近似匹配(並假定數據按升序排序)。所以,當你輸入一個像「81%」這樣的值時,它返回的最接近的行是81%,所以它會返回第5行的數據。同樣,12%會返回第2行的數據,75%從第4行等

而且結果:

enter image description here

您可能需要使用表,如果你不能1:1點的地圖水平/字母等級百分比列,但這個想法是一樣的。

+0

感謝您的回覆,我繼續在谷歌上搜索答案並嘗試不同的東西。我知道有一種方法可以在Excel中做到這一點,並決心實現這一目標。最終,我認爲這可能會成爲訪問數據庫的途徑,但我現在想保持簡單,因爲我的編碼技能並不是最大的。 – Syngh

+0

@Syngh做了上述的方法*不適用於你?如果沒有,請您詳細說明(用新的/相關信息修改您的原始問題)?這應該工作,並且不需要*任何* VBA編程... –

+0

感謝代碼大衛,我試圖解決的首要問題是這(如果我不明確表達它,我再次抱歉很好)。我需要excel自動查看3個不同列中的單元格 - 一旦它在其中一個單元格中看到「標記」,我需要它自動將相應的值填充到另外兩個單元格中。 VLookup可以工作,但我必須將公式插入到正確的行中,我希望能夠在更高層次上完成,我不需要VLookup作爲單元格中的fx,只需要運行一個腳本來執行結果。 – Syngh