経理部門では、さまざまな通貨 (ドル、シェケル、オーストラリア ポンド) で金銭の受け取りを入力します。通貨記号が金額と同じセルに含まれている場合、混合通貨を含む列を通貨の種類で並べ替えることは可能ですか。それとも、通貨記号は金額とは別の列になければなりませんか。
答え1
前文: 最初はあなたの質問の意味が分かりませんでしたが、その後、この場合はテキスト値 (通貨記号 + 数字) を扱うことはできないことに気付きました。そのため、通貨金額として表示されるように書式設定された値を含むセルを扱う必要がありますが、実際には数字のみ (数字のみで、通貨記号はありません) が含まれています。
現時点では、Excel ではセルの書式設定 (色やアイコン以外) に基づいた並べ替えがまだ提供されていないため、私が思いつく唯一の解決策は、基本的にあなたが仮説を立てた次の 2 番目です。セカンダリ列の各金額(行)に相対的な通貨記号を入力する必要があります。これにより、カスタムのマルチレベルソートを実行できます。(通貨列の第 1 レベルと金額列の第 2 レベル) を実行して、データを整理します。
私が今できることは、プロセスを自動化して作業を高速化する方法を提案することです。また、各金額行に通貨記号を手作業で書き込むなどの作業はしたくないと想定しています (そうでしょうか? ;-D)。
さて、これに VBA を使用できる場合は、始めましょう...
1) 次の VBA コードをモジュールに配置します。
Public Function GetCurrency(ByVal r As Range) As String
Application.Volatile
Static RegX As Object
If RegX Is Nothing Then Set RegX = CreateObject("VBScript.RegExp")
With RegX
.Global = True
.Pattern = "[0-9\-\.,\s]"
GetCurrency = .Replace(r.Text, "")
End With
End Function
2) ここで、金額の値が列「A」にあり、通貨記号が列「B」にあると仮定して、次の数式を最初の列 B 行 (B1 セル) に入力します。
=GetCurrency(A1)
次に、その数式を同じ列 (B) の必要な後続の行すべてにコピーします。
さて、これで 2 つの列ができました。1 つはフォーマットされた金額の値 (A)、もう 1 つは必要な相対通貨記号 (B) を含む列です。
これは、私の前提が満たされ、適切な通貨としてフォーマットされた数値を含む列「A」がある場合にのみ機能することに注意してください。そうでない場合、この時点で各列「A」行/セルを手動でフォーマットしても、各列「B」行/セルに通貨記号を手で直接書き込む場合と何の違いも利点もありません。
3) 次に、2 つの列を選択し、カスタムのマルチレベル並べ替えを実行します。
「データ」リボンに移動し、「並べ替えとフィルター」グループを探して、「並べ替え」をクリックします。
列 B の値を並べ替える (第 1 レベル)
「レベルの追加」をクリックします
列 A の値を並べ替える (第 2 レベル)
そして...完成です!
PS: 必要に応じて、「B」列を安全に非表示にすることもできます。
REFS: 詳細はこちら複数列に基づくソート。
重要な最終注意事項:
金額列の値を操作/変更する必要はありません。このためには、通貨記号をセカンダリ列に配置する必要があります。金額列に通貨記号を追加するだけではいけません。そうしないと、金額がテキスト値として取得され、数値のように適切に並べ替えることができなくなります。(たとえば、テキスト値として「$80」、「$30」、「$500」がある場合に何が起こるか考えてみましょう。「$500」は「$80」と「$30」の間に並べ替えられます。文字として: "8" < "5" < "3"
... ご理解いただけたでしょうか。)