• ベストアンサー

数字の並び替え。

どなたかご存じでしたら回答をお願いします。 エクセルで下記のような4つでひと固まりなデータが 1つのセルに入っており縦にn個あるとします。 No.1 3270 No.2 0370 No.3 2586 No.4 1886   :   : この1つのセルの中の隣同士の数字を比較して 左から小さい順番に並べ替える方法を教えてください。 (セルは1数字ごとに4つに別れてもかまいません。) No.1 0237 No.2 0037 No.3 2568 No.4 1688   :   : エクセルでの操作方法及びVBAならソースの記述をお願いします。 以上

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.11

No.1.2です! 他の方の補足を読ませていただきました。 A列のデータは単に4桁表示の数値と言うコトなのですね? そうであれば前回のコードは無視してください。 ↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub test2() Dim i, j As Long Dim str As String Dim c As Range For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row For j = 1 To 4 Cells(i, Columns.Count).End(xlToLeft).Offset(, 1) = Mid(Cells(i, 1), j, 1) Next j Set c = Range(Cells(i, 2), Cells(i, 5)) str = WorksheetFunction.Min(c) & _ WorksheetFunction.Small(c, 2) & _ WorksheetFunction.Small(c, 3) & _ WorksheetFunction.Max(c) With Cells(i, 2) .Value = str .NumberFormatLocal = "0000" End With str = "" Columns("C:E").Delete Next i End Sub こんな感じではどうでしょうか?m(_ _)m

moguo4649
質問者

お礼

説明不足により、 いくつもの回答を頂きありがとうございます。 早速、試させていただきます。

その他の回答 (10)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.10

質問の書き方がよくわからない。 1セル内の改行は0237+ALT+ENTER+0037+ALT+ENTER+ALT+2568+ENTER+1618+ENTER と入力するが、そうい言った入力と同じことがしてあるということか? NO1、NO2・・は各々の数の前についているのか?これはつけておく必要があるのか。 ーー 並べなおした結果が No.1 0237 No.2 0037 No.3 2568 No.4 1688 ・・のような説明があるが、どういう(並べ替えの)理屈なのか。 エクセルのソートは1つずつのセルにある数値当に限り対象にするものである。 自作でソートも「出来なくは無いが、避けたほうが良いとぇン出在る。 >セルは1数字ごとに4つに別れてもかまいません。) の意味もあいまいだが ーー No.1などはセル内に無いものとすると (1) 標準モジュールに Sub test01() a = Cells(1, "A") x = Split(a, Chr(10)) For j = 0 To UBound(x) Cells(1, j + 2) = "'" & x(j) Next j End Sub 上記は1行セル分だけだが、実際は複数行に亘って処理するコードにする。 を実行すると、B,C,D,E列に分離される。 そこでエクセルの列単位のソート(手操作かVBAか)をすると A1セル 3270 0370 2586 1886 B1:E1セル 0370 1886 2586 3270 になる。これをその後、左から順に、1列データに直すこともたやすい(関数やVBA)。 ーー それに1セルに入っている数字(単位の3270のようなもの)のは1定数4個に決っているのか? 関数などでやる場合、複雑化する決定的要因だ。 >での操作方法及びVBAならソースの記述をお願いします 回答者は家庭教師的立場ではないよ。回答をヒントにして質問者が勉強するものだ。丸写しのコピーできる回答が当然と思わないこと。回答で判らなければ、お礼欄で聞いている質問者もある。

moguo4649
質問者

お礼

ご回答ありがとうござます。 また質問の仕方が悪く申し訳ありません。 No.1 3270 No.2 0370 No.3 2586 No.4 1886 と書きましたが、No.は便宜上つけただけで、 1つのセルには4つの数字が入っていますので、 1個目であれば「3270」が入ってます。と言ってます。 2個目、3個目、4個目のセルはそれぞれ、 0370 、2586、1886がそれぞれ入っています。 その1つのセルの中の数字を「左から小さい順に並び替えたい」と書いた方が 判り易かったかもしれません。(これは私の質問下手で申し訳ありません。) また、「セルは1数字ごとに4つに別れてもかまいません。」 と書いたのは、1つのセルの操作で操作するより、「3」、「2」、「7」、「0」と 4つに分けた方が「左から小さい順に並び替えやすい?」と思ったからです。 長くなりましたが、 いろいろヒントを頂きありがとうございました。

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.9

