【发布时间】:2020-09-24 07:24:18
【问题描述】:
昨天我发布了这个问题,因为我不知道数组有 255 个字符的限制。今天我在过去的 9 个小时里一直在尝试将其分解,如下所示:
Overcoming the 255 char. limit for formulaArray in Excel VBA 并在 google 上搜索其他完全相同的帖子。
为了让这个技巧起作用,我按照说明进行操作,您需要编写完整的公式,但仍然没有弄清楚。
Dim TR As Double
Dim TC As Double
Dim Formula1 As String
Dim Formula2 As String
Dim Formula3 As String
Dim Rows2Copy As Integer
Dim PValue As String
Dim str As String
str = OpenBook.Sheets(1).Cells(2, 1).Value
PValue = Mid(str, 20, 2)
Rows2Copy = (PValue / 5) - 10
TR = ActiveWorkbook.Sheets(2).Cells(22 + Rows2Copy, 2).Value
TC = WorksheetFunction.Match("*" & "W" & Cells(2, 3) & "*", Worksheets(1).Range("5:5"), 0)
For j = 300 To TotalRows * 300 Step 300
With ActiveWorkbook.Sheets(2).Range("B24")
Formula1 = "=LOOKUP(2,1/('Raw Data'!R11C" & TC & ":R1048576C" & TC & "=VLOOKUP(INDEX('Raw Data'!R" & TR - j & "C1:R" & TR - j + 300 & "C1,MATCH(MIN(+FX2),+FX2,0)),'Raw Data'!R11C1:R1048576C131,+FX3,FALSE)),'Raw Data'!R11C1:R1048576C1)"
Formula2 = "ABS('Raw Data'!R" & TR - j & "C" & TC & ":R" & TR - j + 300 & "C" & TC & "-((R[1]C[2]-0.05)*R7C4))"
Formula3 = "MATCH(""*""&""W""&R2C3&""*"",'Raw Data'!R5,0)"
.FormulaArray = Formula1
.Replace "+FX2", Formula2, xlPart
.Replace "+FX3", Formula3, xlPart
End With
Next j
在图片中,负载情况以及施加的最大力被提取,首先是基于 W Tested,它查找包含该数据的列,然后在“施加的负载”列中返回最大值,然后最后返回该值的 ID。施加的负载值代表 75.7% 下一步是基于从起始位置向上的 300 行范围(在本例中为 44834 行)找到与初始测试的 70% 最接近的匹配,然后返回该值,然后是 65%,然后是 60%,依此类推,直到10%。其他所有内容都将填充这些值并创建预期的图表。我所缺少的只是它的工作公式
谢谢!非常感谢您的帮助!
【问题讨论】:
-
debug.print 第一个公式。复制粘贴到 Excel 中,可以吗?
-
我以前也必须这样做,您必须非常有策略地编写公式以相互替换。您会遇到哪些错误(如果有)以及哪些代码行导致了错误?
-
在 VBA 中制作 UDF 可能是减少公式大小的一种方法。 excelcampus.com/vba/user-defined-functions-explained
-
一些示例数据(或模拟工作簿)以及对您要完成的工作的详细描述会有所帮助。您的代码 sn-p 不完整。如果我们无法重现问题,就很难提供完整的答案。
-
一个命名范围可能足以让您低于 255 个字符的限制。
R" & TR - j + 300 & "C似乎是一个绝对引用,但如果不知道TR是如何计算的,就无法判断。
标签: excel vba excel-formula