gpt4 book ai didi

vba - 如何使用非统一分隔符分解文本?

转载 作者:行者123 更新时间:2023-12-04 22:04:29 25 4
gpt4 key购买 nike

我在 Excel 中有这些数据:

enter image description here

但是我的一个客户需要它详细总结每个项目。
所以上面的数据需要转换成:

enter image description here

这样,客户可以按跟踪和每个项目对其进行分析。
文本格式并不统一,因为它是手动输入的。
一些用户使用 Alt+Enter 来分隔项目。有些使用空间,有些根本不打扰分离。但一致的是,他们将连字符(-)放在项目之后,然后是计数(虽然并不总是跟在数字后面,但两者之间可以有空格)。此外,如果该项目的计数是一 (1),他们根本不会费心放置它(如 Apple Juice 的跟踪 IDU3004 所示)。

我尝试的唯一功能是拆分 功能使我更接近我想要的。
但是我仍然很难将单个数组元素分成我所期望的。
例如, IDU3001 在上面使用 之后拆分 (以“-”作为分隔符)将是:

arr(0) = "苹果"
arr(1) = "20 颗葡萄"
arr(2) = "5"& Chr(10) & "Pear"~~> 只是为了显示 Alt+Enter
arr(3) = "3香蕉"
arr(4) = "2"

当然我可以想出一个函数来处理每个元素来提取数字和项目。
实际上我正在考虑只使用该功能并跳过。拆分 共。
我只是好奇也许还有另一种方法,因为我不精通文本操作。我将不胜感激任何可以为我指出可能更好的解决方案的想法。

最佳答案

我建议使用正则表达式方法

这是基于您的示例数据的演示。

Sub Demo()
Dim re As RegExp
Dim rMC As MatchCollection
Dim rM As Match
Dim rng As Range
Dim rw As Range
Dim Detail As String

' replace with the usual logic to get the range of interest
Set rng = [A2:C2]

Set re = New RegExp

re.Global = True
re.IgnoreCase = True
re.Pattern = "([a-z ]+[a-z])\s*\-\s*(\d+)\s*"
For Each rw In rng.Rows
' remove line breaks and leading/trailing spaces
Detail = Trim$(Replace(rw.Cells(1, 3).Value, Chr(10), vbNullString))

If Not Detail Like "*#" Then
' Last item has no - #, so add -1
Detail = Detail & "-1"
End If

' Break up string
If re.Test(Detail) Then
Set rMC = re.Execute(Detail)
For Each rM In rMC
' output Items and Qty's to Immediate window
Debug.Print rM.SubMatches(0), rM.SubMatches(1)
Next
End If
Next
End Sub

根据您的评论,我假设只有单元格中的最后一项可能缺少 -#
样本输入
Apple Juice- 20 Grape -5
pear- 3Banana-2Orange

产生这个输出
Apple Juice   20
Grape 5
pear 3
Banana 2
Orange 1

关于vba - 如何使用非统一分隔符分解文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26878089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com