Excel - 如何在单个单元格

时间:2016-10-20 08:47:36

标签: excel excel-vba excel-formula vba

我有一个包含不同表格的Excel文档。在一张表中我有专栏:

| text column        |
|#test2,#test3,#test1|
|#test2, #test1      |
|#test1              |

在另一张表中,我有值的映射:

|some column| value  |
|#test2     | Value2 |
|#test1     | Value1 |
|#test3     | Value3 |

所以我需要得到结果:

| text column           |
| Value2, Value3, Value1|
| Value2, Value1        |
| Value1                |

这可以通过Excel工作表函数获得吗?

我试图爆炸数据,但我可能在具体单元格中有未定义的数量。还尝试使用VLOOKUP,但我不知道如何使用它,因为我需要在VLOOKUP之前拆分值。

你能帮帮我吗?谢谢。

2 个答案:

答案 0 :(得分:1)

因为您需要某种形式的迭代,即拆分值,对每个项目执行操作并重新加入项目 - 使用Excel函数不太可能有这样的方法。如果您乐意使用VBA,那么用户定义的功能非常简单:

Option Explicit

Public Function RemapValues(rngSource As Range, rngLookup As Range, strDelimiter As String) As String

    Dim arrIn() As String
    Dim lngCounter As Long
    Dim arrOut() As String

    ' split input string by supplied delimiter
    arrIn = Split(rngSource.Value, strDelimiter, -1)

    ' set capacity of array storing re-mapped values
    ReDim arrOut(LBound(arrIn) To UBound(arrIn))

    ' loop over input array
    For lngCounter = LBound(arrIn) To UBound(arrIn)
        ' do the vlookup operation
        arrOut(lngCounter) = WorksheetFunction.VLookup(arrIn(lngCounter), rngLookup, 2, 0)
    Next lngCounter

    ' return the re-mapped values
    RemapValues = Join(arrOut, strDelimiter)

End Function

E.g。

enter image description here

答案 1 :(得分:0)

我认为您会发现SUBSTITUTE功能将实现您的目标:

  

SUBSTITUTE(text,old_text,new_text,[instance_num])

     

SUBSTITUTE函数语法具有以下参数:

     

文字必填。文本或对包含要替换字符的文本的单元格的引用。

     

Old_text必需。要替换的文本。

     

New_text必需。要用old替换old_text的文本。

     

Instance_num可选。指定要用new_text替换的old_text的出现位置。如果指定instance_num,则仅替换old_text的该实例。否则,文本中每次出现的old_text都会更改为new_text。

你可以嵌套每个SUBSTITUTE,但我认为最终会很难阅读和维护。

根据所附图像,我建议的实施方法是逐步执行替换。因此,从A列中的orignal文本开始,将#test1替换为B列中的value1,然后使用C列中的公式替换现在B列中的文本中的#test2。

substitute example