Excel/VBA 细分字段

2023-11-29

我必须完成一项复杂的任务,但我会尝试解释。我有一个包含 23000 行数据的 Excel 文件,我正在将其导入到网站中。每个都有一个像这样的字段:

Category | other data | other data 2 

Foods/Dog/Treats Pre-Pack | 1223 | image.jpg

我需要它抓取每一行并在其下面为每个“/”添加一个新行,因此将上面的内容转换为:

Category | other data | other data 2 

[blank in original line] | 1223 | image.jpg

Foods | [blank field] | [blank field]

Foods/Dog | [blank field] | [blank field]

Foods/Dog/Treats Pre-Pack | [blank field] | [blank field]

因此,脚本需要为每个类别添加一个新行,但将原始类别保留在其前面。于是转身category/category2/category 3分为 4 行:[blank] - category - category/category2 - category/category2/category 3

有谁知道执行此操作的方法或脚本?

谢谢,西蒙

注意:该工作表称为“测试”,类别列从 E2 开始,转到 E23521

我有以下脚本:

Sub test()
    Dim a, i As Long, ii As Long, e, n As Long
    Dim b(), txt As String, x As Long
    With Range("a1").CurrentRegion
        a = .Value
        txt = Join$(Application.Transpose(.Columns(5).Value))
        With CreateObject("VBScript.RegExp")
            .Global = True
            .Pattern = "/"
            x = .Execute(txt).Count * 2
        End With
        ReDim b(1 To UBound(a, 1) + x, 1 To UBound(a, 2))
        For i = 1 To UBound(a, 1)
            If a(i, 5) <> "" Then
                For Each e In Split(a(i, 5), "/")
                    n = n + 1
                    For ii = 1 To UBound(a, 2)
                        b(n, ii) = a(i, ii)
                    Next
                    b(n, 5) = Trim$(e)
                Next
            End If
        Next
        .Resize(n).Value = b
    End With
End Sub

这似乎根据我的需要创建了一个新行,但并没有使斜杠结构与每个行一起向上移动。并且不要在所有新类别上添加空行并使原始类别值留空。

SOLVED:

Sub splitEmUp()
    Dim splitter() As String 'this is storage space for the split function
    Dim i As Integer ' main-loop for counter "which cell we are on"
    Dim j As Integer ' splitter for-loop counter "which section of the split are we on"
    Range("E2").Activate 'starting in cell e2 because row 1 is headers and category is located in the B column

   For i = 0 To 24000 'from beginning to end i=0 means e2, i=1 means e3
        ActiveCell.Offset(i, 0).Value = Replace(ActiveCell.Offset(i, 0).Value, " / ", "!@#")
        splitter = Split(ActiveCell.Offset(i, 0), "/") 'split the cell based on / and store it in splitter
        If (UBound(splitter)) > 0 Then 'if a split occurred
            ActiveCell.Offset(i, 0).Value = "" 'set the activecell to blank
            Debug.Print i
            ActiveCell.Offset(i + 1, 0).EntireRow.Insert shift:=xlDown, copyorigin:=xlFormatFromLeftOrAbove 'insert a new row and shift everything down

            ActiveCell.Offset(i + 1, 0).Value = splitter(0) 'initialize the "Down" cells
            ActiveCell.Offset(i + 1, 0).Value = Replace(ActiveCell.Offset(i + 1, 0).Value, "!@#", " / ")
            For j = 1 To UBound(splitter)
                ActiveCell.Offset(i + j + 1).EntireRow.Insert shift:=xlDown, copyorigin:=xlFormatFromLeftOrAbove 'create another row if it needs to
                ActiveCell.Offset(i + (j + 1), 0).Value = ActiveCell.Offset(i + j).Value & "/" & splitter(j) 'fill out the new row
                ActiveCell.Offset(i + (j + 1), 0).Value = Replace(ActiveCell.Offset(i + (j + 1), 0).Value, "!@#", " / ")
            Next
            i = i + UBound(splitter) + 1 'need to step I past the new cells
            ReDim splitter(0)
            Erase splitter 'erase and eliminate splitter to avoid carry over.

        End If
    Next

End Sub

这就是我想出来的。请务必更改工作表名称以适合您的工作簿。另请务必更改输入范围以适合您自己的单元格输入范围。

Function SplitAndWrite(inputCell As Range, TopOfOutputRange As Range, sep As String) As Range

