用于excel中的循环(与bash等效)

用于excel中的循环(与bash等效),excel,excel-formula,vba,Excel,Excel Formula,Vba,我正在使用excel中的一个大型数据库。我必须计算特定单元格的平均分数。但是,单元格中的数值和单元格中的数值(我指的是A4、D5等)与计算分数所需的数值不一致。到目前为止,我一直在使用这样的东西: =(sum(if(A1=1,3,IF(A1=2,2,IF(A1=3,1,IF(A1=4,0,"NA")))))+ +IF(F1=1,2,IF((F=2,2,IF(F=3,1,IF(F=4,0,"NA")))))+IF(.... 等等。其中包含1的单元格对总分的贡献率为3,包含2-2的单元格,包含3比

我正在使用excel中的一个大型数据库。我必须计算特定单元格的平均分数。但是,单元格中的数值和单元格中的数值(我指的是A4、D5等)与计算分数所需的数值不一致。到目前为止,我一直在使用这样的东西:

=(sum(if(A1=1,3,IF(A1=2,2,IF(A1=3,1,IF(A1=4,0,"NA")))))+
+IF(F1=1,2,IF((F=2,2,IF(F=3,1,IF(F=4,0,"NA")))))+IF(....
等等。其中包含1的单元格对总分的贡献率为3,包含2-2的单元格,包含3比1的单元格等

然而,我相信应该有一种更快更干净的计算方法。有没有一种方法可以在excel中使用与下面类似的结构

for A1,AB1,AC1...[the desired cells); do; 
 if $column=1,3
 if $column=3,1
 if $column=4,0 ; done
提前谢谢你的帮助

最好的, R

您需要一个。。。下一个循环遍历您尝试迭代的单元格,并使用条件逻辑根据值分配分数。对于非连续的单元格(如现有单元格),循环有点棘手

我将创建一个带分隔符的字符串,然后使用Split函数将其转换为一个数组,您可以在该数组上进行迭代,分配给一个Range对象来表示迭代中的每个单元格

Dim cellsList as String
Dim cells as Variant
Dim c as Variant
Dim cl as Range
Dim score as Integer
Dim totalScore as Integer
Dim naCount as Integer
cellsList = "A1,AB1,AC1" 'Modify as needed

'convert delimited string to an array:
cells = Split(cellsList, ",")
For each c in cells
    Set cl = Range(c)
    Select Case cl.Value
        Case 1
            score = 3
        Case 2
            naCount = naCount + 1 'keep track of these since they will not be included in the mean score
        Case 3
            score = 1
        Case 4
            score = 0
    End Select

    totalScore = totalScore + score
Next
'Display the average score:
MsgBox totalScore / ((UBound(cells) + 1) - naCount)
如果只想使用EXCEL,则分数类似于4值: 为要添加的选定单元格创建名称(无需在…附近添加)。。。。样本xx。 在单元格中插入公式:

=4*COUNT(xx)-SUM(xx)