首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在具有固定最后一行的单元格范围内循环

在具有固定最后一行的单元格范围内循环
EN

Stack Overflow用户
提问于 2021-09-09 19:44:26
回答 1查看 69关注 0票数 1

我需要在一个范围内循环(在我的例子中是列A),以获得以下结果:

代码语言:javascript
复制
  A       B
  1   = 2 - 1
  2   = 3 - 1
  3   = 3 - 2
  4   = 4 - 1
  5   = 4 - 2
      = 4 - 3
      = 5 - 1
      = 5 - 2
      = 5 - 3
      = 5 - 4

我希望数字5减去4,3,2,1,然后数字4减去3,2,1,依此类推。我以某种方式能够通过收集实现这一点,但由于数据集相当大,所以脚本运行30+分钟。

在这一点上,我试图弄清楚数组,但我不知道如何获得所需的结果。我主要关心的是我是否可以从下到上循环(从数字5到1,而不是从1到5),以及如何固定最后一行(固定数字5,进行推导,然后固定数字4,做数学魔术并循环到3,等等)。

我当前的代码是:

代码语言:javascript
复制
Dim Arr As Variant
Dim lastc, lastr As Long

lastc = FindColNumber
lastr = ws.Cells(ws.Rows.count, lastc).End(xlUp).Row

Arr = ws.Range(ws.Cells(2, last), ws.Cells(lastr, lastc))
For i = LBound(Arr, 1) To UBound(Arr, 1) - 1
If (Arr(i, 1) > 0) And (Arr(i + 1, 1) > Arr(i, 1)) Then
Arr(i, 1) = Arr(i, 1) - Arr(i + 1, 1)

代码的演绎如下: 5-4,4-3,3-2,2-1,这不是我需要的。

有什么建议吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-09 20:34:27

正如注释中所述,您将需要两个循环和另一个输出数组:

代码语言:javascript
复制
Sub lkjlkjkdl()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    Dim Arr As Variant
    Dim lastc As Long, lastr As Long
    
    lastc = 1 'FindColNumber
    lastr = ws.Cells(ws.Rows.Count, lastc).End(xlUp).Row
    
    Arr = ws.Range(ws.Cells(2, lastc), ws.Cells(lastr, lastc))
    
    Dim cnt As Long
    cnt = ((UBound(Arr, 1) - 1) * UBound(Arr, 1)) / 2
    
    
    Dim k As Long
    k = 1
    
    Dim outarr As Variant
    ReDim outarr(1 To cnt, 1 To 1)
    
    For i = LBound(Arr, 1) + 1 To UBound(Arr, 1)
        Dim j As Long
        For j = LBound(Arr, 1) To i - 1
            outarr(k, 1) = Arr(i, 1) - Arr(j, 1)
            k = k + 1
        Next j
    Next i
    
    ws.Range("B2").Resize(cnt, 1).Value = outarr
            
End Sub

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69123929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档