• ベストアンサー

桁数が混在する並び替えの方法

EXCEL2007です。関数やマクロについてはこんなものがあるんだぁ~程度の知識しかありません。そこで質問です。 以下の数字の並び替えできる方法がわかりません。 単純にEXCELのコマンド操作でできるのでしょうか? それとも関数やプログラムを必要とするのでしょうか? もし関数やプログラムが必要であるならば、がんばって勉強してみようと思ってます。(勉強はするつもりでも、なにが必要かもよくわかっていません。) 並び替えしたい数字は以下のような数字が混在します。 桁数が違う 1桁のものや、2桁~6桁のものが混在する 例 1or12or345or645874 など ハイフンがあるのとないものがある。 例 1-1or1-2or345 順番はまずハイフンの前の番号が若い順に並べたい。 次にハイフンより前の番号が同じものについては、ハイフン後の番号の順番に並べたい。ハイフンが2回重なる場合がある。以下の例を並び替える場合まず一番始まりのハイフン前の若い順に並べるまず4番次に26番次に100番次に226番となり次は1番はじめのハイフンの順番で最後は一番最後のハイフンの順番で以下の例のように並びかえたいです。 1番 4 2番 4-3-5 3番 4-25-2 4番 26-13-6 5番 26-13-21 6番 100 7番 226-8-9 8番 226-15-31 しかしEXCELでは表示形式は文字列にしないと、ハイフンは入力できず、次に並びかえようとすると桁数がバラバラなので 一番初めの数字が桁数より優先されてしまい上記の例ですと本来並びかえたい上の例とは違い。 6番 100 8番 226-15-31 7番 226-8-9 5番 26-13-21 4番 26-13-6 1番 4 3番 4-25-2 2番 4-3-5 と並んでしまいます。理由がわかる方教えていただけませんか??? またどのようにすれば解決するのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • koko88okok
  • ベストアンサー率58% (3839/6543)
回答No.5

ANo.3です。 > 1000個以上あり > 自分なりに考えつくことは、まず列をコピ-して元の列をいじらずにコピ-した列をハイフンで分割する。桁数を揃え(0を入れ込む)優先レベルを確定し並びかえる。 上記で可能だと思います。ただし、桁数を揃える必要はないと思います。 「データ」→「区切り位置」で分割した3列を使って並べ替えすればよいと思います。(AN0.2の方のご回答。 何時も勉強させて頂いております。) その時、問題になるのは、空白セルの存在なので、分割した3列の空白セルを含む範囲を選択して、「編集」→「置換」で「置換後の文字列」に「0」を入力すれば、「0」が挿入されますので、並び替えが可能になります。

hig1971122
質問者

お礼

ありがとうございます。むむむ、置換ですか?これならなんとかなんとか、私でもつかまることができるかもしれません。ありがとうございます。500円で購入したことがある本を思い出しました。うぅぅぅ、頭をひねってみます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 マクロでしたら、以下のようなものを考えてみました。 ただし、こちらの思惑とは違う数字の並びですと、うまくいかない可能性があります。 それは、4桁の数字がある場合です。もちろん、以下の正規表現の「パターン」の部分を修正すれば可能になります。 結果は、このようになります。 「Const DIST As Integer = 2 '右にいくつセルを離すか」の ところを2にしてありますので、A列に数値がある場合は、C列に出力されます。 もちろん、ユーザー定義関数のTriFigs を単独で使用しても、出力されますが、数式ですから、一旦、値貼り付けをしないと並べ替えは出来ません。 004-000-000 004-003-005 004-025-002 026-013-006 026-013-021 100-000-000 226-008-009 226-015-031 標準モジュールに貼り付けて、SortText を実行してください。 '------------------------------------------ Sub SortText() Dim c As Variant Dim i As Long Const DIST As Integer = 2 '右にいくつセルを離すか Application.ScreenUpdating = False '範囲 A1 ~データ範囲まで For Each c In Range("A1", Range("A" & Rows.Count).End(xlUp))  If IsNumeric(Replace(c.Value, "-", "")) Then   c.Offset(, DIST).Value = TriFigs(c.Value)   i = i + 1  End If Next c  Application.ScreenUpdating = True  MsgBox i & "セル、変換を完成しました。", 64 End Sub Function TriFigs(ByVal strText As String)   Dim Matches As MatchCollection   Dim Match As Match   Dim i As Integer   Dim a(2) As Integer   Dim buf As String   If strText = "" Then Exit Function   With CreateObject("VBscript.RegExp")     .Global = False     'パターン     .Pattern = "(\d{1,3})\-*(\d{1,3})*\-*(\d{1,3})*"     If .test(strText) Then       Set Matches = .Execute(strText)       Set Match = Matches.Item(0)       For i = 0 To 2         a(i) = Match.SubMatches(i)       Next       buf = Format(a(0), "000") & "-" & Format(a(1), "000") & "-" & Format(a(2), "000")     Else       buf = strText     End If     TriFigs = buf   End With End Function