◆ひょっとして、こいうことならは、 B1="No.1 "&TEXT(SUM(LARGE(MID(A1,FIND(" ",A1)+{1,2,3,4},1)*1,{1,2,3,4})*10^{0,1,2,3}),"0000")&CHAR(10)&"No.2 "&TEXT(SUM(LARGE(MID(A1,FIND("♪",SUBSTITUTE(A1," ","♪",2))+{1,2,3,4},1)*1,{1,2,3,4})*10^{0,1,2,3}),"0000")&CHAR(10)&"No.3 "&TEXT(SUM(LARGE(MID(A1,FIND("♪",SUBSTITUTE(A1," ","♪",3))+{1,2,3,4},1)*1,{1,2,3,4})*10^{0,1,2,3}),"0000")&CHAR(10)&"No.4 "&TEXT(SUM(LARGE(MID(A1,FIND("♪",SUBSTITUTE(A1," ","♪",4))+{1,2,3,4},1)*1,{1,2,3,4})*10^{0,1,2,3}),"0000") ◆下にコピー

moguo4649
質問者

お礼

ご回答ありがとうございます。 説明不足で申し訳ありません。 No.は便宜上つけただけです。 でも、さっそく試させて頂きます。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.8

一例です。 仮にA列にデータ有るとして、No.xと4桁数字間に半角スペースありとしています。 対象のシートタブ上で右クリック→コードの表示→以下のサンプルコードを貼り付け→F5キー押下でお試しください。 Sub sample() Dim wk(3) For Z = 1 To Cells(Rows.Count, "A").End(xlUp).Row List = Split(Cells(Z, 1), vbLf) For x = 0 To UBound(List) xp = InStr(List(x), " ") + 1 If xp > 1 Then For y = 0 To 3 wk(y) = Mid(List(x), xp + y, 1) Next For i = 0 To 3 For j = 3 To i Step -1 If wk(i) > wk(j) Then swap = wk(i) wk(i) = wk(j) wk(j) = swap End If Next j Next i List(x) = Mid(List(x), 1, xp - 1) & Join(wk, "") End If Next Cells(Z, "A").Value = Join(List, vbLf) Next End Sub

moguo4649
質問者

お礼

ご回答ありがとうございます。 さっそく試させて頂きます。

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.7

◆こんな方法はいかがでしょう ◆ただし、元の数字も、並び替え後の数字も「文字列」とします B1=TEXT(SUM(LARGE(MID(A1,{1,2,3,4},1)*1,{1,2,3,4})*10^{0,1,2,3}),"0000") ★下にコピー

moguo4649
質問者

お礼

回答ありがとうございます。 文字列だと、 随分シンプルな記述で並び替えできるんですね。 参考にさせて頂きます。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.6

1つのセルでは必ずNo.1,No.2,No.3,No4が有りますか?数値は必ず4ケタの数値ですか?補足してください。

moguo4649
質問者

補足

説明不足で申し訳ありません。 No.1 3270 No.2 0370 No.3 2586 No.4 1886 と書きましたが、 左側のNo.は便宜上つけただけです。 No.1であれば、「3270」が4つでひと固まりなデータです。 この中の数字を並び替えて「0237」とする方法が知りたいことです。 尚、数値は4桁の数字です。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

