请查看附件图片,其中显示了运行宏后我的数据和预期数据,
- 我想拆分 B 列中的多行单元格并在单独的行中列出并从第一个空格中删除文本。此值将被称为 SESE_ID,并且对于同一行中的每个 SESE_ID,应具有 C 列中的 RULE。
- 如果 A 列中有多个前缀,用逗号或空格逗号分隔,则对每个前缀重复上述值。
请有人在宏中帮助我...
- 附上的第一张图片是示例来源:
- 以下是宏:
子 Complete_sepy_load_macro()
暗淡 ws, s1, s2 作为工作表
Dim rw, rw2, rw3, col1, count1, w, x, y, z, cw As Integer
将 text1 调暗为字符串
将 xwalk 调暗为字符串
将 TOS 变暗为变体
Application.DisplayAlerts = False
对于表格中的每个 ws
如果 ws.Name = "CMC_SEPY_SE_PYMT" 然后 Sheets("CMC_SEPY_SE_PYMT").Delete
下一个
Application.DisplayAlerts = True
设置 s2 = ActiveSheet
g = s2.名称
Sheets.Add.Name = "CMC_SEPY_SE_PYMT"
设置 s1 = Sheets("CMC_SEPY_SE_PYMT")
s1.Cells(1, 1) = "SEPY_PFX"
s1.Cells(1, 2) = "SEPY_EFF_DT"
s1.Cells(1, 3) = "SESE_ID"
s1.Cells(1, 4) = "SEPY_TERM_DT"
s1.Cells(1, 5) = "SESE_RULE"
s1.Cells(1, 6) = "SEPY_EXP_CAT"
s1.Cells(1, 7) = "SEPY_ACCT_CAT"
s1.Cells(1, 8) = "SEPY_OPTS"
s1.Cells(1, 9) = "SESE_RULE_ALT"
s1.Cells(1, 10) = "SESE_RULE_ALT_COND"
s1.Cells(1, 11) = "SEPY_LOCK_TOKEN"
s1.Cells(1, 12) = "ATXR_SOURCE_ID"
s1.Range("A:A").NumberFormat = "@"
s1.Range("B:B").NumberFormat = "m/d/yyyy"
s1.Range("C:C").NumberFormat = "@"
s1.Range("D:D").NumberFormat = "m/d/yyyy"
s1.Range("E:E").NumberFormat = "@"
s1.Range("F:F").NumberFormat = "@"
s1.Range("G:G").NumberFormat = "@"
s1.Range("H:H").NumberFormat = "@"
s1.Range("I:I").NumberFormat = "@"
s1.Range("J:J").NumberFormat = "@"
s1.Range("K:K").NumberFormat = "0"
s1.Range("L:L").NumberFormat = "m/d/yyyy"
rw2 = 2
x = 1
y = 1
z = 1
'服务标识栏
做
y = y + 1
循环直到 s2.Cells(1, y) = "服务 ID"
'规则栏
做
w = w + 1
循环直到左边(s2.Cells(1,w),4)=“规则”
'人行横道栏
做
cw = cw + 1
循环直到左边(s2.Cells(1, cw).Value, 9) = "Crosswalk"
'Alt 规则列(从规则列派生的位置)
'计算“规则”和“替代规则”之间的单元格数,用作其余“替代规则”单元格的先例
ar = w
做
ar = ar + 1
循环直到左边(s2.Cells(1, ar).Value, 3) = "Alt"
ar = ar - w
'前缀行
做
x = x + 1
循环直到 s2.Cells(x, w) ""
'第一个服务ID行
做
z = z + 1
循环直到 s2.Cells(z, y) ""
'将 rw = z + 2 更改为 rw = z,跳过前两行
对于 rw = z 到 s2.Range("a65536").End(xlUp).Row
如果 s2.Cells(rw, y) "" 那么
如果 InStr(1, s2.Cells(rw, y), Chr(10)) 0 那么
TOSes = Split(s2.Cells(rw, y).Value, Chr(10)) 'Chr(10) 是“换行”字符
计数1 = 0
做
如果 Trim(TOSes(count1)) "" 那么
对于 col1 = w 到 s2.UsedRange.Columns.Count
If Left(s2.Cells(1, col1), 4) = "Rule" Then
如果 InStr(1, TOSes(count1), " ") > 0 那么
s1.Cells(rw2, 3) = Trim(Left(TOSes(count1), InStr(1, TOSes(count1), " "))) 'sese
别的
s1.Cells(rw2, 3) = TOSes(count1)
万一
s1.Cells(rw2, 1) = s2.Cells(x, col1) '前缀
s1.Cells(rw2, 5) = s2.Cells(rw, col1) '规则
'使用人行横道服务ID填充alt规则
如果 s2.Cells(rw, cw).Value "" 那么
如果 xwalk = "" 那么
匹配 = 假
xwalk = Trim(s2.Cells(rw, cw)) & ""
rwcw = z
做
如果 InStr(1, s2.Cells(rwcw, y).Value, xwalk, vbTextCompare) > 0 那么
'获取规则并写入当前行的alt规则列
s2.Cells(rw, col1).Offset(0, ar).Value = s2.Cells(rwcw, w).Value
匹配 = 真
万一
rwcw = rwcw + 1
循环直到匹配=真
万一
万一
s1.Cells(rw2, 9) = s2.Cells(rw, col1).Offset(0, ar) 'alt 规则
s1.Cells(rw2, 7) = "待定" 'cac
s1.Cells(rw2, 13) = s2.Name '文件
rw2 = rw2 + 1
万一
xwalk = ""
下一个 col1
万一
计数1 = 计数1 + 1
循环直到 count1 = UBound(TOSes) + 1
别的
对于 col1 = w 到 s2.UsedRange.Columns.Count
If Left(s2.Cells(1, col1), 4) = "Rule" Then
如果 InStr(1, s2.Cells(rw, y), " ") > 0 那么
s1.Cells(rw2, 3) = Trim(Left(s2.Cells(rw, y), 4)) 'sese
别的
s1.Cells(rw2, 3) = s2.Cells(rw, y)
万一
s1.Cells(rw2, 1) = s2.Cells(x, col1) '前缀
s1.Cells(rw2, 5) = s2.Cells(rw, col1) '规则
s1.Cells(rw2, 9) = s2.Cells(rw, col1).Offset(0, ar) 'alt 规则
s1.Cells(rw2, 7) = "待定" 'cac
s1.Cells(rw2, 13) = s2.Name '文件
rw2 = rw2 + 1
万一
下一个 col1
万一
ElseIf s2.Cells(rw, y) = "" And Trim(s2.Cells(rw, w)) "" Then
如果 Len(s2.Cells(rw, 1)) >= 10 那么
text1 = Left(s2.Cells(rw, 1), 10) & " |row: " & rw 'sese
别的
text1 = s2.Cells(rw, 1) & " row: " & rw 'sese
万一
对于 col1 = w 到 s2.UsedRange.Columns.Count
If Left(s2.Cells(1, col1), 4) = "Rule" Then
s1.Cells(rw2, 3) = text1 'sese
s1.Cells(rw2, 3).Interior.ColorIndex = 6
s1.Cells(rw2, 1) = s2.Cells(x, col1) '前缀
s1.Cells(rw2, 5) = s2.Cells(rw, col1) '规则
s1.Cells(rw2, 9) = s2.Cells(rw, col1).Offset(0, ar) 'alt 规则
s1.Cells(rw2, 7) = "待定" 'cac
s1.Cells(rw2, 13) = s2.Name '文件
rw2 = rw2 + 1
万一
下一个 col1
万一
下一个
对于 rw3 = 2 到 s1.UsedRange.Rows.Count
s1.Cells(rw3, 2) = "1/1/2009"
s1.Cells(rw3, 4) = "12/31/9999"
s1.Cells(rw3, 11) = 1
s1.Cells(rw3, 12) = "1/1/1753"
下一个 rw3
将 wb 调暗为工作簿
Dim wss, wsSepy, wsSID As Worksheet 'SID = 服务 ID 电子表格
暗淡 sepyRow, sepyCol, acctCol, sidSeseCol, sidAcctCol, j As Long
将单元格调暗为范围
将单元格范围变暗为范围
将 topRow 作为范围调暗
将 sepySese 调暗为字符串
MsgBox "全部设置,确保 SESE_RULE 列中没有 #N/A"
结束子
下图是我得到的输出:
问题:如果您看到源数据,我在 A 列中有 SEPY_PFX。我希望为每个 SEPY 重复每一行。目前我的代码给了我作为 SEPY_PFX 的 RULE,我仍在努力,但如果有人能快速帮助我,我会很高兴,它已经超出了我的想象。