hig1971122
質問者

お礼

ご協力いただきありがとうございます。質問してから、雨のせいもありかぜでダウンしてました。お礼が遅れ大変失礼いたしました。マクロは まったくわかりませんがせっかくお考えいただきました回答につきましては、意味がわかるくらいはがんばってみたいと思います。 今日から勉強させていただきます、どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • surounin
  • ベストアンサー率28% (30/106)
回答No.4

力技ですのでお恥ずかしいんですが、以下のようにすれば出来ると思います。 A列にデータがあると仮定してご説明します。(A1から始まっていると仮定) 1 B1に=IF(C1=0,1,IF(D1=0,2,3))  (-の数によって数式を簡単にするためのセルです) 2 C1に=IF(ISERROR(FIND("-",A1,1))=TRUE,0,FIND("-",A1,1))と入力(一個目の-の位置を特定します) 3 D1に=IF(C1=0,0,IF(ISERROR(FIND("-",A1,C1+1))=TRUE,0,FIND("-",A1,C1+1)))と入力(2個目の-の位置の特定) 4 E1に=CHOOSE(B1,VALUE(A1),VALUE(LEFT(A1,C1-1)),VALUE(LEFT(A1,C1-1))) (一個目の-までの値を取り出します) 5 =CHOOSE(B1,0,VALUE(MID(A1,C1+1,9)),VALUE(MID(A1,C1+1,D1-C1-1)))(二個目の-までの値を取り出します) 6 =CHOOSE(B1,0,0,VALUE(MID(A1,D1+1,9))) 以上のように入力した後、データのある行だけコピーして、 E列、F列、G列でソートをかければお望みの並び順になると思いますが(^^;)

hig1971122
質問者

お礼

ありがとうございます。これは関数というもののようですねやはり関数を使わないとできないのですか? まずこのお教えいただいたとおりにやってみたいと思います。自分には少しレベルが高すぎるみたいなので、何日間か日を頂き考えてみたいと思います。どうもありがとうございます。力技でもなんでもうれしいです。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • koko88okok
  • ベストアンサー率58% (3839/6543)
回答No.3

[理由] Excelの並べ替えは、下記URLの「並べ替えの順序」の項にある基準で並べ替えされていますので、基準通り並べ替えているからです。 「リストの並べ替えの基本を学ぼう 2」 http://allabout.co.jp/computer/msexcel/closeup/CU20070425A/index2.htm [対策] 下記のように桁数を揃えれば、ご希望の順に並ぶと思います。 1番 004-00-00 2番 004-03-05 3番 004-25-02 4番 026-13-06 5番 026-13-21 6番 100-00-00 7番 226-08-09 8番 226-15-31

hig1971122
質問者

お礼

早速の回答大変ありがとうございます。教えていただけた方法で近づきつつあります。がしかし、私の説明不足でもうしわけありませんが。例だけみると数がさほどないように見えますが、1000個以上ありまして、お教えいただいた方法では、以下の作業があります。 自分なりに考えつくことは、まず列をコピ-して元の列をいじらずにコピ-した列をハイフンで分割する。桁数を揃え(0を入れ込む)優先レベルを確定し並びかえる。 これでバッチリだと思うのですが自動で0を入れ桁数を揃えつつ、なおかつ何も入力されてないセルに0を入れるなどのことができるのでしょうか?5桁までですので○○○○○-○○○○○-○○○○○のハイフン区切りの数字の列で何も入ってないところに0を挿入することは可能でしょうか? お教えください。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>理由がわかる方教えていただけませんか こんなもの常識で回答者はみんな知っているよ。 並べ替えは、コンピュタがやるルールが決まっている。我々はそれに沿ってソートキーをつくり、勘案する列(と優先順位、昇降順と)を指定するだけ。 データー区切り位置ーハイフンで3列に分けるのが良いでしょう。 http://www.kenzo30.com/ex_kisopoint/onepoint_hensyu7.htm 参考。本質問ではハイフンで分ける。 そして数字記号ー以外の文字はなさそうだから、数字でソートすればよい。一番常識的な並びになるよ。元の1列が3列データに分かれるが、左の列から第1キー、次の列を第2きー、3列目を第3キーとしてソートする。 たまたま今回のケースは関数も、VBAも要らない。操作だけ。

