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

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(使用前将#替换为@)

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

  • 如何在网页中显示嵌入的 Excel 文件?

    我想允许在网页中查看嵌入的 Excel 报告 有什么办法吗 我不想使用 ActiveX 或 OWC Office Web 组件 我只想从 Internet Explorer 应用程序打开现有文件 我不希望用户下载然后打开它 使用 ifram
  • 使用VBA复制垂直列并沿对角线粘贴

    我有一列数据 我们称之为 A 列 其中有 35 行数据 如何在此列上循环 然后将每个数据点粘贴到另一张工作表中 同时为每个循环循环增加列和行 换句话说 我寻求对角粘贴在第二张纸中 有没有一种简单的方法可以在 VBA 中执行此类操作 不要循环
  • 将按颜色过滤的行复制到新工作表

    我有一个 Excel 电子表格 如下所示 Job1 Job2 Job3 Job4 Job5 Job1 Job2 Job3 Job4 Job5 每行和列之间的单元格颜色不同 我需要按橙色对每列进行排序 然后将行名称复制到新工作表中 所以最后我
  • 如何高效打开巨大的excel文件

    我有一个 150MB 的单页 Excel 文件 在一台非常强大的机器上使用以下命令打开大约需要 7 分钟 using python import xlrd wb xlrd open workbook file sh wb sheet by
  • 将最后几个功能添加到我的调度模板生成器中

    感谢 StackOverflow 上的一些出色的人 我几乎完成了调度模板生成器的代码 我还想补充三件事 但我遇到了一些麻烦 当前细分 我有两张表 2 员工列表 和 X 模板 员工列表中的值是从单元格 D9 开始的一列员工姓名 然后将员工值转
  • xlwings: 删除一个列 | Excel 中的行

    如何删除 Excel 中的一行 wb xw Book Shipment xlsx wb sheets Page1 1 range 1 1 clear clear 用于删除内容 我想删除该行 我很惊讶 clear 函数有效 但 delete
  • 在 Excel 表格中选择多列的代码

    我是 Excel VBA 新手 我需要修改我的代码 以便我能够进一步进行 我想在 Excel 表格中选择多个表格列 这是我的代码 Dim ws As Worksheet Dim tbl As ListObject Set ws Sheets
  • 如何在VBA编辑器中跳转到行号?

    我在 Office 2010 中使用 VBA 在顶部 有一个带有行号和列号的框 例如 Ln 1480 Col 17 有没有办法在代码编辑中 而不是在执行中 直接跳转到另一个行号 就像我使用的那样Ctrl G在记事本中 这个MSDN答案 ht
  • 当时间为 00:00 时,Pandas 读取 excel 返回类型对象

    在更新版本的 Pandas 中 我使用的是 1 2 3 当从 Excel 文件读取时间时 时间为 00 00 00 时会出现问题 下面的脚本 其中 filepath 是我的 Excel 文件的路径 其中包含一个标题名为 Time 的列 im
  • Excel 工作簿 - 从 C# 读取速度非常慢?

    正在尝试读取 Excel 工作簿 发现读取 3560 行 7 列的工作表需要很长时间 大约需要 1 分 17 秒 我所做的就是循环遍历整个工作表并将值存储在列表中 这是正常现象 还是我做错了什么 static void Main strin
  • Office excel将CORS请求作为跨域请求

    我正在尝试从我的 Excel 插件发出跨域请求 正如这里所建议的 http dev office com docs add ins develop addressing same origin policy limitations http
  • 在合并的单元格中选择、插入照片并将其居中

    我是一名研发面包师 正在为我的团队制作食谱模板 模板中有照片 但我需要轻松地允许他们单击一个按钮 打开照片的文件选择器 然后将该照片放在合并的单元格中 我其实不太擅长做这个 Sub InsertPhotoMacro Dim photoNam
  • SQL Server,插入 Excel“链接服务器”时出现“无效列名”错误

    我有一个简单的 Excel 电子表格文档 运行 Office 2013 我使用 Microsoft Office 15 0 Access 数据库引擎 OLE DB 提供程序 将其用作数据库 我可以使用 MS SQL Server Manag
  • VBA 完成 Internet 表单

    我正在寻找将 Excel 中的值放入网页的代码 Sub FillInternetForm Dim IE As Object Set IE CreateObject InternetExplorer Application IE naviga
  • VBA 中 AND 函数如何工作?

    如果这是一个愚蠢的问题 我很抱歉 但是 Excel VBA AND 函数是否检查其中的每个条件然后继续 或者在第一个 FALSE 条件处停止而不检查其他条件 我想知道出于优化目的 但到目前为止在网上没有找到任何相关信息 提前致谢 示例 如果
  • VBA 中的匈牙利语好吗?

    我在 Net 中不使用匈牙利语 str int 前缀 但我仍然发现它在 VBA 中很有用 因为在 VBA 中很难看到类型 这很糟糕吗 不必要 也许我错过了一些东西 我真的很感激任何反馈 我想知道有一段时间了 谢谢大家 我想说 这种匈牙利符号
  • VBA ByRef 参数类型不匹配

    最初在我的主代码部分中 我有一个丑陋的 if 语句 尽管它会运行丑陋 我决定将其设为我要调用的函数 这导致我收到错误 编译错误 ByRef 参数类型不匹配 我的假设是该函数需要正确引用 尽管我一直在阅读文档并且不明白为什么 gt 声明 Sh
  • 如何在Power Query中对N列求和

    我的数据每月都会更新 因此我尝试创建一个强大的查询表 该表将显示我创建的枢转 N 列的总和 但我似乎不知道如何在强大的查询中执行此操作 我目前有这个代码 旋转后 创建要求和的列的列表 添加索引列以限制每行 添加一列 该列对该行的列进行求和
  • 两个日期之间的小时数在 Excel 中不起作用

    根据要求 我提供了一张简化的屏幕截图来说明该问题 如您所见 我减去了两个日期并将其格式化为 h mm ss 为什么这不能提供两个日期之间经过的总小时数 有一个更好的方法吗 下面有一个很好的答案 但我试图弄清楚为什么按照此屏幕截图中所示的方式
  • 检查未绑定控件是否具有值的正确方法

    简单场景 一个表单和一个文本框 未绑定 Text1 If lt gt Text1 Then MsgBox Not Empty End If 上面的代码有效 表达方式 lt gt Text1如果文本框包含字符 则计算结果为 True 无论文本

随机推荐

  • 如何使 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