Excel公式从单元格范围中取值,按字母顺序sorting并写入单个string

我目前有一个翻译员名单和他们可以说的语言:

| A | B | C | D | F | +-------+------------+------------+------------+---------------------------+ 1 | Name | Language 1 | Language 2 | Language 3 | Combined | +=======+============+============+============+===========================+ 2 | John | English | Chinese | Spanish | English, Chinese, Spanish | 3 | Wendy | Chinese | French | English | Chinese, French, English | 4 | Peter | Spanish | Chinese | English | Spanish, Chinese, English | 

在FI栏中,我使用以下公式将每个人的所有语言组合在一起:

 =$B2&", "&$C2&", "&$D2 

我在数据透视表中使用这个列来报告可以说相同语言组合的人。 我的问题是,如果语言以不同的顺序input(例如,第2行和第4行),则报告显示为不同的组合。 是否有一个公式我可以使用三个语言单元格,按字母顺序sorting,并把它写成一个string?

希望这是明确的。

花了我一会儿,但我终于想出了一个公式解决scheme。

把它放在单元格E2

=CONCATENATE(INDEX(B2:D2,1,MATCH(SMALL(COUNTIF(B2:D2,"<"&B2:D2),1),COUNTIF(B2:D2,"<"&B2:D2),0)),", ",INDEX(B2:D2,1,MATCH(SMALL(COUNTIF(B2:D2,"<"&B2:D2),2),COUNTIF(B2:D2,"<"&B2:D2),0)),", ",INDEX(B2:D2,1,MATCH(SMALL(COUNTIF(B2:D2,"<"&B2:D2),3),COUNTIF(B2:D2,"<"&B2:D2),0)))

通过按CTRL+SHIFT+ENTERinput公式

将公式向下拖动。

在这里输入图像描述

这可以通过使用COUNTIF()函数和SMALL()函数一起对三列进行sorting。 然后我重复这3次,使用SMALL()函数更改要显示的索引。 这是有点难以遵循,但它得到的工作:)

这里有一个更详细的描述如何工作的公式的链接:

http://www.get-digital-help.com/2009/03/27/sorting-text-cells-using-array-formula/

你可能想用不同的方式来解决这个问题。

不要将语言名连接在一起,而应该对代码(二进制)进行vlookup ,然后将这些代码相加,得出代表该组合的代码。 这里的关键在于放置英语的位置并不重要(第一,第二或第三)。

这是一个工作的例子: 工作示例

在另一张纸上,定义一个列表(并命名范围“语言”)。 这也是validation语言input的好方法。 请注意,ID增加了2 ^ n,其中n是1,2,3(等)。

语言表

幕后配方。 请注意,它执行一个vlookup :第一个参数是来自input表,第二个参数是查找表(上面定义的语言),第三个参数是语言表中的第二个列,并且完全匹配(它将返回n / a如果价值尚未在语言中定义)。

Fomrulas在幕后

不使用任何代码,您可以select每一行,使用Sort ,并在选项下,selectLeft to Right而不是默认值。 一次只能做一行,所以如果你有很多行,可能会很乏味,在这种情况下,基于VBA的解决scheme会更实用。

从左到右排序

对于VBA解决scheme,这样的事情应该这样做。 select包含需要sorting的数据的所有单元格,然后运行下面的macros。 然后,您可以使用相同的公式来将它们组合到单个string中。

 Sub SortEachRowAlpha() 'First, select the range that needs to be sorted. ' Dim r As Long 'row iterator: Dim keyRange As Range For r = 1 To Selection.Rows.Count Set keyRange = Range(Selection.Rows(r).Address) ActiveSheet.Sort.SortFields.Clear ActiveSheet.Sort.SortFields.Add Key:=keyRange, _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveSheet.Sort .SetRange keyRange .Header = xlGuess .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With Next End Sub 

你最好的select是使用VBA。 编写一个循环,用逗号分隔符将每种语言提取到一个数组中,对其进行sorting并将其吐出到单元格中

编辑:事实上,阅读单独的语言进入数组将更有意义。 天色已晚