web-dev-qa-db-ja.com

Excelでの英数字の並べ替え

Excelで、a-1、a-10、a-100、a-11の代わりにa-1、a-2、a-3 ... a-123から英数字を並べ替えることはできますか?

最も古いものから新しいものへ、またはA-Zで並べ替えても、希望する結果は得られません。セルを数値としてフォーマットしようとしましたが、役に立ちませんでした。

行き詰まっています。

11
beccabecca

The Result

ユーザー@ fixer1234は正しいです。おそらくstring関数を使用したいと思います。これを行う1つの方法を次に示します。

ステップ1

[更新しました]

[数値]列で範囲を強調表示し、テキストをハイフンで分割します。

Data> _Text to Columns_> Delimited> Next> _Other: -_> Finish

_Other:_テキストボックスにハイフン(-)が必要であることに注意してください。また、これを行う前に、隣接する列(右側)が空であることを確認してください。これにより、重要なデータが上書きされなくなります。

この関数を使用して、列Aから数値を抽出することもできます。

_=RIGHT(A2,LEN(A2)-SEARCH("-",A2))
_

ステップ2

さて、上のスクリーンショットからわかるように、次のステップで行うことは、最大の数値よりも桁数が少ない各数値の先頭にゼロを追加することです。 これにより、これらの数値を希望どおりに並べ替えることができます。

しかし、最初に、ちょっとした事実調査を行う必要があります。最大数が何であるかが簡単にわかる場合は、その最大数の数字を数えるだけです。これは、次の関数で使用するゼロの数になります。手動で最大数の桁を数えることなく、最長数を決定する別の方法があります。

[UPDATE]次の関数を使用できます(これまでのところ 私たちはしませんかなりの理由を知っています )最長の数を決定するには:

_=MAX(INDEX(LEN(C2:C14),,1))
_

または、次の数式をセルに入力するだけでもかまいません(上の画像では、セルがオレンジ色で強調表示されています)。ただし、ENTERキーを押してセルを設定するのではなく、ホットキー_CTRL-SHIFT-ENTER_。これにより、INDEX()などの関数をいじる必要なく、関数の性質が 配列数式 に変わります。

_=MAX(LEN(C2:C14))
_

(使用している特定のスプレッドシートの範囲が正確であることを確認してください。)

_CTRL-SHIFT-ENTER_を押すと、セルの内容はこれに変わりますが、手動で入力しても何も起こりません。

_{=MAX(LEN(C2:C14))}
_

でもやりたいことは結構です。リストの最大数を構成する桁数を決定するだけです。「1」はもちろん1桁、「10」は2桁、「100」は3桁というようになります。

ステップ3

最後に、「拡張」列で、この関数は、「数値」列の数値を、ステップ2で使用する必要があると判断した先行ゼロの数を含むテキストに変換します。

_=TEXT(C2,"000")
_

必ずゼロの周りに引用符を付けてください。

最大数が8桁の場合、関数は次のようになります。

_=TEXT(C2,"00000000")
_
4

簡単な解決策は、文字列関数を使用して、数値を新しい列に数値として配置することです。次に、その列で並べ替えます。値がどのように変化するか、またはそれらがどのように配置されるかを指定しなかったが、例を示します。

「a-」接頭辞は決して変更されず、エントリは行2から始まる列Aにあり、列Bが使用可能であると想定します。 B2では、= value(mid(a2,3、len(a2)-2))のように記述し、必要に応じて式をコピーします。並べ替えるには、両方の列を強調表示してBで並べ替えます。

他の接頭辞、たとえばb-、c-などがある場合は、同様にテキスト部分を別の列に分割します。次に、テキスト列を最初のソート列として、数値列を2番目としてソートします。

ハイライトしたものはすべて、ソート列に従ってソートされます。

文字列関数を説明するために、文字列内から文字列を抽出するmid関数から始めます。 mid(a2,3、len(a2)-2)は、a2のテキストを見て、3番目の文字(すべての接頭辞が「a-」であると仮定した最初の桁)で始まり、次の文字数を取ります。元のテキストの数より2つ少なくなります(元のテキストの長さから「a-」文字を引いたもの)。値関数は、その結果を数字の文字列ではなく数値に変換します。

1
fixer1234