将非连续列数据合并为单列

2024-01-10

我想将值从列 B、C、D 复制到列 J,同时保持值的行位置。
我想将值从 E、F、G 列复制到 K 列,同时保持行位置。

Desired results in Cols J & K. The colors are only to clarify my objective.
Goal: Combine Cols B,C,D into Col J and E,F,G into Col K

行数每周将在 30 到 80 行之间波动,并有新值。
有时数据中会存在间隙,如第 34 行...C 列第 34 行为空白。这必须反映在 J 上校中。我用边框勾勒出这些单元格,以证明存在数据漏洞。如果单元格为空白,我不需要设置边框格式。

I would like使用 Col A 作为我的行计数,因为 Col A 将始终确定有多少行将包含接下来 6 列的值。换句话说,工作表的最后一个值将始终与 A 列中的最后一个值位于同一行,但下周它们可能不在 C 和 F 列中。如果 B 至 G 列中的任意列中有值,则 A 列中始终有一个值。

我尝试为每个列 B、C、D、E、F、G、J 和 K 创建单独的声明范围,但复制函数不会将数据保留在原始行中。

我尝试创建组合列 A、B、C 和列 E、F、G 的声明范围,但我的复制函数并未将数据合并为 2 个不同的列。


VBA 中的 ToCol

Excel

  • 以下公式调整为下面的截图。

  • 在 Excel 中你可以这样做:

    =TOCOL(B2:D11,1) 
    

    其中排除空单元格。

  • 为了安全起见并排除所有空白单元格,您可以使用以下之一:

    =LET(c,TOCOL(B2:D11),FILTER(c,c<>""))
    =TOCOL(IF(B2:D11<>"",B2:D11,NA()),3)
    
  • 如果您没有 Microsoft 365,您可以使用下面的 VBA 函数,如下所示:

    =RangeToCol(B2:D11,1)
    

截图

  • 下面截图的兴趣范围是B2:D11.
  • 重要的是要了解白细胞是空白的但不是空的。您可能会遇到这样的单元格,尤其是当它们包含计算结果的公式时=""而且从具有此类单元格的范围复制数据并粘贴值时也是如此。
  • Excel's TOCOL不认为它们是空白的,或者正如我所说,当第二个参数设置为 1 时,它仅排除空单元格(它们是空白单元格的一部分)。看专栏G在屏幕截图中(ignore=1).
  • 相似地,ISBLANK实际上返回TRUE仅适用于空单元格,就像COUNTA计算所有非空单元格。
  • 另一方面,COUNTBLANK“理解”空白单元格是什么。
  • 研究屏幕截图的左下部分,以更好地了解其含义。

VBA

调用过程

  • 此过程已根据OP的屏幕截图进行调整。
Sub CopyToSingleColumns()
 
    Const SRC_SHEET As String = "Sheet1"
    Const SRC_FIRST_CELL As String = "A2"
    Dim sCols(): sCols = VBA.Array("B:D", "E:G")
    Const DST_SHEET As String = "Sheet1"
    Dim dfCells(): dfCells = VBA.Array("J2", "K2")
    
    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    
    Dim sws As Worksheet: Set sws = wb.Sheets(SRC_SHEET)
    Dim srg As Range
    With sws.Range(SRC_FIRST_CELL)
        Set srg = sws.Range( _
            .Cells, sws.Cells(sws.Rows.Count, .Column).End(xlUp))
    End With
    
    Dim dws As Worksheet: Set dws = wb.Sheets(DST_SHEET)
    
    Dim sData(), n As Long
    
    For n = 0 To UBound(sCols)
        sData = RangeToCol(srg.EntireRow.Columns(sCols(n)), 1)
        dws.Range(dfCells(n)).Resize(UBound(sData)).Value = sData
    Next n
    
    MsgBox "Values copied to single columns.", vbInformation
    
End Sub

主要功能

  • 相同的功能,但对于行,RangeToRow, 可以被找寻到here https://stackoverflow.com/a/75809065.
Function RangeToCol( _
    ByVal rg As Range, _
    Optional ByVal Ignore As Long = 0, _
    Optional ByVal ScanByColumn As Boolean = False) _
