从 excel/openoffice 单元格中动态提取第一个、最后一个单词(然后是一些!)
Posted
技术标签:
【中文标题】从 excel/openoffice 单元格中动态提取第一个、最后一个单词(然后是一些!)【英文标题】:Dynamically pull first, last, words from an excel/openoffice cell (and then some!) 【发布时间】:2012-05-23 19:03:28 【问题描述】:单元格内容:
Epson/Epson TM 系列耗材/H5000;Epson/Epson TM 系列耗材/H5200;Epson/Epson TM 系列耗材/U590;Epson/Epson TM 系列耗材/930;Epson/Epson TM 系列耗材/U925;Epson/ Epson TM 系列耗材/U950
我需要使用以下规则提取结果单元格:第一个单词,任何分号之前的最后一个单词,重复,用分号替换逗号。可能有 4、27 或 0 个分号(或介于两者之间的任何数字)
上述字段将导致输出 爱普生H5000、爱普生H5200、爱普生U590、爱普生930、爱普生U925、爱普生U950
如果结果值以某种方式按字母顺序排序,则奖励积分和道具数量惊人 IE: 爱普生930、爱普生H5000、爱普生H5200、爱普生U590、爱普生U925、爱普生U950
A 列的长度约为 28000 个值。 B 列的结果很好。
如果有人对从哪里开始解决这个问题有任何想法,我已经没有想法了。
【问题讨论】:
“单词”总是用斜线分隔吗? 【参考方案1】:我假设您无法轻松获取其他格式的数据。那将是最好的解决方案。
我还假设您的“单词”总是用斜杠分隔。在 Excel 中,我会为此任务编写一个 VBA 函数。像这样的:
Option Explicit
Function GetPrinterModels(r As Range) As String
Dim arr() As String, arr2() As String
arr = Split(r.Value, ";")
Dim results() As String
ReDim results(0 To UBound(arr))
Dim i As Integer
For i = 0 To UBound(arr)
arr2 = Split(arr(i), "/")
' If words can also be separated by spaces:
'arr(i) = Replace(arr(i), "/", " ")
'arr2 = Split(arr(i), " ")
results(i) = arr2(0) & " " & arr2(UBound(arr2))
Next
GetPrinterModels = Join(results, ", ")
End Function
就排序而言,您是自己的事。您想在函数的最后一行调用Join
之前对results
数组进行排序。遗憾的是,VBA 没有内置的Sort
函数,但是网上有大量现成的排序函数。
【讨论】:
我正在通过 excel(我通常使用 Openoffice)来了解如何使用这无疑是一段美妙的代码,对于 excel 2007 正确使用它有什么建议吗? 我设法弄清楚如何使用它,起初它给出了一个错误,但在重新复制粘贴后,该错误得到了解决。再次感谢您的帮助!对于可能偶然发现此问题的任何其他人,我用来学习如何正确实现此代码的资源是cpearson.com/excel/writingfunctionsinvba.aspx以上是关于从 excel/openoffice 单元格中动态提取第一个、最后一个单词(然后是一些!)的主要内容,如果未能解决你的问题,请参考以下文章
如何从动态 UITableView 单元格中获取 UILabel 的大小?