动态地从excel / openoffice单元格中拉出第一个,最后一个单词(然后是一些!)

时间:2012-05-23 19:03:29

标签: excel excel-formula openoffice-calc

细胞内容:

Epson / Epson TM系列耗材/ H5000; Epson / Epson TM系列耗材/ H5200; Epson / Epson TM系列耗材/ U590; Epson / Epson TM系列耗材/ 930; Epson / Epson TM系列耗材/ U925; Epson /爱普生TM系列耗材/ U950

我需要使用以下规则拉出结果单元格:第一个单词,任何分号前的最后一个单词,重复,用分号替换逗号。可能有4个,27个或0个分号(或其间的任何数字)

上述字段将导致输出 爱普生H5000,爱普生H5200,爱普生U590,爱普生930,爱普生U925,爱普生U950

如果结果值以某种方式按字母顺序排序,那么

疯狂的奖励积分和道具数量 IE: 爱普生930,爱普生H5000,爱普生H5200,爱普生U590,爱普生U925,爱普生U950

A列的长度约为28000。 B栏的结果很好。

如果有人对何处开始解决这个问题有任何想法,我已经没想过了。

1 个答案:

答案 0 :(得分: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

就排序而言,你是独立的。您希望在函数的最后一行调用results之前对Join数组进行排序。遗憾的是,VBA没有内置的Sort功能,但是在线提供了大量现成的排序功能。