As Variant

    Dim srCount As Long: srCount = rg.Rows.Count
    Dim scCount As Long: scCount = rg.Columns.Count
    Dim drCount As Long: drCount = srCount * scCount
    
    Dim sData()
    
    If drCount = 1 Then
        ReDim sData(1 To 1, 1 To 1): sData(1, 1) = rg.Value
    Else
        sData = rg.Value
    End If
    
    Dim dArr(): ReDim dArr(1 To drCount)
    
    Dim sVal, sr As Long, sc As Long, dr As Long
    
    If ScanByColumn Then
        For sc = 1 To scCount
            For sr = 1 To srCount
                If IsErrorBlankTestPassed(sData(sr, sc), Ignore) Then
                    dr = dr + 1
                    dArr(dr) = sData(sr, sc)
                End If
            Next sr
        Next sc
    Else
        For sr = 1 To srCount
            For sc = 1 To scCount
                If IsErrorBlankTestPassed(sData(sr, sc), Ignore) Then
                    dr = dr + 1
                    dArr(dr) = sData(sr, sc)
                End If
            Next sc
        Next sr
    End If
    
    If drCount = 0 Then Exit Function ' only blanks and/or errors
    
    Dim dData(): ReDim dData(1 To dr, 1 To 1)
    
    For dr = 1 To dr
        dData(dr, 1) = dArr(dr)
    Next dr
    
    RangeToCol = dData

End Function

辅助函数

Function IsErrorBlankTestPassed( _
    ByVal Value As Variant, _
    ByVal Ignore As Long) _
As Boolean
    Dim IsAddable As Boolean
    Select Case Ignore
        Case 0: IsAddable = True ' nothing
        Case 1: If Len(CStr(Value)) > 0 Then IsAddable = True ' blanks
        Case 2: If Not IsError(Value) Then IsAddable = True ' errors
        Case 3:
            If Not IsError(Value) Then ' blanks and errors
                If Len(CStr(Value)) > 0 Then IsAddable = True
            End If
    End Select
    IsErrorBlankTestPassed = IsAddable
