2

私は現在、翻訳者と彼らが話すことができる言語のリストを持っています:

  |   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

この列をピボット テーブルで使用して、同じ言語の組み合わせを話せる人についてレポートしています。私の問題は、言語が異なる順序で入力された場合 (行 2 と 4 など)、レポートが異なる組み合わせとして表示されることです。3 つの言語セルを取得し、アルファベット順に並べ替えて、文字列として書き出すために使用できる式はありますか?

これが明確であることを願っています。

4

4 に答える 4

4

これに別の方法でアプローチすることもできます。

言語名を連結する代わりにvlookup、コード (バイナリ) に対して a を実行し、それらを合計して、その組み合わせを表すコードを作成する必要があります。ここで重要なのは、英語がどこにあるか (1 番目、2 番目、または 3 番目) は問題ではないということです。

これが実際の例です: 実施例

別のシートで、リストを定義します (範囲に「言語」という名前を付けます)。これは、言語の入力を検証するのにも適しています。ID は 2^n ずつ増加することに注意してください。n は 1、2、3 などです。

言語表

舞台裏の公式。最初の引数は入力テーブルから、2 番目の引数はルックアップ テーブル (上記でvlookup定義された言語)、3 番目の引数は言語テーブルの 2 番目の列であり、正確に一致します (値が言語で定義されていません)。

舞台裏の式

于 2013-03-28T02:07:22.393 に答える
3

コードを使用せずに、各行を選択して を使用しSort、オプションでLeft to Rightデフォルトの代わりに選択するだけです。これは一度に 1 行ずつ行う必要があるため、行数が多い場合は面倒な場合があります。その場合は、VBA ベースのソリューションがより実用的です。

左から右に並べ替え

VBA ソリューションの場合は、次のような方法で行う必要があります。並べ替える必要があるデータを含むすべてのセルを選択し、以下のマクロを実行します。次に、それらを単一の文字列に結合するために、同じ式を使用できます。

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
于 2013-03-28T00:57:21.557 に答える
2

しばらく時間がかかりましたが、最終的に式の解決策を見つけました。

これをセルに入れます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+ENTER

数式を下にドラッグします。

ここに画像の説明を入力

COUNTIF()これは、関数と関数を組み合わせて使用​​して、3 つの列を配列で並べ替えることによって機能しSMALL()ます。次に、関数を使用して表示するインデックスを変更し、これを 3 回繰り返しSMALL()ます。従うのは少し難しいですが、仕事は完了します:)

このような式がどのように機能するかについてのより詳細な説明へのリンクは次のとおりです。

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

于 2013-03-28T02:00:45.263 に答える
1

最善の策は、VBA を使用することです。コンマ区切りで各言語を配列に抽出し、並べ替えてセルに吐き出すループを作成します

EDIT:実際には、別々の言語を配列に読み込む方が理にかなっています。遅くなってきたよ

于 2013-03-28T00:45:14.417 に答える