从 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 的大小?

如何从谷歌电子表格中动态变化的单元格中保存最小值和最大值?

如何在下一个空单元格中复制和粘贴动态表值?

根据存储在其他单元格中的 RGB 值动态更改单元格的背景颜色

在表格视图单元格中动态调整子视图的大小

从 RowDataBound 事件的 gridview 从单元格中获取值