将多个不相邻列复制到数组

2024-03-09

我正在尝试将多个不相邻(不连续)的 Excel 列复制到数组中,但它不起作用。以下是我尝试过的...

    Public Function Test()    
        Dim sh As Worksheet: Set sh = Application.Sheets("MyWorksheet")
        Dim lr As Long: lr = sh.Cells(sh.Rows.Count, 1).End(xlUp).row
        Dim r1 As Range: Set r1 = sh.Range("A1:A" & lr)
        Dim r2 As Range: Set r2 = sh.Range("C1:C" & lr)
        Dim rAll As Range: Set rAll = Union(r1, r2)
        'Dim arr() As Variant: arr = Application.Transpose(rAll) <-- Throws Type mismatch error
        'Dim arr As Variant: arr = Application.Transpose(rAll) <-- arr Value = Error 2015
        Dim arr() As Variant: arr = rAll.Value2 ' <-- Only the first column (col A) is loaded.
    End Function

任何帮助是极大的赞赏!


由于将多个值读取到数组中,例如arr = rAll.Value2仅可能在连续范围内,您必须选择:

替代方案 1:

编写一个函数,按区域读取范围值并将其合并到一个数组中。

Option Explicit 

Public Function NonContinousColumnsToArray(ByVal NonContinousRange As Range) As Variant
    Dim iArea As Long
    For iArea = 1 To NonContinousRange.Areas.Count - 1
        If NonContinousRange.Areas.Item(iArea).Rows.CountLarge <> NonContinousRange.Areas.Item(iArea + 1).Rows.CountLarge Then
            MsgBox "Different amount of rows is not allowed.", vbCritical, "NonContinousColumnsToArray"
            Exit Function
        End If
    Next iArea

    Dim ArrOutput() As Variant
    ArrOutput = NonContinousRange.Value2 'read first area into array

    'read all other areas
    For iArea = 2 To NonContinousRange.Areas.Count
        ReDim Preserve ArrOutput(1 To UBound(ArrOutput, 1), 1 To UBound(ArrOutput, 2) + NonContinousRange.Areas.Item(iArea).Columns.CountLarge) As Variant  'resize array

        Dim ArrTemp() As Variant  'read arrea at once into temp array
        ArrTemp = NonContinousRange.Areas.Item(iArea).Value2

        'merge temp array into output array
        Dim iCol As Long
        For iCol = 1 To UBound(ArrTemp, 2)
            Dim iRow As Long
            For iRow = 1 To UBound(ArrTemp, 1)
                ArrOutput(iRow, UBound(ArrOutput, 2) - UBound(ArrTemp, 2) + iCol) = ArrTemp(iRow, iCol)
            Next iRow
        Next iCol
    Next iArea

    NonContinousColumnsToArray = ArrOutput
End Function

所以下面的示例程序

Public Sub ExampleTest()
    Dim InputRng As Range
    Set InputRng = Union(Range("A1:A9"), Range("C1:D9"))

    Dim OutputArr() As Variant
    OutputArr = NonContinousColumnsToArray(InputRng)

    Range("A12").Resize(UBound(OutputArr, 1), UBound(OutputArr, 2)).Value = OutputArr
End Sub

将采用以下非连续范围Union(Range("A1:A9"), Range("C1:D9"))作为输入,

enter image description here Image 1: The input range was non-continous A1:A9 and C1:D9.

将其合并到一个数组中OutputArr并按如下方式写入值

enter image description here Image 2: The merged output array written back into cells.


替代方案 2:使用临时工作表……

…将值粘贴为连续范围,然后可以立即将其读入数组中。

Public Sub ExampleTestTempSheet()
    Dim InputRng As Range
    Set InputRng = Union(Range("A1:A9"), Range("C1:D9"))

    Dim OutputArr() As Variant
    OutputArr = NonContinousColumnsToArrayViaTempSheet(InputRng)

    Range("A12").Resize(UBound(OutputArr, 1), UBound(OutputArr, 2)).Value = OutputArr
End Sub

