2017-12-05 21 views
-1

私は在庫番号を英数字で部品番号順に並べ替えて、数字の前に文字を並べ替えるようにしています。これはExcel(またはCalc)で可能ですか?例えば文字列を英数字で並べ替えます(数字の前の文字)

、リスト

0004006A 
AN42B10 
0400975 
1968 
MS21042L3 
0004006 
AN414A 
J961393 
AN4H16A 
SR22SCW20 
STD1410 
4914 
15KE51CA 
21 
560 

与えソートされたリストは、現在

AN4H16A 
AN414A 
AN42B10 
J961393 
MS21042L3 
SR22SCW20 
STD1410 
0004006 
0004006A 
0400975 
15KE51CA 
1968 
21 
4914 
560 

あるべきリストが

のように見えるので、私はそれが文字の前に数字をソートするために取得することができます
004006 
0004006A 
0400975 
15KE51CA 
1968 
21 
4914 
560 
AN414A 
AN42B10 
AN4H16A 
J961393 
MS21042L3 
SR22SCW20 
STD1410 

(注記esp AN4H16AAN42B10 & AN414A前ではなく。)

私はカスタムリストを(追加しようとしたA、B、C、...、7、8、9)が、同じ結果は、そのリストで並べ替えます。

+0

「0004006A」は、「0004006」の前後に予測されますか? '0004006A'があなたの期待した結果から欠落しています。 – Jeeped

+0

私はそれを逃した。私はそれが後になることを好むだろう。 – Pockets

答えて

1

次の解決策はLO Calcのためのものです。データがA1からA15の場合は、B1に次の式を入力します。

=IF(LEN($A1)<COLUMN()-1;-1;IF(CODE(MID($A1;COLUMN()-1;1))<=CODE(9);MID($A1;COLUMN()-1;1)+27;CODE(MID($A1;COLUMN()-1;1))-CODE("A"))) 

これはA1の文字列の最初の文字を取得し、次に0(ソート順で最初の)とになる「A」と、その文字のソート値を決定し、「9」の36(最後になっソート順)。

これで、文字列の残りの文字はJ15にドラッグして塗りつぶし、次に他の文字列はJ15にドラッグします。

次に、データ - >並べ替えに移動します。ソートキー1列B、ソートキー2列Cである、等々J.

を通してあるいは

sort menu

、A15を介してA1を選択し、以下Python macroを実行しています。

import uno 

def custom_sort(): 
    oSelect = XSCRIPTCONTEXT.getDocument().getCurrentSelection() 
    rowTuples = oSelect.getDataArray() 
    rowTuples = sorted(rowTuples, key=letters_then_numbers) 
    oSelect.setDataArray(rowTuples) 

def letters_then_numbers(rowTuple): 
    strval = str(rowTuple[0]) 
    sresult = "" 
    for c in strval: 
     if c in (str(i) for i in range(10)): # if character is a number 
      c = chr(ord('z') + int(c))  # then order it after z 
     sresult += c 
    return sresult 

g_exportedScripts = custom_sort, 
+0

私は数式を動作させることができませんでした(おそらく私はドキュメントに一致するようにセル参照を変更していませんでした)が、しかし、pythonマクロはトリックでした。ありがとうございました! – Pockets

関連する問題