Vba 算数
我想做的是建立一个模型,取一个大于1的单元格,然后用一个圆锥形将面积之和取到第一行,例如单元格D4,求C3:C5+B2:B6+A1:A7的面积之和 目前我有这个,但它显然不起作用Vba 算数,vba,excel,Vba,Excel,我想做的是建立一个模型,取一个大于1的单元格,然后用一个圆锥形将面积之和取到第一行,例如单元格D4,求C3:C5+B2:B6+A1:A7的面积之和 目前我有这个,但它显然不起作用 Dim I As Double Dim J As Double Dim Size As Integer Dim x As Integer Dim y As Integer Dim z As Integer 'Dim Range As Integer Dim
Dim I As Double
Dim J As Double
Dim Size As Integer
Dim x As Integer
Dim y As Integer
Dim z As Integer
'Dim Range As Integer
Dim PV1 As Integer
'MCArray = Worksheets("Data")
I = WorksheetFunction.CountA(Worksheets("Data").Rows(1))
J = WorksheetFunction.CountA(Worksheets("Data").Columns(1))
'Loop to Move down the rows
For x = 1 To J
'Loop to move acoss the columns
For y = 1 To I
'IfElse to determine if cell value is greater or equal to zero
If Cells(J, I).Value >= 0 Then
'Loop to sum the cells above
For z = 1 To J
PV1 = (ActiveCell.Value) + Worksheet.Sum(Range([J - z], [I-z:I+z]))
'IfElse to determine if final sum is greater than zero
If PV1 > 0 Then
Worksheets("MC").Range("B4").Value = PV1
Range([J - z], [I-z:I+z]).Interior.ColourIndex = 1
End If
Next z
End If
Next y
Next x
这里有一个函数,您可以作为UDF使用,也可以从另一个例程使用。只需将要从其开始的单个单元格(示例中为D4)传递给它,此函数将按您所述计算圆锥体的和
Public Function SUMCONE(r As Range) As Double
Application.Volatile
SUMCONE = Application.Sum(r, r(-0, -0).Resize(, 3), r(-1, -1).Resize(, 5), r(-2, -2).Resize(, 7))
End Function
以下是如何从VBA例程中使用上述函数的示例:
Public Sub Demo()
Dim j&
For j = 5 To 10
If Cells(5, j) > 0 Then
Debug.Print SUMCONE(Cells(5, j))
End If
Next
End Sub
更新
根据您的反馈,我已经更新了函数和演示例程,以从初始单元格形成一个向上的圆锥求和
更新#2
上面是一个向上延伸的固定尺寸圆锥体,可以从工作表中的任何单元格启动
但是,如果您希望圆锥始终延伸到第1行,而不管它来自哪个单元格,那么下面是您要了解的内容:
Public Sub Demo()
Dim i&, j&
For j = 1 To Application.CountA(Worksheets("Data").Rows(1))
For i = 1 To Application.CountA(Worksheets("Data").Columns(1))
If Cells(i, j) > 0 Then
Debug.Print Cells(i, j).Address, SumAndColorCone(Cells(i, j))
End If
Next
Next
End Sub
Public Function SumAndColorCone(r As Range) As Double
Dim i&, k&, c As Range
Set c = r
For i = r.Row - 1 To 1 Step -1
Set c = Union(c, r(-k, -k).Resize(, (k + 1) * 2 + 1))
k = k + 1
Next
c.Interior.Color = vbRed
SumAndColorCone = Application.Sum(c)
End Function
更新#3
正如我所怀疑的,如果圆锥体太靠近工作表的左边缘,则会出现问题。我现在添加了代码来处理这个问题。另外,访问大型矩阵的方法(我在演示例程中使用过)也不能正常工作。我也解决了这个问题:
Public Sub Demo()
Dim i&, j&
For j = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
If Val(Cells(i, j)) > 0 Then
Debug.Print Cells(i, j).Address, SumAndColorCone(Cells(i, j))
End If
Next
Next
End Sub
Public Function SumAndColorCone(r As Range) As Double
Dim i&, k&, c As Range
Set c = r
For i = r.Row - 1 To 1 Step -1
If r.Column - k < 2 Then Exit For
Set c = Union(c, r(-k, -k).Resize(, (k + 1) * 2 + 1))
k = k + 1
Next
c.Interior.Color = vbRed
SumAndColorCone = Application.Sum(c)
End Function
公共子演示()
Dim i&j&
对于j=1到单元格(1,Columns.Count).End(xlToLeft).Column
对于i=1到单元格(Rows.Count,“A”).End(xlUp).Row
如果Val(单元格(i,j))>0,则
打印单元格(i,j).地址,SumAndColorCone(单元格(i,j))
如果结束
下一个
下一个
端接头
公共函数SUMANDCORCONE(r为范围)为双色
尺寸i&,k&,c作为范围
设置c=r
对于i=r,第1行到第1步-1
如果r.列-k<2,则退出
设置c=并集(c,r(-k,-k)。调整大小(,(k+1)*2+1))
k=k+1
下一个
c、 内饰。颜色=vbRed
SumAndColorCone=Application.Sum(c)
端函数
这是一个函数,您可以将其用作自定义项,也可以从其他例程使用。只需将要从其开始的单个单元格(示例中为D4)传递给它,此函数将按您所述计算圆锥体的和
Public Function SUMCONE(r As Range) As Double
Application.Volatile
SUMCONE = Application.Sum(r, r(-0, -0).Resize(, 3), r(-1, -1).Resize(, 5), r(-2, -2).Resize(, 7))
End Function
以下是如何从VBA例程中使用上述函数的示例:
Public Sub Demo()
Dim j&
For j = 5 To 10
If Cells(5, j) > 0 Then
Debug.Print SUMCONE(Cells(5, j))
End If
Next
End Sub
更新
根据您的反馈,我已经更新了函数和演示例程,以从初始单元格形成一个向上的圆锥求和
更新#2
上面是一个向上延伸的固定尺寸圆锥体,可以从工作表中的任何单元格启动
但是,如果您希望圆锥始终延伸到第1行,而不管它来自哪个单元格,那么下面是您要了解的内容:
Public Sub Demo()
Dim i&, j&
For j = 1 To Application.CountA(Worksheets("Data").Rows(1))
For i = 1 To Application.CountA(Worksheets("Data").Columns(1))
If Cells(i, j) > 0 Then
Debug.Print Cells(i, j).Address, SumAndColorCone(Cells(i, j))
End If
Next
Next
End Sub
Public Function SumAndColorCone(r As Range) As Double
Dim i&, k&, c As Range
Set c = r
For i = r.Row - 1 To 1 Step -1
Set c = Union(c, r(-k, -k).Resize(, (k + 1) * 2 + 1))
k = k + 1
Next
c.Interior.Color = vbRed
SumAndColorCone = Application.Sum(c)
End Function
更新#3
正如我所怀疑的,如果圆锥体太靠近工作表的左边缘,则会出现问题。我现在添加了代码来处理这个问题。另外,访问大型矩阵的方法(我在演示例程中使用过)也不能正常工作。我也解决了这个问题:
Public Sub Demo()
Dim i&, j&
For j = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
If Val(Cells(i, j)) > 0 Then
Debug.Print Cells(i, j).Address, SumAndColorCone(Cells(i, j))
End If
Next
Next
End Sub
Public Function SumAndColorCone(r As Range) As Double
Dim i&, k&, c As Range
Set c = r
For i = r.Row - 1 To 1 Step -1
If r.Column - k < 2 Then Exit For
Set c = Union(c, r(-k, -k).Resize(, (k + 1) * 2 + 1))
k = k + 1
Next
c.Interior.Color = vbRed
SumAndColorCone = Application.Sum(c)
End Function
公共子演示()
Dim i&j&
对于j=1到单元格(1,Columns.Count).End(xlToLeft).Column
对于i=1到单元格(Rows.Count,“A”).End(xlUp).Row
如果Val(单元格(i,j))>0,则
打印单元格(i,j).地址,SumAndColorCone(单元格(i,j))
如果结束
下一个
下一个
端接头
公共函数SUMANDCORCONE(r为范围)为双色
尺寸i&,k&,c作为范围
设置c=r
对于i=r,第1行到第1步-1
如果r.列-k<2,则退出
设置c=并集(c,r(-k,-k)。调整大小(,(k+1)*2+1))
k=k+1
下一个
c、 内饰。颜色=vbRed
SumAndColorCone=Application.Sum(c)
端函数
PV1=(ActiveCell.Value)+sheet.Sum(范围([J-z],[I-z:I+z])调出对象失败的错误消息范围PV1=(ActiveCell.Value)+sheet.Sum(范围([J-z],[I-z:I+z])调出object FailedTanks的错误消息范围,我希望能够对矩阵中任何值大于0的单元格执行此操作。是否可以在循环或类似情况下使用此函数?只需调用此函数,传递单元格(从矩阵中选择的任何单元格)此函数将计算从该单元格向左延伸的圆锥体的总和。PV1=SUMCONE(范围(“D5”))例如,如果将函数带到AZ行,它会工作吗?或者我必须设置resize和r以适应每一行的这些限制吗?您也说过这是向左求和。我想向上求和到一行。您感到困惑。在Excel中,行是编号的,列是用字母标记的。因此D5表示第四列和第二列相交的单元格第五行。你在这个问题中的描述显然是针对一个向左的圆锥体。是的,它可以在表格上的任何地方使用,只要初始单元格离顶部和左侧足够远,这样就有足够的单元格来形成圆锥体。我可以调整它的方向,使圆锥体向上……你想让我这样做吗?谢谢,我想这样做要对矩阵中值大于0的任何单元格执行此操作,是否可以在循环或类似情况下使用此函数?只需调用此函数,传递单元格(从矩阵中选择的任何单元格),此函数将计算从该单元格向左延伸的圆锥体的和。PV1=SUMCONE(范围(“D5”))例如,如果将函数带到AZ行,它会工作吗?或者我必须设置resize和r以适应每一行的这些限制吗?您也说过这是向左求和。我想向上求和到一行。您感到困惑。在Excel中,行是编号的,列是用字母标记的。因此D5表示第四列和第二列相交的单元格第五行。因此,你在这个问题中的描述显然是针对左锥体的。是的,它可以在表格上的任何地方使用,只要初始单元格距离