Public Function NonContinousColumnsToArrayViaTempSheet(ByVal NonContinousRange As Range) As Variant
    On Error Resume Next
    NonContinousRange.Copy
    If Err.Number <> 0 Then
        MsgBox "Different amount of rows is not allowed.", vbCritical, "NonContinousColumnsToArray"
        Exit Function
    End If
    On Error GoTo 0

    Dim TempSheet As Worksheet
    Set TempSheet = ThisWorkbook.Worksheets.Add
    TempSheet.Range("A1").PasteSpecial xlPasteValues
    Application.CutCopyMode = False

    NonContinousColumnsToArrayViaTempSheet = TempSheet.UsedRange.Value2

    Dim ResetDisplayAlerts As Boolean
    ResetDisplayAlerts = Application.DisplayAlerts
    Application.DisplayAlerts = False
    TempSheet.Delete
    Application.DisplayAlerts = ResetDisplayAlerts
End Function

请注意,由于临时工作表的原因,替代方案 2 更有可能失败。我认为替代方案 1 更稳健。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将多个不相邻列复制到数组 的相关文章

  • numpy:如何连接数组? (获得多个范围的并集)

    我使用Pythonnumpy 我有一个 numpy 索引数组a gt gt gt a array 5 7 12 18 20 29 gt gt gt type a
  • 如何使用VBA根据条件删除Excel中的行?

    我目前正在构建一个宏来格式化数据表并删除不适用的数据行 具体来说 我希望删除列 L ABC 的行以及删除列 AA DEF 的行 到目前为止 我已经实现了第一个目标 但还没有实现第二个目标 现有代码是 Dim LastRow As Integ
  • VBA 字符串 255 个字符限制

    我在使用 VBA 时遇到问题 并注意到它的字符串限制为 255 个字符 我实际上正在尝试通过 POST 发送 JSON 并暂停执行 我注意到该字符串始终只有 255 个字符 有没有办法调整字符串的大小或其他什么 我在这个问题上浪费了大约 6
  • 在组合框中显示可见工作表

    您好 我有以下代码来在组合框中显示工作表 创建工作表后 工作表会自动添加到列表中 我不希望隐藏的工作表在保管箱中可见 我怎么做 Option Explicit Private Sub ComboBox1 Change If ComboBox
  • 将ADODB二进制流转换为字符串vba

    我有以下问题 我有一个存储在服务器上的 CSV 文件 但它有 3 个字符作为分隔符 我想从 URL 加载数据并使用 作为分隔符将数据填充到 Excel 页面的列中 到目前为止 我找到了使用 ADODB 记录集从网站加载文件的代码 但我无法进
  • char 数组声明中字符串文字周围的大括号有效吗? (例如 char s[] = {"Hello World"})

    偶然间我发现这条线char s Hello World 已正确编译并且似乎被视为相同char s Hello World 不是第一个 Hello World 一个包含一个 char 数组元素的数组 因此 s 的声明应为char s 事实上如
  • 在 MS Word 中运行外部 vba 代码

    我可以将外部代码链接到 Word 文档吗 我有很多带有宏的 Word 文档 VBA 代码 全部使用相同的代码 我希望代码从外部源运行 而不是从所有这些文档中运行 这样 如果我必须更新代码 我只有一个地方需要更新 您可以创建一个模板并将其放入
  • 在 VBA Excel 中查找、剪切和插入行以匹配借项和贷项值

    我在 Sheet1 中有以下设置数据 并从第 4 行 A 列开始 其中标题位于第 3 行 No Date Code Name Remarks D e b i t Cr e d i t 1 4 30 2015 004 AB 01 04 15
  • 将数组拆分为特定数量的块

    我知道array chunk 允许将数组拆分为多个块 但块的数量根据元素的数量而变化 我需要的是始终将数组拆分为特定数量的数组 例如 4 个数组 以下代码将数组分为 3 个块 两个块各有 2 个元素 1 个块有 1 个元素 我想要的是将数组
  • 将 MySQL 结果作为 PHP 数组

    mysql 表 config name config value allow autologin 1 allow md5 0 当前的 php 代码 sth mysql query SELECT rows array while r mysq
  • 如何使用 std::array 模拟 C 数组初始化“int arr[] = { e1, e2, e3, ... }”行为?

    注意 这个问题是关于不必指定元素数量并且仍然允许直接初始化嵌套类型 这个问题 https stackoverflow com questions 6111565 now that we have stdarray what uses are
  • 当使用公式生成超链接时,VBA 打开 Excel 超链接不起作用

    使用公式生成的 Excel 超链接似乎存在错误 我使用的是 Excel 2010 我有一个电子表格 其中的单元格包含 URL 我的目标是执行以下两件事 将这些单元格变成超链接 创建一个键盘快捷键来打开这些超链接 这样我就不必使用鼠标了 为了
  • char*str={"foo",...} 和 char str[][5]={"foo",...} 数组定义之间有什么区别?

    Case 1 当我写作时 char str what is this then str i newstring 是有效的 而str i j j 是无效的 Case 2 当我写作时 char str 5 what is this then s
  • const 和 constexpr 数组之间的区别

    为什么有区别const and constexpr当与数组一起使用时 int const xs 1 2 3 constexpr int ys 1 2 3 int as xs 0 error int bs ys 0 fine 我希望两者都能x
  • JSON-LD 构建单个对象数组

    有没有办法将单个对象强制放入数组 每次都测试对象类型真的很烦人 我尝试了这个上下文 但它不起作用 还有JSON LD Playground 中的示例 http tinyurl com ph7p35v 通过此上下文 资源将转换为单个对象 而不
  • 从 n,k 维矩阵数组中减去 n,k 维矩阵

    如果我有一个数组A A lt array 0 c 4 3 5 for i in 1 5 set seed i A i lt matrix rnorm 12 4 3 如果我有矩阵 B set seed 6 B lt matrix rnorm
  • Java Microsoft Excel API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Java-如何将黑白图像加载到二进制中?

    我在 FSE 模式下使用 Java 和 swing 我想将完全黑白图像加载为二进制格式 最好是二维数组 并将其用于基于掩码的每像素碰撞检测 我什至不知道从哪里开始 过去一个小时我一直在研究 但没有找到任何相关的东西 只需将其读入Buffer
  • 将多维数组转换为单数组(Javascript)

    我有一个对象数组 来自 XLSX js 解析器 因此其长度和内容各不相同 表示已给予项目的资助 简化后 它看起来像这样 var grants id p 1 location loc 1 type A funds 5000 id p 2 lo
  • 使用随机放置的 NaN 创建示例 numpy 数组

    出于测试目的 我想创建一个M by Nnumpy 数组与c随机放置的 NaN import numpy as np M 10 N 5 c 15 A np random randn M N A mask np nan 我在创建时遇到问题mas

