拆分具有多行文本和单行文本的行

2024-05-13

我试图弄清楚如何拆分数据行,其中行中的 B、C、D 列包含多行,而其他列不包含多行。我已经弄清楚如何拆分多行单元格,如果我将这些列复制到新工作表中,手动插入行,然后运行下面的宏(仅适用于 A 列),但我在编码时迷失了休息。

Here's what the data looks like: enter image description here

因此,对于第 2 行,我需要将其分为 6 行(单元格 B2 中的每一行各一行),其中单元格 A2 中的文本位于 A2:A8 中。我还需要将 C 列和 D 列按照与 B 相同的方式进行拆分,然后E栏:CP与A列相同。

这是我用于拆分 B、C、D 列中的单元格的代码:

Dim iPtr As Integer
Dim iBreak As Integer
Dim myVar As Integer
Dim strTemp As String
Dim iRow As Integer
iRow = 0
For iPtr = 1 To Cells(Rows.Count, col).End(xlUp).Row
    strTemp = Cells(iPtr1, 1)
    iBreak = InStr(strTemp, vbLf)
    Range("C1").Value = iBreak
        Do Until iBreak = 0
        If Len(Trim(Left(strTemp, iBreak - 1))) > 0 Then
            iRow = iRow + 1
            Cells(iRow, 2) = Left(strTemp, iBreak - 1)
        End If
        strTemp = Mid(strTemp, iBreak + 1)
        iBreak = InStr(strTemp, vbLf)
    Loop
    If Len(Trim(strTemp)) > 0 Then
        iRow = iRow + 1
        Cells(iRow, 2) = strTemp
    End If
Next iPtr
End Sub

以下是示例文件的链接(请注意,该文件有 4 行,实际工作表有超过 600 行):https://www.dropbox.com/s/46j9ks9q43gwzo4/Example%20Data.xlsx?dl=0 https://www.dropbox.com/s/46j9ks9q43gwzo4/Example%20Data.xlsx?dl=0


这是一个相当有趣的问题,我以前见过一些不同的问题。我继续为它编写了一个通用解决方案,因为它似乎是一段值得我自己保留的有用代码。

我对数据几乎只有两个假设:

  • 返回值表示为Chr(10)或者哪个是vbLf持续的。
  • 属于较低行的数据有足够的返回值以使其对齐。这似乎是你的情况,因为有返回字符似乎使事情按照你想要的方式排列。

输出的图片,缩小以显示所有数据A:D。注意下面的代码默认处理所有列并输出到新工作表。如果需要,您可以限制列数,但它是too很容易将其变得通用。

Code

Sub SplitByRowsAndFillBlanks()

    'process the whole sheet, could be
    'Intersect(Range("B:D"), ActiveSheet.UsedRange)
    'if you just want those columns
    Dim rng_all_data As Range
    Set rng_all_data = Range("A1").CurrentRegion

    Dim int_row As Integer
    int_row = 0

    'create new sheet for output
    Dim sht_out As Worksheet
    Set sht_out = Worksheets.Add

    Dim rng_row As Range
    For Each rng_row In rng_all_data.Rows

        Dim int_col As Integer
        int_col = 0

        Dim int_max_splits As Integer
        int_max_splits = 0

        Dim rng_col As Range
        For Each rng_col In rng_row.Columns

            'splits for current column
            Dim col_parts As Variant
            col_parts = Split(rng_col, vbLf)

            'check if new max row count
            If UBound(col_parts) > int_max_splits Then
                int_max_splits = UBound(col_parts)
            End If

            'fill the data into the new sheet, tranpose row array to columns
            sht_out.Range("A1").Offset(int_row, int_col).Resize(UBound(col_parts) + 1) = Application.Transpose(col_parts)

            int_col = int_col + 1
        Next

        'max sure new rows added for total length
        int_row = int_row + int_max_splits + 1
    Next

    'go through all blank cells and fill with value from above
    Dim rng_blank As Range
    For Each rng_blank In sht_out.Cells.SpecialCells(xlCellTypeBlanks)
        rng_blank = rng_blank.End(xlUp)
    Next

