如何在VBA中创建n个数组

2024-04-18

我有下面的代码,它可以完美地工作并完成我需要的技巧。

但是我希望这段代码运行 n 次并创建 n 个数组。

我的数据集是:

我的代码是:

Option Explicit

Private Sub Test()
    Const startRow As Long = 2
    Const valueCol As Long = 2
    Const outputCol As Long = 4
    
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
        
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, valueCol).End(xlUp).Row
    
    Dim inputArr As Variant
    inputArr = ws.Range(ws.Cells(startRow, valueCol), ws.Cells(lastRow, valueCol)).Value
    
    Dim outputSize As Long
    outputSize = ((UBound(inputArr, 1) - 1) * UBound(inputArr, 1)) / 2
    
    Dim outputIndex As Long
    Dim outputArr As Variant
    ReDim outputArr(1 To outputSize, 1 To 1) As Variant
    
    Dim i As Long
    Dim n As Long
    
    Dim currFirst As Long
    Dim currLowest As Long
    
    For i = 2 To UBound(inputArr, 1)
        currFirst = inputArr(i, 1)
        currLowest = currFirst - inputArr(i - 1, 1)
                
        For n = i - 1 To 1 Step -1
            Dim testLowest As Long
            testLowest = currFirst - inputArr(n, 1)
            
            If testLowest < currLowest Then currLowest = testLowest
            
            outputIndex = outputIndex + 1
            outputArr(outputIndex, 1) = currLowest
        Next n
    Next i
    
    ws.Cells(startRow, outputCol).Resize(UBound(outputArr, 1)).Value = outputArr
End Sub

代码解释:(数据集仅用于视觉目的) 代码计算列(例如 B 列)中的值并创建 array1 并将数组插入到结果列中。

我想要实现的是重复此代码/循环 n 次并创建动态数量的数组,然后将这些数组的结果放入结果列中。我不知道如何在一个循环内创建 array1 然后 array2 等等。

一列可能有 60k+ 行,因此我需要非常轻量级的解决方案来实现最短的运行时间。

感谢您的帮助。

Edit:

Added picture enter image description here


这假设您的日期和值始终成对,因此您使用的列始终是偶数。

基本上添加了另一个循环来遍历列,并在每列计算结束时添加outputArr into a Collection (outputColl)。我在最后添加了如何迭代集合和每个数组的行的示例。

Option Explicit

