我有一个整数数组值,想要找到一种计算其累积和(S = Data(1) + Data(2) + ... + Data(x))的简单方法.
我已经创建了这个函数:
Function CumulativeSum(Data() As Integer, k As Integer) As Integer
For entry = 1 To k
CumulativeSum = CumulativeSum + Data(entry)
Next entry
End Function
Run Code Online (Sandbox Code Playgroud)
它工作正常.但是,我想知道是否有更好的方法(主要是不使用任何额外的功能,基本上只使用excel函数Application.Sum).我在网上进行了一次小搜索,但在此基础上没有找到任何内容.
我知道我不是要求更正任何代码,我只是要求一个替代方案,这不是本论坛的真正目的.但是,我也怀疑答案可能很简单,所以...如果有人关心帮助我,我会非常非常感激!如果您找到类似问题的答案,请与我分享链接,我将删除此链接.
我非常抱歉可能缺乏明确的要求:我只是想找到一个简单的方法来计算累积和使用宏程序本身的简单函数,没有使用CumulativeSum我创建的函数或由其创建的任何其他函数用户.
我工作VBA了很长时间,我对它很有经验.然而,有时候,它仍然让我的思绪充满了他的异想天开......为了给我的所有同事创建一个具有一些可访问功能的文件,我选择在脚本上进行每一次计算.为此,我使用一些double数据填充数组:
Dim DT01() As Double: ReDim DT01(1 To N03) As Double
Dim R As Long: R = 1: Dim N As Long: Dim P As Double
For x = 1 To N01
N = SH01.Cells(x + 4, 15).Value: P = SH01.Cells(x + 4, 14).Value
For y = 1 To N: DT01(R) = P: R = R + 1: Next y
Next x
Run Code Online (Sandbox Code Playgroud)
该DT01阵列是相当长的(N03 = 495258)和前一程序填充,正如我预期的阵列.我甚至做了以下事情:
For x = 1 To 495258
SH01.cells(x, …Run Code Online (Sandbox Code Playgroud) 如何获取光标位置相对于矩形的坐标(我用来调用宏的那个)?这就是我到目前为止所得到的:
第一:我使用的功能:
Declare PtrSafe Function GetCursorPos Lib "user32" (Point As POINTAPI) As Long
Type POINTAPI
X As Long
Y As Long
End Type
Run Code Online (Sandbox Code Playgroud)
获取光标在屏幕上的坐标.这些值由以下方式返回:
Point.X 'pixels to the left of the screen
Point.Y 'pixels to the top of the screen
Run Code Online (Sandbox Code Playgroud)
第二:我创建了一个这样的矩形:
并为其设置以下宏:
Sub SH03G13()
Dim Point As POINTAPI: GetCursorPos Point
Dim rectang As Shape: Set rectang = ThisWorkbook.Sheets("Sheet1").Shapes("SH03G13BACK")
Dim ABCISSA As Long: ABCISSA = Point.X - rectang.Left
Dim ORDENAD As Long: ORDENAD = Point.Y - rectang.Top
MsgBox ABCISSA & " …Run Code Online (Sandbox Code Playgroud) 几分钟前我发布了一个关于这个问题的问题,并决定创建一个新的问题来更好地描述问题。所以我准备了一个简单的工作表:
在G4(绿色)上我放置了公式=SUMIFS(B1:B20;A1:A20;">="&E4;A1:A20;"<"&E5)并且它工作正常。
单元格E4(蓝色)由脚本填充:
Sub Button1_Click()
Dim SH As Worksheet: Set SH = ThisWorkbook.Sheets("Sheet1")
Dim R1 As Range: Set R1 = SH.Range(SH.Cells(1, 1), SH.Cells(20, 1))
Dim R2 As Range: Set R2 = SH.Range(SH.Cells(1, 2), SH.Cells(20, 2))
Dim V1 As Double: V1 = SH.Cells(4, 5).Value
Dim V2 As Double: V2 = SH.Cells(5, 5).Value
SH.Cells(5, 7).FormulaR1C1 = WorksheetFunction.SumIfs(R2, R1, ">=" & V1, R1, "<" & V2)
End Sub
Run Code Online (Sandbox Code Playgroud)
很容易看出该值也应该是18。但是它评估为0.
另一件事,当我声明V1并V2 …