Dim texts() As String, i As Integer, outputText As String
texts = Split(inputCell.Value, sep)
outputText = ""
TopOfOutputRange = ""   'your blank line
For i = LBound(texts) To UBound(texts)
    outputText = outputText & sep & texts(i)
    TopOfOutputRange.Offset(i + 1) = outputText
Next i

Set SplitAndWrite = TopOfOutputRange.Offset(UBound(texts) + 1)

End Function

Sub THEPOPULATOR()

    Dim s3 As Worksheet, s4 As Worksheet
    Set s3 = Sheets("Sheet1")
    Set s4 = Sheets("Sheet2")
    Dim inputrange As Range, c As Range, outputrange As Range
    Set outputrange = s4.Range("A1")
    Set inputrange = s3.Range(s3.Cells(2, 1), s3.Cells(2, 1).End(xlDown)) 'cells(2,1) = "A1". change this to your top input cell. then the second half will find the bottom cell on its own. This is the same as pressing Ctrl+down

    For Each c In inputrange
        s3.Range(c.Offset(0, 1), c.Offset(0, c.End(xlToRight).Column)).Copy outputrange.Offset(1, 1)
        Set outputrange = SplitAndWrite(c, outputrange.Offset(1), "/")
    Next c

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

Excel/VBA 细分字段 的相关文章

  • Excel - 确定排列的奇偶性

    我正在处理一个 Excel 工作表 需要确定大小数字的垂直数组的奇偶校验N 该数组包含来自的每个数字1 to N每一次正好一次 在这种情况下 奇偶校验被定义为将加扰数组转换为从小到大排序的数组所需的交换次数 例如 数组 3 1 2 4 具有
  • 使用VBA复制垂直列并沿对角线粘贴

    我有一列数据 我们称之为 A 列 其中有 35 行数据 如何在此列上循环 然后将每个数据点粘贴到另一张工作表中 同时为每个循环循环增加列和行 换句话说 我寻求对角粘贴在第二张纸中 有没有一种简单的方法可以在 VBA 中执行此类操作 不要循环
  • 如何将 JavaScript 图表导出到 Excel 文件 (HighCharts)

    我必须将 Javascript 图表 HighCharts 导出到 Excel 文件中 图表在div中呈现 但excel不呈现javascript生成的html css内容 仅呈现没有样式的文本 一个解决方案是将图表渲染为图像 jpeg 但
  • VBA 激活 Internet Explorer 窗口

    我正在制作一个宏 用于打开 Internet Explorer 导航并登录网站 一切正常 但我需要将 IE 窗口放在前面并激活它 这样我就可以使用SendKeys在上面 我发现网站和视频在名为的命令上有不同的方法AppActivate我已经
  • VBA - HTML 抓取问题

    我正在尝试从网站上抓取拍卖数据https www rbauction com heavy equipment auctions https www rbauction com heavy equipment auctions 我当前的尝试是
  • 如何高效打开巨大的excel文件

    我有一个 150MB 的单页 Excel 文件 在一台非常强大的机器上使用以下命令打开大约需要 7 分钟 using python import xlrd wb xlrd open workbook file sh wb sheet by
  • 从网站上的表格中抓取数据,而无需搜索标签

    这是这个问题的延续使用 InStr 搜索引号 空格 冒号等 https stackoverflow com questions 52673819 using instr to search for quotes spaces colons
  • phpexcel xlsx 的千位分隔符

    我在用着 PHPExcel Shared String setThousandsSeparator 为 Excel 文件定义千位分隔符 多亏了它 单元格显示为55 452代替55452 不过 单元格值是整数 55452 因此可以对其进行计算
  • Countif 不适用于小时和/或日期

    您好 我有 3 列内的数据 A 目的地 例如洛杉矶 B 承运人 例如 Ups C 发货时间 预计 4 00 使用的时间是24小时时间 不含Am Pm 我需要进行计数才能知道在特定时间我们有多少批货物 尝试过 COUNTIF A1 A100
  • Perforce Excel 文件差异

    我有一堆 excel 文件放在 perforce 上 我想对这些 excel 文件进行 diff 类似于我在 perforce 中对其他文件 如 java cs 等 所做的操作 我尝试寻找一个插件 发现 P4OFC 只适合对 word 文件
  • excel 2010刷新BackgroundQuery中运行时错误1004

    我正在尝试用 vba 编写一个脚本 用于将多个文本文件导入 Excel 一张纸 然后将它们绘制在一张图表上 我面临一个问题刷新后台查询命令并出现 1004 运行时错误 我怎样才能解决它 谢谢 埃亚勒 这是我的代码 Sub fring1 Di
  • Excel 工作簿 - 从 C# 读取速度非常慢?

    正在尝试读取 Excel 工作簿 发现读取 3560 行 7 列的工作表需要很长时间 大约需要 1 分 17 秒 我所做的就是循环遍历整个工作表并将值存储在列表中 这是正常现象 还是我做错了什么 static void Main strin
  • 如何使用 Nodejs 创建 Excel 文件?

    我是一名 Nodejs 程序员 现在我有一个数据表 我想将其保存为 Excel 文件格式 我该怎么做呢 我找到了一些 Node 库 但其中大多数是 Excel 解析器而不是 Excel 编写器 我使用的是 Linux 服务器 因此需要一些可
  • VBA Shell 并等待退出代码

    我正在打包一个办公应用程序 VBA 它调用 C 控制台应用程序来执行应用程序 大型模拟程序 的一些繁重工作 我希望能够让 VBA 应用程序等待控制台应用程序完成并从控制台应用程序检索退出代码 我已经能够做到前者 但尚未能够从应用程序中检索退
  • 如何在 Excel 中对一组数据进行排序以匹配另一组数据?

    我有一个不按字母或数字顺序排列的数据列表 我想对同一日期的第二个列表进行排序以匹配第一个列表 我无法更改数据的顺序 我的目标是将第二组中的附加数据粘贴回第一个数据集中 DATA SET A DATA SET B 22350 BH160 10
  • 在合并的单元格中选择、插入照片并将其居中

    我是一名研发面包师 正在为我的团队制作食谱模板 模板中有照片 但我需要轻松地允许他们单击一个按钮 打开照片的文件选择器 然后将该照片放在合并的单元格中 我其实不太擅长做这个 Sub InsertPhotoMacro Dim photoNam
  • VBA 有没有办法了解未使用的变量?

    标准 VBA 编辑器中是否有工具 方法或设置来警告已被修改的变量Dim med 但没有被使用 MZ Tools http www mztools com index aspx将搜索您的代码并告诉您哪些内容未被使用 VBA的版本可以找到her
  • Excel 数字缩写格式

    这是我想要完成的任务 Value Display 1 1 11 11 111 111 1111 1 11k 11111 11 11k 111111 111 11k 1111111 1 11M 11111111 11 11M 11111111
  • 如何在Power Query中对N列求和

    我的数据每月都会更新 因此我尝试创建一个强大的查询表 该表将显示我创建的枢转 N 列的总和 但我似乎不知道如何在强大的查询中执行此操作 我目前有这个代码 旋转后 创建要求和的列的列表 添加索引列以限制每行 添加一列 该列对该行的列进行求和
  • 在Excel中,我可以使用超链接来运行vba宏吗?

    我有一个包含多行数据的电子表格 我希望能够单击一个单元格 该单元格将使用该行中的数据运行宏 由于行数总是在变化 我认为每行的超链接可能是最好的方法 ROW MeterID Lat Long ReadX ReadY ReadZ CoeffA

