ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1336|回复: 8

[求助] 求助:识别第2行斜杠分列?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-29 19:20 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个斜杠分列看似简单,并不好弄
甭管第2行上下是什么数据,就在第2行数据斜杠"/"左边分列
而且,斜杠在第2行的位置和个数都不固定。

斜杠分列.JPG

斜杠分列.rar

7.65 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2018-8-29 19:23 | 显示全部楼层
你要结果是什么

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-29 19:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

图示为结果,红竖线去掉为源数据

TA的精华主题

TA的得分主题

发表于 2018-8-29 19:53 | 显示全部楼层
按固定列宽分列,并同时录制宏代码:

  1. Sub Macro1()
  2.     Range("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
  3.         FieldInfo:=Array(Array(0, 1), Array(6, 1), Array(27, 1), Array(33, 1), Array(42, 1), _
  4.         Array(51, 1)), TrailingMinusNumbers:=True
  5. End Sub
复制代码


分列.PNG

TA的精华主题

TA的得分主题

发表于 2018-8-29 20:08 | 显示全部楼层
本帖最后由 hefuqing 于 2018-8-29 20:24 编辑
  1. Sub ddd()
  2. Dim brr(), crr()
  3. r = Sheets("源").Cells(Sheets("源").Rows.Count, 1).End(xlUp).Row
  4. arr = Sheets("源").Range("a1:a" & r)
  5. ReDim brr(1 To r)
  6. For i = 1 To UBound(arr)
  7. n = n + 1
  8. brr(n) = Split(arr(i, 1), " ")
  9. Next

  10. ReDim crr(1 To UBound(brr), 1 To 6)
  11. crr(1, 1) = brr(1)(0)
  12. crr(1, 2) = brr(1)(4)
  13. crr(1, 3) = brr(1)(20)
  14. crr(1, 4) = brr(1)(21)
  15. crr(1, 5) = brr(1)(24)
  16. crr(1, 6) = brr(1)(30)
  17. m = 1
  18. For i = 2 To UBound(brr)
  19. m = m + 1
  20. If brr(i)(0) = "/" Then
  21. crr(m, 1) = brr(i)(0)
  22. crr(m, 2) = brr(i)(5)
  23. crr(m, 3) = brr(i)(25)
  24. crr(m, 4) = brr(i)(30)
  25. crr(m, 5) = brr(i)(38)
  26. crr(m, 6) = brr(i)(46)

  27. ElseIf brr(i)(0) = "" Then
  28. crr(m, 1) = ""
  29. crr(m, 2) = ""
  30. crr(m, 3) = ""
  31. crr(m, 4) = brr(i)(33)
  32. crr(m, 5) = brr(i)(36)
  33. crr(m, 6) = brr(i)(41)
  34. Else
  35. crr(m, 1) = brr(i)(0)
  36. crr(m, 2) = brr(i)(4) & brr(i)(5) & brr(i)(6) & brr(i)(7) & brr(i)(8)
  37. crr(m, 3) = brr(i)(10)
  38. crr(m, 4) = brr(i)(12)
  39. crr(m, 5) = brr(i)(15)
  40. crr(m, 6) = brr(i)(20)
  41. End If
  42. Next
  43.   Sheets("果").[a1].Resize(UBound(crr), UBound(crr, 2)) = crr
  44. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-8-29 20:24 | 显示全部楼层
选中A列,数据——分列(固定宽度),按提示操作。简单问题复杂化!

TA的精华主题

TA的得分主题

发表于 2018-8-29 20:25 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-29 20:28 | 显示全部楼层
hefuqing 发表于 2018-8-29 20:25
写的这么好才1分啊

数据长度增长,
行数增多,结果并不理想
但还是非常感谢,

TA的精华主题

TA的得分主题

发表于 2018-8-30 06:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
'如果分割结果不满意先设置一下字体及字号,然后再设置分隔符位置,,,

Option Explicit

Sub test()
  Dim arr, i, j, k, p, t, pos(), n
  On Error GoTo errmsg
  arr = Sheets("源").[a1].CurrentRegion
  For i = 1 To Len(arr(2, 1))
    t = InStr(p + 1, arr(2, 1), "/")
    If t > 0 Then
      p = t: n = n + 1
      ReDim Preserve pos(1 To n): pos(n) = t
    Else
      Exit For
    End If
  Next
  ReDim brr(1 To UBound(arr, 1), 1 To UBound(pos))
  For i = 1 To UBound(arr, 1)
    p = pos
    For j = 2 To UBound(p)
      t = Trim(Mid(arr(i, 1), p(j - 1), p(j) - p(j - 1)))
      n = 0
      For k = 1 To Len(t)
        If Asc(Mid(t, k, 1)) < 0 Then n = n + 1
      Next
      If n > 0 Then
        For k = j To UBound(p): p(k) = p(k) - n: Next
        t = Trim(Mid(arr(i, 1), p(j - 1), p(j) - p(j - 1)))
      End If
      brr(i, j - 1) = t
    Next
    brr(i, j - 1) = Trim(Right(arr(i, 1), Len(arr(i, 1)) - p(UBound(p)) + 1))
  Next
  With Sheets("果").[a1]
    .CurrentRegion.ClearContents
    .Resize(UBound(brr, 1), UBound(brr, 2)) = brr
  End With
  Exit Sub
errmsg:
  Debug.Print Err.Number
  MsgBox "确认行长度:" & i & vbNewLine & "或第2行分割符号有问题"
End Sub

评分

2

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-13 03:38 , Processed in 0.053373 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表