Private Sub Test()
    Const startRow As Long = 2
    Const firstValueCol As Long = 2
    
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
        
    Dim lastRow As Long
    Dim lastCol As Long
    
    With ws
        lastRow = .Cells(.Rows.Count, firstValueCol).End(xlUp).Row
        lastCol = .Cells(startRow, .Columns.Count).End(xlToLeft).Column
    End With
    
    Dim outputSize As Long
    outputSize = ((lastRow - startRow) * (lastRow - startRow + 1)) / 2
            
    Dim outputArr As Variant
    ReDim outputArr(1 To outputSize, 1 To 1) As Variant
    
    Dim outputColl As Collection
    Set outputColl = New Collection
        
    Dim x As Long
    Dim i As Long
    Dim n As Long
    
    For x = firstValueCol To lastCol Step 2
        Dim inputArr As Variant
        inputArr = ws.Range(ws.Cells(startRow, x), ws.Cells(lastRow, x)).Value
            
        Dim outputIndex As Long
        outputIndex = 0
        
        For i = 2 To UBound(inputArr, 1)
            Dim currFirst As Long
            Dim currLowest As Long
            
            currFirst = inputArr(i, 1)
            currLowest = currFirst - inputArr(i - 1, 1)
                    
            For n = i - 1 To 1 Step -1
                Dim testLowest As Long
                testLowest = currFirst - inputArr(n, 1)
                
                If testLowest < currLowest Then currLowest = testLowest
                
                outputIndex = outputIndex + 1
                outputArr(outputIndex, 1) = currLowest
            Next n
        Next i
        
        outputColl.Add outputArr
    Next x
    
    'Loop through your collection
    For x = 1 To outputColl.Count
        
        'loop through the rows in the array
        For i = 1 To UBound(outputColl(x), 1)
            'Do your math here
            Debug.Print outputColl(x)(i, 1)
        Next i
    Next x
    
    'Dim outputCol As Long
    'outputCol = lastCol + 1
    'ws.Cells(startRow, outputCol).Resize(UBound(outputArr, 1)).Value = outputArr
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在VBA中创建n个数组 的相关文章

  • 当单元格值和复选框更改时更改工作表

    我有一本包含多个工作表的工作簿 我有一个菜单页面 工作表 其中包含多个用户选择 输入新订单 更新订单等 每个选项旁边都有一个复选框 根据选中的复选框 单元格F4 F21改变自0 to 1并且 细胞B1更改我想要去的工作表的名称 我的主菜单工
  • 如何使用 Office.js 查找 Office AddIn Host(它是 Word 应用程序还是 Excel)?

    我正在创建一个 Office AddIn 它可以在 Excel 和 Word 应用程序中使用 并且基于主机 如果它是 Word 或 Excel 主机 我想执行不同的逻辑 我正在使用office js 创建office Addin 例如 le
  • 结合使用 COUNTIF 和 VLOOKUP EXCEL

    我有多个电子表格workbook我想要以下基本内容English talk IF worksheet1 cell A3 出现在 工作表 2 B 列中 计算它在 工作表 2 b 列中出现的次数 换句话说 让我们说A3 BOB smith 在工
  • 如何将数据从 SQLITE 数据库获取到 Android 中的数组?

    很确定这是一个简单的问题 但我对所有将从游标返回的数据适应不同视图的示例感到困惑 我只想运行原始查询并将返回的每一项数据放入浮点数组中 以便我稍后可以将它们添加起来 我需要为此使用什么 Thanks 当您查询数据库时 您仍然会有一个游标 但
  • Apache POI - JAVA - 迭代 Excel 中的列

    这里是java新手 我正在编写一个代码 该代码读取 Excel 文件 查看列中的单元格 然后编写如下表所示的内容 我有一个 Excel 文件 如下所示 col1 col2 col3 col4 row1 2 3 1 1 w row2 3 2
  • 如何使用 VBA 将符号/图标格式化为单元格而不使用条件格式

    我使用 VBA 代码放置条件格式以覆盖大型表格中的值 每个单元格使用 2 个公式来确定使用 3 个符号中的哪一个 我需要根据列使用不同的单元格检查每个单元格的值 因此据我了解 我必须将条件格式规则单独放置在每个单元格上 以确保每个单元格中的
  • 在另一个数组的每隔一个元素之后插入一个数组中的元素(一次一个)(不均匀拉链)

    合并两个数组的优雅方法是什么 使得生成的数组具有第一个数组中的两个项目 后跟第二个数组中的单个项目 以这种方式重复 array1 A1 A2 A3 A4 A5 potentially longer array2 B1 B2 B3 B4 B5
  • 使用按钮从 Django 项目根下载文件

    So this is the webpage I m creating atm with Django 1 8 希望用户能够将数据导出为 csv 当用户 在框中写下 Reddit 子版块名称 按下 获取数据 按钮 会发生什么 它创建了一个
  • 无法加载文件或程序集“Microsoft.Office.Interop.Excel”

    我在 WinForm 应用程序中使用 Excel 时遇到问题 当我在多台计算机上尝试它时 它在它们上运行得很好 但是当我在另一台计算机上尝试它时 它会给我 System IO FileLoadException 无法加载文件或程序集 错误
  • 通过php将MYSQL数据导出到Excel/CSV

    我想通过 php 将 MYSQL 数据导出到 Excel CSV 这样我以后就可以使用我的数据库 或者有人可以使用并理解它 要使用适合 EXCEL 的语法创建 CSV 文件 您可以使用基本 SQL SELECT FROM mytable I
  • 错误:找不到符号 array.add(element);

    我有一个程序 它从文件中读取 获取每个单词并将其作为字符串添加到数组中 我在将字符串添加到数组时遇到了一些麻烦 我收到错误 SortingWords java 73 error cannot find symbol array add el
  • 在 Python 中创建垂直 NumPy 数组

    我在 Python 中使用 NumPy 来处理数组 这是我用来创建垂直数组的方法 import numpy as np a np array 1 2 3 有没有一种简单 更直接的方法来创建垂直数组 您可以使用reshape or vstac
  • Excel函数:引用单元格中的数组

    我在单元格 A1 中有一个数组 通过 A1 G6 J6 aa b ccc 1 现在我想将单元格 A1 用于 B1 中的数组公式 基本上B1应该是 B1 SUMPRODUKT C6 C12 B6 B12 G6 J6 但我不想直接引用 G6 J
  • 指向二维数组的指针和手动内存管理 - C

    我认为用纯 C 语言构建一个库来处理各种矩阵计算将是一个很好的挑战 现在 尽管我在 Objective C 和 Cocoa 方面有一些很好的经验 但我对 C 的了解正是我所需要的与 Objective C 一起工作 仅此而已 例如 我熟悉
  • 无法在函数内将数据写入 Excel 2007/2010 中的 VBA 单元格

    我想通过 VBA 设置单元格的值 我用谷歌搜索了一下 看到了一些解决方案 Sheets SheetName Range A1 value someValue Sheets SheetName Cells 1 1 value someValu
  • 如何从numpy数组中获取两个最小值

    我想从数组中取出两个最小值x 但是当我使用np where A B np where x x min 0 1 我收到此错误 ValueError 需要超过 1 个值才能解压 我该如何修复这个错误 我需要在数组中按升序排列数字吗 您可以使用n
  • 将 Outlook 中选定电子邮件的电子邮件正文显示为 Excel 中的消息框?

    我正在使用 excel 2010 并创建了以下 vba 代码 该代码查找主题标题中包含单词 test 的电子邮件 然后在 excel 中显示包含该电子邮件正文的消息框 Sub GetFromInbox Dim olApp As Outloo
  • 如何像mysql一样对数组进行排序

    如何对与数据库数据相同的数组进行排序 我请求谷歌分析数据 数据是一个大数组 我想将数组与本地数据库中的一些其他字段连接起来 然后我再次扩展大数组 现在我想对大数组进行排序 这与使用我的 sql 相同 如下所示 select from ga
  • 空格键在 Excel VBA 编辑器中的行尾不起作用

    我将 Personal xlsb 移至新笔记本电脑 但遇到了一个奇怪的问题 空格键在行尾不起作用 除非它是完全空的行 示例 1 不起作用的示例 不工作 示例 2 工作示例 会工作 当我按空格键时 文本选择指针没有移动 但位置指示器在原始位置
  • 如何在Excel VBA中获取给定模块名称的函数和子列表

    我正在开发一个帮助宏 它可以查看活动 Excel 工作簿上给定模块名称的列表函数 例如 我有一个模块名称 Module1 该模块内部有以下功能或子功能 Sub Sub1 End Sub Sub Sub2 End Sub Function F

随机推荐