随机推荐

  • python 正则表达式仅匹配最后一次出现

    我在为重复字符串模式实现正则表达式时遇到一些问题 gt gt gt re findall w d a b c d e f e f 我也想购买其他物品 非常感谢帮助 去除 你的模式匹配all出现次数 但该组只能捕获一次出现情况 您不能以这种方
  • 无法在自定义 SurfaceView 类之上进行绘制

    我用过示例指南创建一个名为 CameraPreview 的类 该类继承自 SurfaceView 类 并显示相机预览 我还创建了另一个名为 DrawOnTop 的自定义视图类 它直接从 View 继承 我用它来在预览顶部绘制文本和其他项目
  • 将可调用线程设为守护进程

    如何将 Callable 线程设置为守护线程 这就是我正在尝试的 我正在尝试执行一组线程 其中一个线程未完成并进入无限循环 它的作用是即使所有代码语句都被执行 程序的主线程也不会终止 之后主线程进入挂起模式 这是相同的代码片段 public
  • 使用 Swift 以编程方式在 Mapkit 中倾斜地图

    我想在启动时倾斜地图 与用户用两根手指向上或向下滚动时的操作相同 使用 Swift 可以做到这一点吗 MKMapView 类参考 http goo gl djHXPn 看着那 这camera财产 相机对象定义了地图表面上方的一个点 可以从该
  • 读取 Json 序列化 c#

    我正在尝试从这个 json 文本中获取 id 我不知道如何获取它不允许我创建 json 对象 我尝试反序列化它这样做 public async Task
  • C++ 内存映射文件实现

    我在实现内存映射文件时没有任何问题 问题是 假设这返回一个有效的内存视图 void pBuf MapViewOfFile hMapFile FILE MAP WRITE 0 0 0 除了使用 memcpy 向其提供数据之外 我还有其他选择吗
  • 将表达式转换为数据类型 int 以进行基本统计时发生算术溢出错误

    我正在尝试执行一个计算平均值 最小值 最大值和计数的基本查询 SELECT MIN column as min MAX column as max AVG column as avg count as count FROM database
  • 如何在startup.cs的Configure方法中使用ConfigurationBinder

    ASP NET MVC 6 beta5 我尝试使用 config json 来激活 非活动日志记录 public IConfiguration Configuration get set public Startup IHostingEnv
  • 在Python中递归地展平嵌套列表[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 中的生成器 并尝试利用实现展平函数的简单递归方案 也就是说 一个函数将可能包含子列表的列表作为输入 并输出仅迭代输入的原子元素的可迭代对象 So print list flatten
  • 可以从 WCF 与 Windows 服务进行通信

    我有点新windows services 我有WCF service在一台机器 机器1 上运行 Windows服务在另一台机器 机器2 上运行 我需要我需要运行一个powershell使用 WCF 服务在计算机 2 上编写脚本 我不知道从哪
  • 我可以将 32 位 DLL 加载到 Windows 上的 64 位进程中吗?

    我最近升级了一个 C Windows 服务以作为 64 位 net 进程运行 通常 这很简单 但系统使用了用 C 编写的 32 位 DLL 无法将此 DLL 转换为 64 位 因此我将 DLL 包装在单独的 32 位 net 进程中 并通过
  • 异步任务超时

    我有这段代码来发出异步 HTTP 请求 public static void MakeRequest Uri uri Action
  • Joomla插件:如何获取文章标题和文章id

    我在 Joomla 1 6 中开发了简单的插件 我坚持 如何获取文章标题和文章网址 如果尝试打印以下语句 我不会得到任何输出 echo article gt title echo article gt id 我把这个写在php文件中 没有使
  • Pi Zero W 连接到两个外设(GPIO 和 USB):如何同时连续读取两个外设?

    我有一个 raspberry pizero W 它通过 GPIO 引脚连接到流量计 并通过 USB 连接到条形码扫描仪 我有一个 python 脚本 它使用回调函数在检测到 GPIO 输入时发出警报 该 python 脚本需要在 pizer
  • 提交表单后 jQuery 页面重定向

    我有这样的表格
  • 让 foo(衍生对象) 调用 foo(Base const&) 而不是模板函数?

    鉴于此代码 template lt class C gt void foo C const o o nosuch struct Base void foo Base const struct Derived Base auto main g
  • 通过ajax提交多个表单

    我试图通过 ajax post 提交多个表单 但问题是服务器在 post 中返回一个空数组 这是我的JS中的代码 check test click function e e preventDefault e stopPropagation
  • 在多用户访问环境中立即“锁定”一条记录

    因此 Access 中的记录锁定非常糟糕 我无法使用内置记录锁定 因为它锁定记录的 页面 而不仅仅是单个记录 我已尝试更改使用记录级锁定的设置 但它仍然锁定页面而不仅仅是锁定一条记录 但即使我可以让它工作 它也无法解决我的问题 因为在用户开
  • 首先,反思动态类型以判断它是否是动态类型

    有没有一种方法可以判断对象分配的类型是否是动态类型 例如 dynamic foo GetCat Console WriteLine foo is Cat ToString will print True because at the exe
  • Excel/VBA 细分字段

    我必须完成一项复杂的任务 但我会尝试解释 我有一个包含 23000 行数据的 Excel 文件 我正在将其导入到网站中 每个都有一个像这样的字段 Category other data other data 2 Foods Dog Trea