>セルは1数字ごとに4つに別れてもかまいません。  今仮に、元データがA列に並んでいるものとします。  そして、B列にはNo.、C列には最も小さい数字、D列には2番目に小さい数字、E列には3番目に小さい数字、F列には最も大きな数字を表示させるものとします。  まず、F1セルに次の数式を入力して下さい。 =IF(ISNUMBER((0&RIGHT($A1,4)&0)+0),MAX(RIGHT($A1,1),LEFT(RIGHT($A1,2),1),LEFT(RIGHT($A1,3),1),LEFT(RIGHT($A1,4),1)),"")  次に、B1セルに次の数式を入力して下さい。 =IF(ISNUMBER((0&RIGHT($A1,4)&0)+0),LEFT($A1,LEN($A1)-4),"")  次に、C1セルに次の数式を入力して下さい。 =IF(ISNUMBER((0&RIGHT($A1,4)&0)+0),MIN(RIGHT($A1,1),LEFT(RIGHT($A1,2),1),LEFT(RIGHT($A1,3),1),LEFT(RIGHT($A1,4),1)),"")  次に、D1セルに次の数式を入力して下さい。 =IF(ISNUMBER((0&RIGHT($A1,4)&0)+0),IF(LEN(SUBSTITUTE(RIGHT($A1,4),$C1,))<3,$C1,MIN(RIGHT($A1,1)+9*(RIGHT($A1,1)+0=$C1),LEFT(RIGHT($A1,2),1)+9*(LEFT(RIGHT($A1,2),1)+0=$C1),LEFT(RIGHT($A1,3),1)+9*(LEFT(RIGHT($A1,3),1)+0=$C1),LEFT(RIGHT($A1,4),1)+9*(LEFT(RIGHT($A1,4),1)+0=$C1))),"")  次に、E1セルに次の数式を入力して下さい。 =IF(ISNUMBER((0&RIGHT($A1,4)&0)+0),IF(LEN(SUBSTITUTE(RIGHT($A1,4),$F1,))<3,$F1,MAX(RIGHT($A1,1)*(RIGHT($A1,1)+0<$F1),LEFT(RIGHT($A1,2),1)*(LEFT(RIGHT($A1,2),1)+0<$F1),LEFT(RIGHT($A1,3),1)*(LEFT(RIGHT($A1,3),1)+0<$F1),LEFT(RIGHT($A1,4),1)*(LEFT(RIGHT($A1,4),1)+0<$F1))),"")  次に、B1~F1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。  以上です。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 今仮に、元データがSheet1のA列に並んでいるものとします。  又、Sheet2のA列~D列を作業列として使用するものとします。  まず、Sheet2のA1セルに次の数式を入力して下さい。 =IF(ISNUMBER(RIGHT(Sheet1!$A1,4)+0),LEFT(RIGHT(Sheet1!$A1,COLUMNS($A:A)),1)+0,"")  次に、Sheet2のA1セルをコピーして、Sheet2のB1~D1の範囲に貼り付けて下さい。  次に、Sheet2のA1~D1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。  次に、「Sheet1A1セルのデータを並べ替えた」データを表示させるセルに、次の数式を入力して下さい。 =LEFT(Sheet1!$A1,LEN(Sheet1!$A1)-4)&MIN('Sheet152 (2)'!$A1:$D1)&SMALL('Sheet152 (2)'!$A1:$D1,2)&SMALL('Sheet152 (2)'!$A1:$D1,3)&MAX('Sheet152 (2)'!$A1:$D1)  次に、「Sheet1A1セルのデータを並べ替えた」データを表示させるセルをコピーして、同じ列の2行目以下に貼り付けて下さい。  以上です。

moguo4649
質問者

お礼

ご回答ありがとうございます。 さっそく試させて頂きます。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

補足願います 1つのセルに入っている「4つでひと固まりなデータ」とは、どれを指すのでしょうか? No.1 3270 No.2 0370 No.3 2586 No.4 1886 これでひと固まり? それとも、4つと言うのは数字の事で、 No.1 0237 または 0237 がひと固まり?

moguo4649
質問者

補足