End Sub

怎么运行的

代码中有注释来突出显示正在发生的事情。以下是高级概述:

  • 总的来说,我们迭代数据的每一行,单独处理所有列。
  • 当前单元格的文本是Split使用vbLf。这给出了所有单独行的数组。
  • 计数器正在跟踪添加的最大行数(实际上这是rows-1因为这些数组是0-indexed.
  • 现在可以将数据输出到新工作表中。这很容易,因为我们可以转储数组Split为我们创造的。唯一棘手的部分是将其放置在纸张上的正确位置。为此,有一个用于当前列偏移的计数器和一个全局计数器来确定需要偏移的总行数。这Offset将我们移动到正确的单元格;这Resize确保输出所有行。最后,Application.Transpose需要因为Split返回一个行数组,我们正在转储一列。
  • 更新计数器。列偏移量每次都会增加。更新行偏移量以添加足够的行来覆盖最后一个最大值 (+1因为这是0-indexed)
  • 最后,我到达使用我的瀑布填充(您之前的问题) https://stackoverflow.com/questions/30537813/count-lines-of-text-in-a-cell/30538117#30538117在为确保没有空白而创建的所有空白单元格上。我放弃错误检查,因为我假设存在空白。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

拆分具有多行文本和单行文本的行 的相关文章

  • 当第二个工作表中存在值时删除整行

    我有 2 张纸 sheet1 和sheet2 我在单元格 A3 sheet1 中有一个值 该值不是恒定的 Sheets2 中还有许多文件 我想做的是 当单元格 A3 Sheet1 中的值与 A 列 Sheet2 中的值相同时 它将删除找到该
  • 将 VBA 字符串转换为双精度

    我正在使用非常基本的 VBA for word 编码来创建一个模板 该模板可以从 Windows 中的其他屏幕中提取数据 当它提取数字时 它们被格式化为字符串 我现在需要将字符串转换为双精度 以便对它们进行加 减 我一直在尝试一切 但似乎无
  • VBA 代码基准测试

    对 VBA 代码进行基准测试最准确的方法是什么 在我的例子中 我正在 Excel 中测试代码 除了下面的 2 种之外 还有其他对代码进行基准测试的技术吗 如果有 该方法的优点 缺点是什么 这里有两种流行的方法 First Timer Sub
  • 转置 CopyFromRecordset Excel VBA

    我的 Excel VBA 中有以下代码 可将 SQL 中的表中的数据复制到 Excel 中 该数据从单元格 C2 开始水平插入 但我希望将其垂直插入到 C 列 Sheets Control Range C2 CopyFromRecorset
  • Delphi - 通过 ADO 查询获取 Excel 行

    我有以下 Excel 文件 我将 AdoConnection ConnectionString 设置为 AdoConnection ConnectionString Provider Microsoft Jet OLEDB 4 0 Data
  • VBScript for Excel:如何选择源数据 (.SetSourceData)?

    我已经在谷歌和这里搜索了这个问题的答案 但没有成功 如果之前有人问过 那么我道歉 我正在尝试使用 VBScript 自动执行一些管理任务 此特定脚本的目的是从文本文件 包含文本和数字列 中获取一些使用情况统计信息 并根据数据制作折线图 创建
  • 从 .Net 将简单数据插入 Excel 文件的最简单方法

    我有一个 Excel 文件 大约有 10 列和 1 20 行 我需要插入 1 20 行包含各种数据元素 我想知道是否有一种方法可以将一些标签放入 Excel 文件中 以便可以找到并替换它们 将列标记为 名称 的东西 这样我就可以在代码中说
  • 如何从 jQuery 获取 ajax 请求下载 Excel

    我有一个 Spring MVC 视图 它提供了一个 excel 文件 但是 我现在修改了该过程 以便用户获得一个模式框 他们可以在下载 excel 之前在其中选择一些选项 这些选定的选项将发送到视图 我的请求看起来像这样 get downl
  • 如何使用 Excel 公式将一个工作表中的单元格范围引用到另一个工作表?

    我有一个包含工作表 Sheet1 和 Sheet2 的工作表 我试图引用从 Sheet2 到 Sheet1 的一系列单元格 我知道如何引用工作表单元格 例如 Sheet2 A1但我怎样才能对单元格范围做同样的事情 例如A1 F1我试过 Sh
  • 用一行代码隐藏所有自动筛选下拉列表

    我有一个相当大的 Excel 文件 其中包含大量数据 我使用验证列表 该列表通过 VBA 生成过滤器 因为我有 52 列 一年中的每周一列 所以我会自动在每个标题中看到一个小下拉箭头 我使用这段代码手动隐藏每列的下拉箭头 Worksheet
  • 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
  • C# - 如何迭代 Excel._Worksheet 中的所有行?

    我希望以编程方式从 Excel 工作表中提取数据并将其插入数据库表中 如何确定工作表中的列数和行数或以其他方式迭代行 I have Excel Worksheet worksheet Excel Worksheet workbook Act
  • 在 Excel 中将多组列相互叠置

    所以我有多组 3 列 每组始终采用相同的列顺序 SKU 销售 日期 我想知道是否有 VBA 脚本或其他方法可以执行以下操作 1 Copy G I 2 Paste into A C 3 Copy J L 4 Paste into A C Un
  • 包含另一个单元格值的条件格式文本的公式

    我有一个 A 列 每个单元格中包含 1 4 个单词的短语 我还有 4 个包含 1 个单词值的单元格 B1 C1 D1 和 E1 我需要设置条件格式 这样 1 如果 A 列单元格中的文本包含与上述单元格之一的值匹配的单词 则以红色突出显示该单
  • 使用 Microsoft Graph API 从 Sharepoint 站点提取 Excel.xlsx 工作簿

    正如标题中所述 我一直在尝试使用 Microsoft Graph API 从我们公司的 Sharepoint 站点提取 Excel 工作簿 我能够检索文件的元数据 但是当我添加 workbook 分段到 URL 我收到以下错误 error
  • java代码的等效vb代码

    谁能告诉我这段Java代码到底做了什么 SecureRandom random SecureRandom getInstance SHA1PRNG byte bytes new byte 20 synchronized random ran
  • 当 vbscript.regexp 工作时,VBA RegExp 会导致编译错误

    我正在为 Outlook 2013 的 VBA 编写一个脚本 它使用正则表达式 我发现的每个示例似乎都使用Set regex New RegExp创建一个正则表达式对象 当我尝试这个时 我得到了编译错误 用户定义类型未定义 我设法使用正则表
  • 以编程方式创建验证列表

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

随机推荐

  • Apollo 更新查询未调用?

    我正在 GitHunt React 和 GitHunt API 中研究 Apollo pub sub 当我运行这些应用程序并输入新评论时 评论将通过调用提交来保存 然后 updateQueries 代码块在此处运行 const Commen
  • 具有自签名证书的 Alamofire / ServerTrustPolicy

    我想使用 Alamofire 通过带有自签名证书的 https 连接与我的服务器进行通信 我的环境在本地主机上运行 我尝试连接 但响应始终如下所示 Success false Response String nil 我用下面的代码完成了它
  • 如何在 Linq where 子句中指定动态字段名称?

    如果您创建一个包含 Linq 条件的 Filter 对象 该对象通常位于如下的 where 子句中 var myFilterObject FilterFactory GetBlank myFilterObject AddCondition
  • 如何使用 QuerySelector 获得第二个匹配项?

    以下语句给出了该类的第一个元素titanic element document querySelector titanic 我如何检索具有相同类的第二个元素 Use document querySelectorAll https devel
  • 我想使用对话框显示两个数字选择器

    我试图仅使用 java 在对话框上显示两个数字选择器 代码正在工作 但我无法将其排列为相等的宽度 这是我的代码 RelativeLayout relative new RelativeLayout mContext final Number
  • Fiddler 会话对象文档

    在哪里可以找到有关 Fiddler Session 对象的属性和方法的文档 我正在 Fiddler 中创建一些自定义规则 js 以进行故障排除 安装脚本编辑器并单击 视图 gt 类资源管理器 http www telerik com dow
  • 如何在模型更改时停止ListView“跳跃”

    我需要做什么 我需要创建一个聊天窗口用一个ListView在 QML 中存储聊天消息 我设置listView positionViewAtEnd 以便跟踪最后的消息 我禁用positionViewAtEnd当我向上滚动时 我可以阅读过去的消
  • 使用 Python-AppKit-Objective C 转换为预组合 Unicode 字符串

    苹果公司的这份文件技术问答 QA1235 http developer apple com qa qa2001 qa1235 html描述了一种将 unicode 字符串从组合版本转换为分解版本的方法 由于我对包含某些字符 例如重音符号 的
  • 如何在编译时生成嵌套循环

    我有一个整数N我在编译时就知道了 我也有一个标准 数组保存描述形状的整数N维数组 我想在编译时使用元编程技术生成嵌套循环 如下所述 constexpr int N 4 constexpr std array
  • 如何在 Ruby 中列出局部变量?

    def method a 3 b 4 some method that gives a b end 局部变量 http ruby doc org core Kernel html method i local variables 它输出符号
  • 在 TinyMCE 中插入换行符而不是

    我已按如下方式初始化 TinyMCE 我想在用户按 Enter 键而不是段落时强制换行 我正在尝试关注 但没有成功 我正在使用 TinyMCE 版本 3 3 8 tinyMCE init mode exact theme advanced
  • Travis CI 与 Clang 3.4 和 C++11

    Travis CI 是否可以与支持 C 11 的 Clang 一起使用 我想要 Clang 而不是 GCC 我已经在 Travis CI 中使用了 GCC 4 8 看来预安装的版本不支持 C 11 我安装任何新版本的所有尝试都结束了因为这个
  • Express.js - 监听关闭

    我有一个使用 Express 的 Node js 应用程序 在该应用程序中 我有一个如下所示的块 const app require app const port process env PORT 8080 const server app
  • T-SQL 按最旧日期和唯一类别选择行

    我正在使用 Microsoft SQL 我有一个表 其中包含按两个不同类别存储的信息和一个日期 例如 ID Cat1 Cat2 Date Time Data 1 1 A 11 00 456 2 1 B 11 01 789 3 1 A 11
  • 如何在 Visual Studio Code 中缩进/格式化所选代码?

    我想缩进 Visual Studio Code 中的特定代码部分 I read 如何在 Visual Studio Code 中设置代码格式 https stackoverflow com questions 29973357 它提供了缩进
  • 根据两个预先计算的直方图报告两个样本的 K-S 统计量

    Problem 在这里 我绘制了存储在文本文件中的 2 个数据集 在列表中 dataset 每个包含 218 亿个数据点 这使得数据太大而无法作为数组保存在内存中 我仍然能够将它们绘制为直方图 但我不确定如何通过2 样本KS测试 http
  • 如何使用 PHP 中的 jQuery/AJAX 调用迭代 JSON 数组? [复制]

    这个问题在这里已经有答案了 可能的重复 循环Json对象 https stackoverflow com questions 684672 loop through json object 我有一个 PHP 函数 data php 它从外部
  • 使用 AesManaged“填充无效且无法删除”

    我正在尝试使用 AesManaged 进行简单的加密 解密 但在尝试关闭解密流时不断出现异常 这里的字符串被正确加密和解 密 然后在 Console WriteLine 打印正确的字符串后 我收到 CryptographicExceptio
  • 在 Fedora 上安装 SDL

    我安装了 FEDORA 和 SDL 并希望在编译时用 C 语言对图形进行编程 我收到了很多对 SDL MapRGB SDL Init 等未定义的引用 我搜索了文件系统 SDL dll 丢失 如何解决这个问题呢 Linux不使用 dll文件来
  • 拆分具有多行文本和单行文本的行

    我试图弄清楚如何拆分数据行 其中行中的 B C D 列包含多行 而其他列不包含多行 我已经弄清楚如何拆分多行单元格 如果我将这些列复制到新工作表中 手动插入行 然后运行下面的宏 仅适用于 A 列 但我在编码时迷失了休息 Here s wha