hig1971122
質問者

お礼

ありがとうございます。いろいろ考えてはいるのですが、なかなか思うように行かず悩んでます。大変参考になりました。いろいろやってみます。お付き合いいただきありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • kjtyn7
  • ベストアンサー率24% (300/1223)
回答No.1

4-3-5=数値でなく文字列と成りますので、セル内の先頭文字4のみ並べ替え対象です、-3-5は対象になりえません。次のように数値を3列に分けてInPutし、列ごとに、並べ替える条件を設定します。数値では、-=マイナスで記号で、ハイフンではありません。 A列=4,26,100,226  B列=3,25,13,8,  C列=5,2,6,21,

hig1971122
質問者

お礼

早速のご回答ありがとうございます。なるほど列ごとに分けるんですね。できましたらハイフンこの場合マイナスですが、これを含め1つのセルに入力したいのです。理由は、入力が複雑になるからです。あと並びかえた後にチェックする際ABCの各列が動いてないともかぎりませんし・・同一セル内で桁数が違うしかもマイナスで区切られた並び替えの優先順位をもった数字はどう処理したらならびかわるのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 桁数の統一と不要な文字の削除の仕方

    桁数の統一と不要な文字の削除の仕方 数字の後に「-(ハイフン)1」や「-(ハイフン)2」が入力されている数字があり、 「-」以下の数字を表示させず、尚且つ数字の桁数(6桁)を統一する方法を探しています。 <例> 最初の数字       処理後 11111-1    →   011111 11111-2    →   011111 222222     →   222222 222222-1    →   222222 当初「-1」、「-2」を置換で削除した後、ユーザー定義を「000000」にしていました。 ただ、置換処理が手間な為、関数等で簡単に処理できればと考えています。 宜しくお願い致します。

  • データの桁数を揃える関数をご教示下さい。

    データの桁数を揃える関数をご教示下さい。 セルの内容自体を同じ桁数の文字列としたいです。 また、桁数を揃える場合に、桁数の少ない場合には、 末尾に0を追加し、桁数を揃えたいです。 ex) 10桁と11桁と12桁の数字が混在 ⇒12桁に統一 120004561234(12)⇒120004561234(そのまま) 12000457131(11)⇒1200045713100(末尾に0を追加) 1200000562(10)⇒120000056200(末尾に00を追加) 以上、ご回答をよろしくお願いします。

  • EXCELの関数でデータの桁数を揃える

    桁数が1桁と2桁の混在したデータがあります。 (0,1,10,22,3,5) 機械的に入るデータなので結果を桁数を揃えたいと思っています。 (00,01,10,22,03,05) 関数などを組み合わせて桁数を揃えることは可能でしょうか?

  • 有効数字の桁数

    有効数字がよくわからなくて調べていたら、 こんな例がありました。 有効数字3桁の例 31400 3.14 538 5.38×10^2 3.00×10^-5 ←これも3桁です なぜこれらは有効数字が3桁なのですか? どうやって桁数を判断するのかわかりません。 教えてください。よろしくお願いします。

  • EXCELの桁数の変更を教えてください。

    顧客情報を2つのシートで管理しており、一つのシートのみに、 顧客番号をふっているので、もう一つのシートにも、その顧客番号をvlookupでひっぱろうとしたのですが、電話番号の下1桁が違っていたりして、マッチングができませんでした。 で、マッチングをさせるために、下2桁を切り落とし、桁数を変えることはかのうでしょうか。電話番号の下2けたを落としてvlookで引っ張れば、適合するものが多くなるように思います。 たとえば、0120-12-1234とかりに番号があった場合、ハイフンをトリムして、120121234とおきかえて、下ふたけたをきりおとして、1201212と9ケタから7桁の数字にする方法です。 よろしくお願いいたします。

  • エクセルでの並び替えについて

    住所録で都道府県順に並び替えるたにデーター 並び替えを活用すると下記の順番になります。(あいうえ順である。)    1番に京都 2番に神戸 3番に奈良 4番に和歌山 並び替えのオプション以外の方法で並び替える方法は、ありませんか。 (自分の好きな順に) (例)1番に奈良 2番に和歌山 3番に神戸 4番に京都の順に変更できませんか。

  • EXCELの置換 方法

    前回も似たような質問をさせていただいたのですが、 また似たような処理が出てきてしまったので質問させてください!! もしお分かりになる方がいらっしゃいましたらアドバイスいただけると嬉しいです。 よろしくお願いします!! コード番号の一括置換えをするにはどうすれば良いのか教えてください。!! <例> 00000X0-0 00111T0-1 00200S0-0 00003K0-0    ・    ・    ・    ・ 上記のような数字5桁/英字1文字/数字1桁/ハイフン/数字1桁 で表記されるコード番号があります。 このコード番号を数字3桁/英字1文字/数字2桁/ハイフン/数字2桁 で一括置換えしたいのですが、それは可能でしょうか? <例> 000X00-00 111T00-01 200S00-00 003K00-00 *英字の次の数字とハイフンの次の数字は“0”が挿入されます。 (下線の箇所です。) コード番号の数が600件程あるので、一括置換えができると とても時間短縮になるのですが、、、。 置換えでなく、他の方法で変換が出来るのでしたらそちらも 教えて頂ければと思います。 (難しいマクロとかはやったことがないのでできましたら関数の応用などで 出来るやり方を教えて頂ければ有難いです。) 宜しくご指導お願いします。!!

  • 有効桁数について

    ある数値を5回測定したとします A 5.039 B 5.075 C 5.092 D 5.064 E 5.058 有効桁数はすべて4桁ですよね? 次にA~Eの平均を取ると (A+B+C+D+E)/5=5.0656 と関数電卓で結果がでますが、4桁に丸めて5.066とすれば有効桁数の扱い方としては問題ないですか? そしてA~Eの平均の2乗をするときは、上記の平均を有効桁数4桁に丸めた5.066を2乗して (5.066)^2=25.664356 となり、そして5.066の有効桁数4桁に合わして25.66とすればいいのでしょうか? それとも平均の値を4桁に丸める前の電卓で出た値のまま2乗した後、最終的に4桁に丸めるのがいいのでしょうか?この数値だとどちらでやっても4桁にした値は変わりませんが・・・ 有効桁数の扱い方で問題があったら教えてください、また平均の2乗を求めるときはどちらが正しいのでしょうか? (平均の値の2乗は平均×平均なのだから平均の値を4桁にせず5桁として計算すると平均の2乗は有効桁数5桁と考えるので、やはり正しく平均の値を測定値の有効桁数4桁に丸めて出した平均の値を2乗する方が正しいですかね・・・)    また、上記の平均の計算をしたときのよな、「5」などの数字の有効桁数は何桁ですか?1桁なんでしょうか?もし1桁なら割り算をしているので有効桁数はいちばん桁数の少ないものに合わせるので有効桁数1となると平均の値が「5」となりおかしいとおもうんですが・・・ 上記の平均を取ったときの「5」や、測定回数の数値や、測定していない数で100で割れと書いてあったりしたときは、それらの数字の桁数も考えなければならないんでしょうか? 読みづらい文章かもしれませんが、ご回答待っています。

  • 有意桁数、有効桁数について

    有意桁数というものがあって、それが公に認知されている(出所がJISとかその他の公知規格)ものなのか、また有効桁数との関係等を悩んでいます。どなたかそちら方面に詳しい方がいらっしゃいましたら是非教えてください。お願いいたします。 有意桁数 ・測定値に小数点が含まれている場合、または10のべき乗で示されている場合はべき乗以外のすべての桁を有意桁数とする。 例:0.001ー有意桁数3、1.01ー有意桁数3、3×10⁴-有意桁数1、1.25×10⁵ ー有意桁数3 ・べき乗で示されていない自然数の場合で数値の後ろにゼロがある場合は、ゼロを省いた上位の数字の桁数を有意桁数とするが、1桁となる場合は、”2桁”とみなす(最低でも2桁とする)。 例;5000ー有意桁数2、3150ー有意桁数3、10ー有意桁数2、201ー有意桁数3 ・測定値のToleranceは、有意桁の最下位の1つ下の位で四捨五入する値とする。

  • エクセル関数で桁数指定し数値を比較したいが

    エクセル関数で桁数指定などあるのでしょうか? 例えば 桁数を指定し一致した数値を取り出したいが・・どうすればよいでしょうか? 桁数は1桁~6桁です。 「例」123456の数字があります。 6桁全て一致したら○ 下5桁一致したら○ 下4桁一致したら○ 下3桁一致したら○ ・・・・と言う具合にエクセルで組みたいのです。よろしくお願いします。

専門家に質問してみよう