End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将非连续列数据合并为单列 的相关文章

  • 如何使用Python更改Excel中的列格式

    我想使用 openpyxl 方法将一张纸上的特定行和列复制到另一张纸上 但我的主要 Excel 文件是 xlsb 文件 而 openpyxl 不支持 xlsb 文件 所以我构建了这种复杂的方式 根据公司规则 我无法从 Microsoft E
  • 将单独的范围放入二维数组中

    我正在尝试获取大小的二维数组 x 3 填充 X只是工作表的大小 行数 并且有 3 列我感兴趣 例如 这些列彼此不靠近arr i 0 应从 AA 栏开始填写 arr i 1 应来自 K 列 并且arr i 2 需要来自 L 列 我尝试按以下方
  • ATL创建的COM接口继承IDispatch但后期绑定不起作用

    这是我的 IDL 文件 IFrame 是一个双接口 同时继承了 IDispatch 和 IUnknown object uuid C5AD0517 37FC 479C 9C7A A063B17E4A2E dual nonextensible
  • Excel countif 单元格中的日期大于或等于另一个单元格中的日期

    这已经让我难受有一段时间了 我只需要计算一个单元格中的日期是否大于或等于另一个单元格中的日期 减去 x 天 例如 A1 2014 年 2 月 20 日 B1 2014年1月20日 COUNTIF B1 gt A1 30 30 就是负 30
  • 在 XSSF 工作簿上设置密码保护

    我想为使用 poi 3 14 创建的 xlsx 文件添加密码保护 该文档声称 这是可能的 http poi apache org cryption html http poi apache org encryption html 使用我尝试
  • 将字符串中的一个字符替换为另一个字符

    我有如下数据 A B C D 我想更换C与数据 例如 Z 这样它可能看起来像 A B Z D 我该怎么做 SUBSTITUTE A1 C Z 虽然我不清楚你是否想要G or Z 你提到G但你的示例输出显示Z
  • Excel VBA 公式德语/法语/意大利语/俄语/荷兰语/外国函数

    当我将数据添加到工作簿时 需要将公式从较早的单元格复制到新单元格 我使用以下公式来计算我的增长率 WENN ODER K9 L9 WENNFEHLER L9 K9 K9 由于这非常耗时 我想用宏来改进它 因此编写了以下代码 Sub Grow
  • org.apache.poi 中的异常

    我试图编写一个可以读取和写入的程序 xlsx文件中 下面提供的代码旨在能够编写其第一个 Excel 程序 package excel reader import java io FileOutputStream import java io
  • 在 Excel 2016 数据模型中创建计算表

    我在 Excel 2016 数据模型中有多个表 这些表来自其他 Excel 工作表中维护的数据 并通过 Excel 查询导入以填充数据模型 以利用可用的高级数据管理功能 例如 DAX 日期表 关系联接等 但是 我希望能够通过应用过滤器 联合
  • 将范围传递给 Excel 用户定义函数并将其分配给数组

    我在尝试着 通过两个范围 多行单列 Excel 2007 中的用户定义函数 然后将其分配给一个数组进行处理 谁能告诉我如何将这样的范围分配给数组 范围不是恒定的 因为我在不同的单元格中使用 UDF 来处理不同的数据 所以我不能使用 e g
  • 如何查找 Outlook .pst 文件的完整路径?

    有没有办法通过 API 调用或注册表项以编程方式查找当前用户的 Outlook pst 文件的位置 With 展望赎回 http www dimastr com redemption 您可以使用 VBA 迭代消息存储RDOStores集合
  • 副水平X轴VBA最大刻度

    通过以下代码和敏 正在设置 VBA 中图表的主水平 X 轴的比例 Sub chart set Dim objCht As ChartObject With ActiveSheet ChartObjects 1 Chart Axes xlVa
  • 使用 access VBA 将列表框项目添加到数组

    我在访问表单中有一个列表框 它包含 18 项 我如何使用 access vba 将这些项目存储到数组中 下面将把列表框的内容拉入数组并吐出内容 Dim Size As Integer Size Me List0 ListCount 1 Re
  • 字节数组到 Excel 工作簿

    我正在尝试将字节数组转换为 Excel 工作簿 当我这样做时 Response BinaryWrite renderedBytes 它工作正常并且文件符合预期 但是当我尝试用我在网上找到的这个来做到这一点时 private Object B
  • Excel 中分组经常性 CF 的净现值

    下面是 60 个期间的现金流量表 有一组经常性现金流量 Excel 中是否有一种简单的方法可以计算所有 60 个期间 每月现金流量 的 NPV 而无需创建 60 行的表格并使用 NPV 公式 因此 60 个订单项的公式如下所示 NPV PE
  • 如何使用波斯日期(Shamsi)? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想直接使用 Excel 2007 工作表中的波斯日期 Hijri Shamsi 作为计算基础 这怎么可能 我将通过以下方式将波斯日期转换
  • 以编程方式创建验证列表

    我有一组从外部源进入 VBA 代码的数据 我希望能够分配该数据以用作此工作簿中一张工作表的单元格下拉框中的验证 但是 我不想将该数据复制到工作表中 然后使用命名范围 可能有相当多的数据 而且这感觉不是很有效 我确信一定有办法 但我还没有找到
  • 使用 Master 在 VBA for PowerPoint 2010 中创建具有自定义布局的新幻灯片

    我有以下 VBA 代码来创建新的 PowerPoint 幻灯片 longSlideCount ActivePresentation Slides Count With ActivePresentation Slides Set slideO
  • 从 Excel 中的范围中提取唯一值

    下午好 I would like to extract the unique value from my range in Excel This value will shift between the columns in this ra
  • 如果单元格以文本字符串开头...公式

    我有一个公式 用于检查单元格是否以文本 A 开头返回 拾取 B 代表收集 和 C 代表预付 但它似乎不能正常工作 A 和 C 均返回预付费 LOOKUP LEFT A1 A B C Pick Up Collect Prepaid 我不知道l

