excel - 如果单元格包含“,”,如何复制行并将其插入到下面的新行中,并删除原始单元格中“,”之后的内容
问题描述
如果 D 列中的单元格包含“,”,我正在尝试复制一行并直接插入到下方的新行中。我想做的还有更多,但更容易展示我想要的之前和之后的样本。
前
Jon Junior Male A, X
Pete Freshman Male A, X
Tyler Senior Male A, X, C
Dave Senior Male A, C, P, U
后
Jon Junior Male A
Jon Junior Male X
Pete Freshman Male A
Pete Freshman Male X
Tyler Senior Male A
Tyler Senior Male X
Tyler Senior Male C
Dave Senior Male A
Dave Senior Male C
Dave Senior Male P
Dave Senior Male U
我尝试结合过去问题中的一些想法,但它们似乎不起作用,而且我之前没有真正使用过 VBA。
Dim GCell As Range
Dim N As Long, i As Long
N = ws.Cells(Rows.Count, "D").End(xlUp).Row
For Each GCell In Range("D2:D")
If GCell.Value Like "*,*" Then
GCell.Offset(1, 0).EntireRow.Insert
ws.Cells(i, "D").EntireRow.Copy ws.Cells(i + 1, 1)
Else
End If
i = i + 1
Next GCell
解决方案
您可以这样做,调整工作表名称以适应(我将结果放在不同的工作表上):
Sub x()
Dim r As Range, v As Variant
For Each r In Sheets("Sheet1").Range("A1").CurrentRegion.Columns(1).Cells
v = Split(r.Offset(, 3), ",")
r.Resize(, 3).Copy Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp)(2).Resize(UBound(v) + 1)
Sheets("Sheet2").Range("D" & Rows.Count).End(xlUp)(2).Resize(UBound(v) + 1).Value = Application.Transpose(v)
Next r
End Sub
Split
使用逗号作为分隔符将其转换为数组;通过转置它,您可以将其转换为可以粘贴到输出表中的“垂直”数组。
推荐阅读
- string - 如何阻止 Applescript 将字符串与数字进行比较?
- javascript - 使用 for 循环遍历 box0、box1、box2 等对象
- google-chrome - 发送和接收邮件的限制 为帮助防止垃圾邮件并确保帐户安全,Gmail 限制了您每天可以发送或接收的电子邮件数量?
- typescript - 打字稿根据先前元素的类型定义数组中元素的类型
- php - 向其中添加 css 类的正确方法是什么?
- hammerspoon - 如何获取应用程序支持的功能列表?
- react-native - 尝试在本机反应中使用文档选择器时无法读取未定义的属性(读取“选择”)
- node.js - 猫鼬 findOne :异步和同步之间的不同
- javascript - 烧瓶添加模态以在删除前询问。如何开始工作?
- json - 如何解析 Json 对 Map 的响应
>