説明不足で申し訳ありません。 「4つでひと固まりなデータ」と言うのは、 No.1 3270 No.2 0370 No.3 2586 No.4 1886 と書きましたが、 左側のNo.は便宜上つけただけで、 その右側の4個の数字の事を言ってます。 No.1であれば。「3270」が4つでひと固まりなデータです。 例としてNo.4迄しか書かなかったのも判りにくくしたかも知れません。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です! 前回書き忘れましたが No.○の後には必ず半角スペースがあるものとしています。 FIND関数でスペースの文字位置から割り出していますので、スペースがない場合は滅茶苦茶な表示になってしまいます。 何度も失礼しました。m(_ _)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんにちは! VBAでの一例です。 元データはA1セルからあり、B列に表示するようにしてみました。 尚、C~E列を作業用の列として使っていますので、その列にデータたのデータがあればコードを少し変更しなければなりません。 画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, j As Long Dim str As String For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row For j = WorksheetFunction.Find(" ", Cells(i, 1)) + 1 To Len(Cells(i, 1)) Cells(i, Columns.Count).End(xlToLeft).Offset(, 1) = Mid(Cells(i, 1), j, 1) Next j str = WorksheetFunction.Min(Range(Cells(i, 2), Cells(i, 5))) & _ WorksheetFunction.Small(Range(Cells(i, 2), Cells(i, 5)), 2) & _ WorksheetFunction.Small(Range(Cells(i, 2), Cells(i, 5)), 3) & _ WorksheetFunction.Max(Range(Cells(i, 2), Cells(i, 5))) Cells(i, 2) = Left(Cells(i, 1), WorksheetFunction.Find(" ", Cells(i, 1))) & str str = "" Next i Columns("C:E").Delete End Sub 'この行まで 他に良い方法があればごめんなさいね。m(_ _)m

moguo4649
質問者

お礼

ご回答ありがとうございます。 さっそく試させて頂きます。