随机推荐

  • 如何使 Flexbox 子项的高度达到父项的 100%?

    我正在尝试填充 Flexbox 内的 Flex 项目的垂直空间 container height 200px width 500px display flex flex direction row flex 1 width 100px ba
  • 根据参数返回类型

    我想要一个这样的函数 它的返回类型将在函数内决定 取决于value参数 但未能实现它 也许模板专业化 half pseudo code auto GetVar int typeCode if typeCode 0 return int 0
  • 如何使用 tvl1 opencv 函数计算光流

    我正在尝试找到使用 tvl1 opencv 函数计算光流的 python 示例createOptFlow DualTVL1但似乎没有足够的文档 有人可以让我这样做吗 我用过calcOpticalFlowFarneback这里提到http d
  • Linux pthreads中2个线程之间的同步

    在linux中 如何在2个线程之间同步 在linux上使用pthreads 我希望 在某些情况下 一个线程会阻塞自己 然后 它会被另一个线程恢复 在Java中 有wait notify 函数 我正在 pthreads 上寻找相同的东西 我读
  • GWT UIBinder 的 XML 架构

    我想知道 Google 是否准备好发布 或者至少有机会 生成 GWT UIBinder 的完整正式 xml 模式 我搜索了最新的整个 GWT SDK 2 4 发行版 但什么也没找到 GWT 是否只是查找 java 源或反映小部件的类来验证
  • 一张具有多个 TIMESTAMP 列的 Mysql 表

    我想要一桌两人TIMESTAMP列 一列用于跟踪记录的创建时间 另一列用于跟踪记录的修改时间 我希望这些值由数据库处理 我不希望我的应用程序层必须考虑它 我知道如果你有一个TIMESTAMP列有一个DEFAULT CURRENT TIMES
  • boost::filesystem::relative() 无法访问该文件,因为它正在被另一个进程使用

    当访问某些网络驱动器时 函数relative path base path and canonical path base path 抛出异常 消息始终是 该进程无法访问该文件 因为该文件正在被另一个进程使用 我仅在一些由我们 IT 部门运
  • Spring Security 配置:HTTP 403 错误

    我正在尝试按照网络上的指南使用 Spring Security 来保护我的网站 所以在我的服务器端我有以下课程 My WebSecurityConfigurerAdapter Configuration EnableWebSecurity
  • 如何从后台进程将部分写入缓存并从缓存中读取部分并将其渲染在rails中? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 与我之前问过的问题相关如何将数据库密集型页面从rails中的后台进程存储到缓存中 https stackoverflow com quest
  • 无法执行 Shellcode --> (Speicherzugriffsfehler (Speicherabzug geschrieben))

    我有这个功能 char code xeb x19 x31 xc0 x31 xdb x31 xd2 x31 xc9 xb0 x04 xb3 x01 x59 xb2 x05 xcd x80 x31 xc0 xb0 x01 x31 xdb xcd
  • 如果 URI 不以此开头,则重写条件包罗万象

    所以我在 htaccess 文件的底部有这个重写条件作为一个包罗万象的东西 效果很好 但我希望它忽略任何请求并以 index cfm 开头 RewriteCond REQUEST FILENAME f RewriteRule index c
  • 根据客户的设计图像确定条形色调颜色的正确 RGBA 值?

    我经常收到模型图像 它们定义了 iPhone 应用程序的外观 这些可以来自与项目一样多的不同方法 有时是 balsamiq 甚至手绘 有时是 Photoshop 常见的一件事是通常指定的条形色调颜色以匹配某些公司品牌或整体应用程序设计 如果
  • 大型、复杂的对象作为 Web 服务结果 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 女士们先生们 大家好 好的 接着我的另一个问题ASP NET Web 服务结果 代理类和类型转换 https stackoverflo
  • 发布 Google 文档插件:项目密钥与当前项目不相关

    我正在尝试按照以下说明发布一个简单的 Google 文档插件 发布附加组件 https developers google com apps script add ons publish 但是 当完成 Google Apps Marketp
  • 如何在Qt Creator中配置CDB?

    问题here https stackoverflow com q 5318691 559085与我的相同 但那里的解决方案对我不起作用 我在 Windows 7 上使用 QtCreator 2 4 1 当我尝试调试一个简单的 hello w
  • 数组解构跳过值

    My 爱彼迎风格指南 https github com airbnb javascript告诉我我应该使用数组解构对于下面的作业 const splittedArr 1 2 3 4 5 const result splittedArr 1
  • MacPython:以编程方式查找所有串行端口

    我正在寻找一种解决方案 以编程方式使用 python 返回所有可用的串行端口 此刻我正在进入ls dev tty or ls dev cu 进入终端以列出端口并将它们硬编码到 pyserial 类中 你可以这样做 import glob d
  • 执行 sidekiq 登录 heroku

    我想在我的 heroku 环境中执行 sidekiq 日志文件 但我在文档中找不到任何内容 谷歌也没有在这里帮助我 我确信它一定是这样的exec sidekiq L log sidekiq log但该命令在 Heroku 上失败 如何在 h
  • 通过触摸或点击在 Android Google 地图上添加标记

    我想在 Android 上使用 Google 地图开发地图应用程序 现在 我想通过触摸或点击地图在地图上添加标记 如何应用触摸事件将标记放在地图上 尝试使用新的谷歌地图 API v2 https developers google com
  • 将非连续列数据合并为单列

    我想将值从列 B C D 复制到列 J 同时保持值的行位置 我想将值从 E F G 列复制到 K 列 同时保持行位置 Desired results in Cols J K The colors are only to clarify my