【问题标题】:Tricking Excel on 255 character limit for VBA Array [duplicate]在 VBA 数组的 255 个字符限制上欺骗 Excel [重复]
【发布时间】: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

Sample

在图片中,负载情况以及施加的最大力被提取,首先是基于 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


【解决方案1】:

也许这没有帮助,但我希望它能给你一些见解。

Excel 图表在绘制工作表中的数据图表时效果最佳。如果您可以在 VBA 中定义一个数组,您可以轻松地将该数组转储到某处的工作表中,然后将该范围插入到图表系列公式中。这消除了数组字符限制的问题,并且更容易调试图表数据。

【讨论】:

    【解决方案2】:

    我设法解决了它,但无论如何都要感谢大家:

    TR = ActiveWorkbook.Sheets(2).Cells(22 + Rows2Copy, 2).Value
    TC = WorksheetFunction.Match("*" & "W" & Cells(2, 3) & "*", 
    Worksheets(1).Range("5:5"), 0)
    TCL = Split(Cells(1, TC).Address, "$")(1)
    
    TotalRows = (PValue / 5) - 3
    ActiveWorkbook.Sheets(2).Activate
            
    Rows2Copy2 = Rows2Copy
    
            For i = 0 To TotalRows Step 1
                
                With ActiveWorkbook.Sheets(2).Cells(19 + Rows2Copy - i, 2)
                       
                'Split formula
                Formula1 = "=LOOKUP(2,1/('Raw Data'!$" & TCL & TR - PRange & ":" & TCL & TR & "=VLOOKUP(INDEX('Raw Data'!A" & TR - PRange & ":A" & TR & ",MATCH(MIN(+FX2),+FX2,0)),'Raw Data'!$A" & TR - PRange & ":EA" & TR & ",+FX3,FALSE)),'Raw Data'!$A" & TR - PRange & ":A" & TR & ")"
                Formula2 = "ABS('Raw Data'!" & TCL & TR - PRange & ":" & TCL & TR & "-((D" & 20 + Rows2Copy2 & "-0.05)*$D$7))"
                Formula3 = "MATCH(""*""&""W""&$C$2&""*"",'Raw Data'!$5:$5,0)"
                               
                .FormulaArray = Formula1
                .Replace "+FX2", Formula2, lookat:=xlPart
                .Replace "+FX3", Formula3, lookat:=xlPart
                .VerticalAlignment = xlCenter
                .HorizontalAlignment = xlCenter
    
                End With
                Rows2Copy2 = Rows2Copy2 - 1
            Next i
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      相关资源
      最近更新 更多