関連するQ&A

  • エクセルのセル内での数字の並び替え

    こんにちは。 エクセルについて質問です。一つのセルの中に10桁の数字がいくつかあります。 これを同じセル内で縦に並べることは可能でしょうか? ALT + ENTERで数字を一つずつ改行するよりも何かもっと効率的な方法はあるのか、何方か教えていただけますか? (例えばマクロとかアクセスで) 数字は常に10桁なのですが、行によっては9個以上あることもあります。 例: セルA1 0011005408 8701005438 8721005627 8731005602 8741005539 8861005557 8701005441 8721005629 8861005559 ↓ これを、同じセル内で 0011005408 8701005438 8721005627 8731005602 8741005539 8861005557 8701005441 8721005629 8861005559 どうぞよろしくお願いします。

  • 数字の並び替え方法について。

    どなたかご存じでしたらご教授願います。 下記の様に、エクセルシート5行×6列で1セル毎に数字が入っています。 01 12 13 16 27 39 02 08 10 25 34 40 06 07 21 30 38 41 05 20 23 29 36 43 04 17 22 26 35 42 これを、下記のように昇順に並び替える方法を教えてください。 01 02 04 05 06 07 08 10 12 ・・・・・ 40 41 42 43 手作業で1つずつ貼り付け直して昇順に並べるのが手間になってきたので、 何か自動でできる方法が知りたいです。 【注意事項】  (1)5×6のセル内の数字は毎回違いますし、数字の重複はありません。  (2)セル内に出てくる数字は、文字でも数字でもどちらでも構いません。  (3)使用するエクセルは2007です。 以上、よろしくお願いします。

  • エクセル 数字並び替え

    エクセルの数字並び替えにて優先順位を2桁目にして 出力するにはどうしたらよいでしょうか? 1つのセルに数字が3桁があります。それが5行あります。 エクセルの並び替えを使用すると、1桁目を基準に下記のようになりますが ----- 211 ----- 305 ----- 311 ----- 454 ----- 502 ----- このようにではなく下記のように優先順位を2桁目以降にし 順番に並び替えをしたいです。 ----- 502 ----- 305 ----- 211 ----- 311 ----- 454 ----- 宜しくお願い致します。

  • エクセルのVBAでの自動的に数字を入れ込む方法

    ご質問です。 エクセルのVBAで、セルAに縦に数字が入っているとして、 セルAの縦の数字が固有の時には、セルBには数字の1を。 セルAの縦の数字が同じ場合には、セルBには1からの数字の連番を。 入れていくには、どのような関数を書けばよろしいでしょうか? ご存知の方、いらっしゃればどうかご教授ください。 ---------------------------------------- セルA   |セルB | 828113341 | 1  |  828113342 | 1  |  828113342 | 2  |  828113342 | 3  |  828113343 | 1  |  828113344 | 1  |  828113344 | 2  |  828113345 | 1  |  ・ ・ ・ ---------------------------------------- 宜しくお願いいたします。

  • 抜けた数字をチェックするマクロもしくは条件式

    エクセル上で 数字が縦に、1列で並んでいます。 1~数千、数万まで、順番通りです。 ただ途中で数字の抜けがあります。 1、2、3、4、6、7、8、12・13・・・ その抜けをチェックしたいのですが… 例えばその抜けた数字の手前の セル色(もしくは文字色)をかえる… 要は目でおって 何番が抜けているか…を一目でわかるようにしたいのです。 このようなマクロ、または条件式を ご存知の方、具体的な記述をお教えいただけませんでしょうか? よろしくお願いします

  • エクセルに入力した数字を比率にまとめたい。

    質問です。 エクセルの関数で質問です。 当方はエクセルバージョンXPか2007のどちらか。 添付の画像を見るとわかると思うのですが、 数字は0~9まであるとして、選ばれた数字は4個×2=8個(重複あり)つまり、この場合は123456です。 次に出てきた数字5677が左の8個の数字123456と照らし合わせて、123456に含まれる数字(5と6)を2(個)、含まれない数字(7と7)を2(個)と、2:2と比率で取得したい。 もちろん比率ですが『:』は別に無くてもいいです。 セルにそれぞれ2と2という感じで取得できればいいです。 取得比率は0:4 、1:3、2:2、3:1、4:0の5種類になるはず。 いろいろと頑張ったのですが、うまくいかなくて・・・ すみませんが、出来たらとても嬉しいです!! よろしくお願いいたします。

  • VBA 人の目には同じ数字に見えるのに、VBAは違う数字として判定してしまう

    あるセルに1826.97792という数字が入力されており、 別のセルにも1826.97792と同じ数字が入力されています。 人間の目で見る限りまったく同じ数字です。 また、エクセル関数=if(・・・・・)で判定しても同じ数字という判定がでます。 しかしながら、VBAにて if セル1=セル2 then などとして比較すると、同じでないという判定結果になります。 どうしてこういうことが起きるのでしょうか? また、プログラムを書くうえでの対処方法はどうすればいいのでしょうか? ちなみに、数字は他の人が作ったファイルのもので、 改めて、手で入力しなおすと正しく判定されます。

  • エクセルで縦に順に数字入力をしたい

    エクセルで縦に順に数字入力をしたいです。 途中まで、上から順番に、セルの右下を引っ張ることで カウントしていたのに、途中から「同じセルをコピー」になってしまいました。 作業上、とても困るので、順にカウントされるように直す方法を教えてください。 ちなみに今は2439行目です。

  • Excelで数字を順番に入力したい

     自宅でExcel2007、会社で同2003を使っています。  2003でセルに縦に数字を順番に入れる際、一番上に「1」と入れ、そのセルの右下をドラッグすると「2」「3」と自動的に入れることができました。  ところが2007で同じことをすると、ずらっと「1」のみが入ってしまいます。  2003のように、順番に入れる方法があれば教えてください。

  • エクセルで、重複した数字を1つに絞りたい

    画像左のように、数字がランダムで並んでいる表があります。 一度しか出てこない数字や、連続で何度もでる数字があります。 どんな数字があるかだけを表にしたいので、重複した部分を消した、画像右のような表が欲しいです。 数字の大小がバラバラな状態の表ですが、同じ数字が後で出てくることはありません。 (例えば、A2~A4以外のセルに11が登場することはありません。) 重複を消した表も、数字の大小を気にする必要はありませんが、できればそのナンバーが登場した順番に整理されていると都合がよいです。 ナンバーは数十万存在します。この作業が簡単にできる方法があればご教授ください。

専門家に質問してみよう