如果单元格匹配任一列中的单元格返回相邻单元格文本
问题描述:
所以我有一个Excel电子表格应该可以跟踪成绩,但我似乎无法从字母成绩转换为数字成绩。我试图将I21:I48中的单元格与G10中的参考字母等级匹配:G15和I10:I15,然后将G21:G48替换为相应的数字等级。如果单元格匹配任一列中的单元格返回相邻单元格文本
下面是布置成两排为漂亮的格式,它是硬的原因之一的转化细胞:对细胞
<G> <H> <I> <J>
<10> A 4.0 C 2.0
<11> A- 3.7 C- 1.7
<12> B+ 3.3 D 1.0
<13> B 3.0 F 0.0
<14> B- 2.7 NA 0.0
<15> C+ 2.3 I 0.0
下面是一些例子的数据单元,以[FILL]填写:
<G> <H> <I>
<20> GRADE TERM Letter Grade
<21> [FILL] Term 3 A
<22> [FILL] Term 3 A-
<23> [FILL] Term 3 A
<24> [FILL] Term 3 A
<25> [FILL] Term 3 A
<26> [FILL] Term 3 C
<27> [FILL] Term 2 B
<28> [FILL] Term 2 A
...
<48> [FILL] Term 1 A
下面是同一张图应该是什么样子填写,使用字母等级列来匹配上面的转换表:
<G> <H> <I>
<20> GRADE TERM Letter Grade
<21> 4.0 Term 3 A
<22> 3.7 Term 3 A-
<23> 4.0 Term 3 A
<24> 4.0 Term 3 A
<25> 4.0 Term 3 A
<26> 2.0 Term 3 C
<27> 3.0 Term 2 B
<28> 4.0 Term 2 A
...
<48> 4.0 Term 1 A
答
=IFERROR(IFERROR(VLOOKUP(I21,$G$10:$H$15,2,FALSE),VLOOKUP(I21,$I$10:$J$15,2,FALSE)),"???")
在G21中粘贴并填充它应该可以做到。
如果你的表是完全顺序的,那么这会更容易一些,并且需要更少的嵌套,而不是将它分成四列而不是两列。我有第二个IFERROR来显示???
只是在列I中的项目实际上不在表格中,需要手动调查。
答
此做一个简单的VLOOKUP()工作,但它不是一个工作表解决方案。基本上在预定义的列中循环遍历每个字母等级,并将答案吐出你告诉它的地方。
Private Sub gradeconversion()
Dim rNg As Range
Dim rCell As Range
Dim vAr As Double
Set rNg = ActiveSheet.Range("i1:i100")
For Each rCell In rNg.Cells
If rCell.Value <> vbNullString Or rCell.Value <> "" Then
Select Case rCell
Case Is = "A"
vAr = 4
Case Is = "A-"
vAr = 3.7
Case Is = "B+"
vAr = 3.3
Case Is = "B"
vAr = 3
Case Is = "B-"
vAr = 2.7
Case Is = "C+"
vAr = 2.3
Case Is = "C"
vAr = 2
Case Is = "C-"
vAr = 1.7
Case Is = "D"
vAr = 1
Case Else
vAr = 0
End Select
rCell.Offset(0, -2).Value = vAr
End If
Next rCell
End Sub
它不是最漂亮的代码,但它适用于你所需要的。
它不是很清楚你后面的东西。把它分解多一点? –
两个VLOOKUP()(每列一个),使用IFERROR()在不匹配时返回空白 –
@DougCoats上面的第一个表格是一个转换图表,字母等级为数字等级,其中A为4.0,B +为到3.7等。使用该表格,将第二个表格的“成绩”列中的每个元素替换为对应于“字母成绩”列中的条目的数字成绩,得到第三个表格 – TheEnvironmentalist