随机推荐

  • 流畅的NHibernate-ClassMap继承?

    在之前的一个问题中 https stackoverflow com questions 4251687 splitting nhibernate entity row storage across multiple tables 与 Flu
  • 明智地进行向量内存分配

    假设我必须迭代一个可能非常大的数字向量 并将偶数和奇数元素复制到新的单独向量中 源向量可以具有任意比例的偶数与奇数 它可以是全偶数 全奇数或介于两者之间 为了简单起见 push back经常用于此类事情 for std size t Ind
  • 如何在 Webstorm 中提供 Python 语法着色?

    我有一个 Python 项目 我使用 WebStorm 作为我的编辑器 问题是 Python 的语法没有着色 如何以良好的语法显示 Python 页面 我搜索的不超过 我不会用 Python 开发页面 但我确实希望它们能够在 Webstor
  • 如何为 void 返回方法定义 AnswersWithDelay

    因此 我想在 Mockito 中模仿一种正在进行网络调用并等待其完成然后返回的方法 我在这里找到了这个很好的答案 https stackoverflow com a 50530261 4433222 https stackoverflow
  • Tensorflow:即使关闭会话也会发生内存泄漏?

    当我意识到 即使我在 for 循环中关闭当前会话 我的程序也会大幅减慢 并且由于正在构建的操作而导致内存泄漏 我只是在尝试四元神经网络的一些东西 这是我的代码 for step in xrange 0 200 num epochs trai
  • 联合体可以在声明中初始化吗?

    例如 假设我们有一个工会 typedef union unsigned long U32 float f U U32 F 当声明这个联合类型的变量时 有没有办法设置一个初始值 U U32 F u 0xffffffff Does not wo
  • JSON 中的有序字典

    有3个字符串变量 public var userLoginId String public var searchString String public var tableName String 我有一本字典 let dict userLo
  • C# - RichTextBox 更改某些单词的颜色[重复]

    这个问题在这里已经有答案了 可能的重复 如何从 RichTextBox 中选择文本然后为其着色 https stackoverflow com questions 3707120 how to select text from the ri
  • Django url 模板标签:“模块”对象没有属性“视图”

    有问题的标签 lt a href url django contrib auth views login gt Login lt a gt URLConf from django contrib auth import views br b
  • 使用 JavaCV 相当于 Java 中的 OpenCV 语句

    我想知道如何使用 JavaCV 在 OpenCV 中构造以下 C 语句 float p float cvGetSeqElem circles i int radius cvRound p 2 使用 cvHoughCircles 获取检测到的
  • Unity3D 的良好全局异常处理策略是什么?

    我正在考虑做一些 Unity3D 脚本编写的东西 并且我想建立全局异常处理系统 这不适用于在游戏的发布版本中运行 其目的是捕获用户脚本和编辑器脚本中的异常 并确保将它们转发到数据库进行分析 并向相关开发人员发送电子邮件 以便他们可以修复他们
  • 即使应用程序未运行,也可保持 FirebaseMessagingService 活动并显示带有数据负载的通知的服务

    我正在使用 FCM 通知的应用程序中工作 当应用程序运行 前台或后台 时 通知会收到 但是当我从最近的应用程序中清除该应用程序时 我不会收到任何我正在使用 FirebaseMessagingService 的通知 所以我想创建一个服务 即使
  • 对SVG viewBox、宽度、高度等感到困惑

    如果我对 SVG 的理解是正确的 那么以下两个 SVG 描述将产生相同的图像 但事实并非如此 注意 这两个代码列表仅在其坐标值方面有所不同svg标签 更具体地说 对于每个 x y第一个列表中的 对有一个 x 205 y 55 在第二个列表中
  • 如何将字节字符串拆分为单独的部分

    我一直在尝试创建波形图像 并且从 wav文件使用song wave open and song readframes 1 返回 b x00 x00 x00 x00 x00 x00 我怎样才能把它分成三个独立的部分 例如b x00 x00 b
  • C 中的图形函数

    为什么我运行代码时什么也看不到 我用的是DOSBox include
  • 如何获取当前应用程序区域设置?

    我需要获取当前区域设置 不是用户区域设置 而是我的应用程序区域设置 假设我的应用程序有两种本地化 在项目设置中 英语 默认 和法语 如果用户在 iPhone 上设置法语 那么我的应用程序将显示法语界面 如果用户在 iPhone 上设置德语
  • @Injectable(providedIn: 'root') 的语义?

    只是想确保我理解的语义 Injectable providedIn root 在 Angular 6 之前 如果我们从 NPM 导入包含服务的模块 我们会在应用程序模块中声明该模块 以便整个应用程序都可以访问该服务 像这样的事情 impor
  • 建立新的 Java 开发中心

    我正在建立一个 Java 开发商店 目前只是我自己作为唯一的开发人员 但希望随着业务的增长需要雇用其他人 显然 我希望将其设置正确 以便随着更多人的加入 他们可以立即提高工作效率 请帮助建议我想做的事情以及完成这些事情的工具 这是我认为我需
  • Django 模型继承 - 在查询中只需要父类的实例

    假设我有 2 个模型 一个是另一个的父模型 如何查询 Django 中所有不是餐厅的地点 Place objects all 将包括所有餐厅 对吗 我想将孩子排除在结果之外 谢谢你 class Place models Model name
  • 将多个不相邻列复制到数组

    我正在尝试将多个不相邻 不连续 的 Excel 列复制到数组中 但它不起作用 以下是我尝试过的 Public Function Test Dim sh As Worksheet Set sh Application Sheets MyWor