Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 将单元格值与每列进行比较';s平均值_Loops_Excel_Vba - Fatal编程技术网

Loops 将单元格值与每列进行比较';s平均值

Loops 将单元格值与每列进行比较';s平均值,loops,excel,vba,Loops,Excel,Vba,我正在尝试用vba为excel编写代码。每个月都有一个值列表,每个月在单独的列中列出,每个月下面列出多个值 我想做的是改变每个单元格的颜色,它的值比这个月的平均值小4倍。到目前为止,我的代码看起来是这样的,每个平均值都是按照我想要的方式计算的,但我似乎不知道如何让它只与一列的平均值进行比较,而不是像现在这样连续地与所有单元格进行比较 Sub MonthAverage() Dim Data As Variant Set Data = Selection Dim rows A

我正在尝试用vba为excel编写代码。每个月都有一个值列表,每个月在单独的列中列出,每个月下面列出多个值

我想做的是改变每个单元格的颜色,它的值比这个月的平均值小4倍。到目前为止,我的代码看起来是这样的,每个平均值都是按照我想要的方式计算的,但我似乎不知道如何让它只与一列的平均值进行比较,而不是像现在这样连续地与所有单元格进行比较

Sub MonthAverage()
    Dim Data As Variant
    Set Data = Selection
    Dim rows As Integer
    Dim columns As Integer

    rows = Data.rows.Count
    columns = Data.columns.Count

    Dim average As Double

    For j = 1 To columns
        average = 0#

        For i = 1 To rows
            average = average + Data.Cells(i, j)
        Next

        average = average / rows

        For Each cell In Data.Cells
            If cell.Value <= average / 4 Then cell.Interior.Color = RGB(0, 0, 255)
        Next

        MsgBox average 'just to make sure I got the averages correctly
    Next
End Sub
Sub-MonthAverage()
作为变量的Dim数据
设置数据=选择
将行设置为整数
将列设置为整数
行=Data.rows.Count
columns=Data.columns.Count
将平均值调整为双精度
对于j=1到列
平均值=0#
对于i=1到行
平均值=平均值+数据。单元格(i,j)
下一个
平均=平均/行
对于Data.Cells中的每个单元格

如果cell.Value我已经修改了您的代码,使其在
ActiveSheet
上工作,而不是在当前选择的
上工作。此代码循环遍历
ActiveSheet
中的每一列,并为每个小于平均值四倍的单元格设置颜色格式

Sub MonthAverageV2()
    Dim ws As Worksheet
    Dim ThresholdVal As Double
    Dim i As Integer
    Dim j As Integer
    Dim r As Integer

    Set ws = ActiveSheet

    'Loop columns
    For i = 1 To ws.Cells(1, ws.columns.Count).End(xlToLeft).Column
        r = ws.Cells(ws.rows.Count, i).End(xlUp).Row
        'Column average
        ThresholdVal = Application.WorksheetFunction.average(ws.Range(ws.Cells(2, i).Address & ":" & ws.Cells(r, i).Address)) * 0.25
        Debug.Print ThresholdVal
        'Loop rows
        For j = 2 To r
            If ws.Cells(j, i).Value < ThresholdVal Then
                ws.Cells(j, i).Interior.Color = RGB(0, 0, 255)
            End If
        Next j
    Next i
End Sub
Sub-MonthAverageV2()
将ws设置为工作表
模糊阈值为双阈值
作为整数的Dim i
作为整数的Dim j
作为整数的Dim r
设置ws=ActiveSheet
'循环列
对于i=1到ws.Cells(1,ws.columns.Count).End(xlToLeft.Column)
r=ws.Cells(ws.rows.Count,i).End(xlUp).Row
'列平均值
ThresholdVal=Application.WorksheetFunction.average(ws.Range(ws.Cells(2,i).Address&“:”&ws.Cells(r,i.Address))*0.25
调试.打印ThresholdVal
'循环行
对于j=2到r
如果ws.Cells(j,i).Value

此外,我还使用
Application.WorksheetFunction.average
计算每列的平均值。

我的2美分有点离题了。这就是透视表的典型用途。你们可以,我想说的是,也应该,仅仅使用条件格式和一个平均公式。不需要VBA。我承认,这对我来说肯定会更快更容易,但是我正在寻找一种用VBA实现的方法。谢谢你的回答,但是,如果我在excel表格最左边的列中列出了姓名,这能起作用吗?(这基本上是一个结果表,每个名字每个月有一个值)正如你所看到的,我的编码不是很流利,你能告诉我,使用我应用的方法是否可以让它工作,或者说它不是正确的选择吗?啊,我想我得到了第一部分,如果您想跳过第一列,则i=2Yes,只需从
i=2
运行循环即可。