セル内の数字を昇順で並べ替える方法

このQ&Aのポイント
  • エクセル2003を使っている場合、セルの中に小数点で区切られた数字がある場合、それを左から昇順で並べ替える方法を教えてください。
  • B列にはページ数が小数点で区切られて入力されており、その数値を昇順で並べ替えたい場合にどうすればよいかご教示願えませんでしょうか。
  • エクセル2003を使用していて、B列に小数点で区切られた数字がある場合に、その数字を左から昇順で並べ替える方法を教えてください。
回答を見る
  • ベストアンサー

セルの中の数字の並べ替え

こんにちは いつもお世話になっています エクセル2003を使っています。 本の索引を作ってる途中です。 A列に文字列、B列にページ数が入力されています。 B列の数字はページ数ごとに小数点で区切ってあります。表示形式は標準です。(そのためでしょうか、例えば下記の北海道でページ数が一つのセルは小数点がつかずにセルの右端に入力されます) 例えば、 A          B 青森       321.24.369.125.45. 岩手       65.54.65.214.114. 北海道         32 宮城       45.245.165. 秋田 東京       132.45.87.63. こんな感じで350行ぐらいあります。項目によってはB列にデータが無いセルもあります。 ここで質問なのですが、 B列の各セルの中で小数点で区切られた数字ごとに左から昇順で並べ替える方法を教えてください。 現在はセルごとにワードに貼り付けて小数点を置換で改行し縦にしてからソートするなどして大変手間がかかります。 よろしくお願いします。

  • 5goma
  • お礼率82% (265/321)

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

  • ベストアンサー
  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.3

セル内にドットで区切られた数値データーの並び替え自体を間数式やマクロで行おうとすると結構複雑な処理が必要になると思われます EXCELの標準機能のみで実現する方法として 1.B列を選択してコピー 2.新たなシートを追加してA列に貼りつけ 3.A列を選択した状態で[データー]⇒[区切り位置]でドット区切りでデーターの分割 4.行単位でソート ※並び替えは行単位で実施する必要があるため、この部分の連続動作のみマクロ化 Sub Macro1() Rows("1:1").Select For i = 1 To 350 'データー個数に合わせてループ回数は修正してください Selection.Sort Key1:=Range("A" & i), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Selection.Offset(1, 0).Select Next End Sub 5.並び替えが終了したシートをCSV形式で保存 6.保存したファイルをメモ帳で開きカンマ[,]をドット[.]に置き変え 7.連続したドット[..]をドット[.]に置き変え ※連続したドットがなくなるまで繰り返してください 8.全体を選択して元データーのB列に貼り付け ※この際に3で実施した区切り位置の設定が残っている場合、ドット区切りでデーターが分割されてしまいますが、テキストウィザードで固定長を選択すればお望みの形式で貼り付けされます この操作も面倒と感ずるようであれば、初めからデーターの修正がしやすい形式で保存する工夫をする方法を考える方がいいです

5goma
質問者

お礼

web2525 様 ありがとうございました。お蔭様で解決しました。 丁寧に教えていただき助かりました。 簡単で恐縮ですが、お礼申し上げます。

その他の回答 (6)

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

以下のことを反省してください。エクセルで (1)並べ替えとは「セルの」順序を並びかえるのだ (2)なにで並べ替えるかというと基本はセルの値(数値か文字コード)で並べ替えるのだ。(ユーザー定義の順の並べ替えやふりがな順で並べ替えられるのは、エクセルが裏で細工してるからである)色の順なども出現するかもしれないがそれも同じで、基本はセルのあたいだ。 ーー 本件は1セルの中の区切り文字で区切った部分を単位にして並べ替えたいということのようだが、そのままでは、エクセルで並べ替えられるはずが無い。 ーー そこ各セルに、データー区切り位置で分離して並べ替えるべきだ。 プログラムの出来る人は、変数や配列に区切った値を入れて、プログラムでソートするなどして並べ替えられるが、質問者は経験無いでしょう。 ーー ただし、各セルに分離しても以外に列でソートするのは難しそうだ。 列ソートはエクセルの本筋ではなく、あまり使わなかったが、どうも多数行ではうまくいかない。 其れで各行のソートの繰り返しをVBAでやってみた。 外に良いやり方があるか、既出・今後の回答に良い回答が出ないかを見てください。 ーー 例データ(分離後) A-F列 A列でソートをとりあえず行う(アイウエオ順やABC順で)そのソート後が下記とする。数字はページ数のつもり a 212 34 12 15 213 b 12 37 34 67 c 56 76 31 としてみる。こういうデータが凸凹状態(不揃い)の場合なのでVBAでやってみた ーー マクロの記録を取って、少々変更し、行ごとの繰り返しをしている。 Sub Macro3() d = Range("B65536").End(xlUp).Row 'MsgBox d '最終行 For i = 2 To d 'データは第2行目からとする r = Range("iv" & i).End(xlToLeft).Column '各行の右端の列をとらえる 'MsgBox r '以下ソート マクロの記録から少し修正 Range(Cells(i, "B"), Cells(i, r)).Select Selection.Sort Key1:=Cells(i, "B"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, SortMethod _ :=xlStroke, DataOption1:=xlSortNormal Next i End Sub ーー 結果 a 12 15 34 212 213 213 b 12 34 37 67 c 31 56 76

5goma
質問者

お礼

imogasi 様 ありがとうございました。 丁寧に教えていただき助かりました。 せっかく教えていただいたのですがこちらの能力不足で使いこなせませんでした。 ページ数を分割後、索引項目をつけたまま実行すると成功する行もあるのですが、索引項目もソートされる行もありました。索引項目を除いて実行するとソートに成功していない行が出ました。 再度試してみます。 簡単で恐縮ですが、お礼申し上げます。

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

並べ替えというのが、(1)セルの単位で(2)セルの値で(表j形式でない、で並べられるという常識をはっきり認識して無いから、こんな質問異なる。 (1)のことからセル単位で(別々のセルに)分けないとエクセルでは並べ替えできない。 また(2)からセルの値は並べ替え目的に応じてここのセルに分離しないとならない。 ーー プログラムでやるのなら、配列に一時的にわけて、その配列の値をソートするなどのことが出来るか、経験無いだろう。 ーー 一番よいのは、各行の索引語句は左列で別扱いのソートをして、だい2列から右は列ソートすればページ順になる 要らないカンマは都合よく省いてくれる。 ーー エクセルを使うときは、データが完成後、後々何をしたいか、エクセルではどういう機能を使うか、そのためにはどうしなければ (入力しておくべきか)よく考えてやら無いといけない。 今頃になって質問するようでは周到さが足りない。 ーー さてデーター区切り位置で各セルに分離した後 ページ番号で左から右に並べるやり方は 例データ a 212 34 12 15 212 b 12 37 34 67 c 56 76 31 のようにジャグジー状態のときは Sub Macro3() d = Range("B65536").End(xlUp).Row MsgBox d '最終行 For i = 2 To d '第2行目からとする r = Range("iv" & i).End(xlToLeft).Column '右端の列をとらえる 'MsgBox r '以下ソート マクロの記録から Range(Cells(i, "B"), Cells(i, r)).Select Selection.Sort Key1:=Cells(i, "B"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, SortMethod _ :=xlStroke, DataOption1:=xlSortNormal Next i End Sub 列ソートでデータ数(列数)が不揃いの場合、操作でやってみたがうまくいかないのでマクロでやった。 もし私が知らないだけなら、後続のよい回答によってください。

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

面倒な操作になりますが次のようにしてはどうでしょう。 B列を選択してからエクセル2010でしたら「データ」タブの「区切り位置」を選択します。 「カンマやタブなどの区切り文字・・・」で「次へ」をクリック、「区切り文字」でその他の項目にドット.を入力し「次へ」から「完了」と進みます。例えばB列に数値が最大で8つあるとしたらI列までに数値が並びます。 そこでJ1セルには次の式を入力してQ1セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(COLUMN(A1)>COUNT($B1:$I1),"",SMALL($B1:$I1,COLUMN(A1))) R列には答えを表示させるとしてR1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNT(J1:Q1)>0,J1&".","")&IF(COUNT(J1:Q1)>1,K1&".","")&IF(COUNT(J1:Q1)>2,L1&".","")&IF(COUNT(J1:Q1)>3,M1&".","")&IF(COUNT(J1:Q1)>4,N1&".","")&IF(COUNT(J1:Q1)>5,O1&".","")&IF(COUNT(J1:Q1)>6,P1&".","")&IF(COUNT(J1:Q1)>7,Q1&".","") 答えをB列に表示したい場合にはR列を選択してから「コピー」し、その後にB1セルを選択して右クリックし、「形式を選択して貼り付け」で「値」にチェックをしてOKします。昇順で並べ替えされたデータが表示されます。その後は作業列として使ったC列からR列までを選択し削除してもよいでしょう。

5goma
質問者

お礼

KURUMITO 様 ありがとうございました。 丁寧に教えていただき助かりました。 取り急ぎお礼だけで恐縮ですが大切に使わせていただきます。

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

 以下の様な方法は如何でしょうか。  今仮に、元データが入力されているシートがSheet1であり、B列の1個のセル内に入力されている、区切られた数字の個数は、例えば10個以内であるものとします。  まず、Sheet2のA1セルに次の数式を入力して下さい。 =IF(ISNUMBER(VALUE(SUBSTITUTE(Sheet1!$B1,".",))),IF(COLUMNS($A:A)>LEN(Sheet1!$B1)-LEN(SUBSTITUTE(Sheet1!$B1,".",))+ISERROR(FIND(".",Sheet1!$B1)),"",MID(Sheet1!$B1,FIND("゛",SUBSTITUTE("."&Sheet1!$B1,".","゛",COLUMNS($A:A))),FIND("゛",SUBSTITUTE(Sheet1!$B1&".",".","゛",COLUMNS($A:A)))-FIND("゛",SUBSTITUTE("."&Sheet1!$B1,".","゛",COLUMNS($A:A))))*1),"")  次に、Sheet2のA1セルをコピーして、Sheet2のB1~J1の範囲に貼り付けて下さい。  次に、Sheet2のA1~J1の範囲をコピーして、同じ行の2行目以下に貼り付けて下さい。  次に、Sheet3のA1セルに次の数式を入力して下さい。 =IF(ISNUMBER(VALUE(SUBSTITUTE(Sheet35!$B1,".",))),MIN(Sheet2!1:1)&IF(COUNT(Sheet2!1:1)>1,".",""),Sheet35!$B1&"")  次に、Sheet3のB1セルに次の数式を入力して下さい。 =IF(COLUMNS($A:B)>COUNT(Sheet2!1:1),"",SMALL(Sheet2!1:1,COLUMNS($A:B))&IF(COUNT(Sheet2!1:1)>COLUMNS($A:B),".",""))  次に、Sheet3のB1セルをコピーして、Sheet3のC1~J1の範囲に貼り付けて下さい。  次に、Sheet3のA1~J1の範囲をコピーして、同じ行の2行目以下に貼り付けて下さい。  次に、Sheet4のA1セルに次の数式を入力して下さい。 =Sheet1!$A1&""  次に、Sheet4のB1セルに次の数式を入力して下さい。 =Sheet3!$A1&Sheet3!!$B1&Sheet3!!$C1&Sheet3!!$D1&Sheet3!!$E1&Sheet3!!$F1&Sheet3!!$G1&Sheet3!$H1&Sheet3!$I1&Sheet3!$J1  次に、Sheet4のA1~B1の範囲をコピーして、同じ行の2行目以下に貼り付けて下さい。  これで、Sheet4に、 A列         B列 青森 24.45.125.321.369 岩手 54.65.65.114.214 北海道 32 宮城 45.165.245 秋田 東京 45.63.87.132 という具合に表示されます。

5goma
質問者

お礼

kagakusuki 様 ありがとうございました。 丁寧に教えていただき助かりました。 取り急ぎお礼だけで恐縮ですが大切に使わせていただきます。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

沢山の文字を結合したり入れ替える,あんまり合理的な関数はありません。 仮に最大5つの数字として,D1からH1までに 321 24 369 125 45 と順不同で(途中に空白セルを交えても構いません)記入しておき,B1には =IF(COUNT(D1:H1),SUBSTITUTE(TRIM(CONCATENATE(TEXT(SMALL(D1:H1+0,1),"# "),TEXT(SMALL(D1:H1+0,2),"# "),TEXT(SMALL(D1:H1+0,3),"# "),TEXT(SMALL(D1:H1+0,4),"# "),TEXT(SMALL(D1:H1+0,5),"# ")))," ",".")&".","") と記入して,コントロールキーとシフトキーを押しながらEnterで入力しておきます。 もっと沢山の数字が並ぶときは,パターンに倣って式を延長して下さい。 #あるいはエクセル的には, 目次の元データとして暫定的に 青森 321 岩手  65 青森  24 宮城  45 岩手  54 東京 132 東京  45 :  : といったシングルなデータ並びを先に作成しておき,データが出そろった後に並べ替えと簡単な計算で目的の文字列を整形した方が,数式としては遙かに簡単にできます。

5goma
質問者

お礼

keithin 様 ありがとうございました。 丁寧に教えていただき助かりました。 取り急ぎお礼だけで恐縮ですが大切に使わせていただきます。

  • Cupper-2
  • ベストアンサー率29% (1342/4565)
回答No.1

小数点が2つ以上あると 「文字列」 として扱われます。 小数点が1つまたは1つもない状態は 「数値」 として扱われます。 「データ」の「区切り位置」機能で、セルを分解してはいかがでしょう。 その上でセルを並べ替えるなら楽にできますよ。 必要ならその分解して並べ替えた結果を結合しても良いでしょう。 日本国内で使うことを考えれば、区切り文字はピリオド(.)ではなく カンマ(,)あるいはセミコロン(;)を使った方が良いでしょうね。 ※ 小数点位置や桁区切り文字を 1,000.001 のように使うのは世界的に見て少数派。   多くは 1.000,001 のように逆に使います。

5goma
質問者

お礼

Cupper-2 様 ありがとうございました。 丁寧に教えていただき助かりました。 大変勉強になりました。 簡単で恐縮ですが、お礼申し上げます。

関連するQ&A

  • セル内からの数字の抽出

    複数のセルがあり、そのセルそれぞれに、 「(文字列A)(数字1) (文字列B)(数字2)」 と入力してあります。(文字列A)と(文字列B)は、定型文字列なので、複数のセルがありますが、同じ文字列が入っています。 一方で、(数字1)(数字2)は、それぞれのセルによって、異なった数字が入っています。 ただし、セルによっては、(文字列A)(数字1)は、入力していないものもあります。 このようなセルが複数ある中から、(数字1)だけを抽出して、セル内に「(数字1)」だけの列を作りたいのですが、何かよい方法はないでしょうか?よろしくお願いします。

  • 昇順に並べ替え

    セルA1に50.1、セルB1にB、セルA2に49.9、セルB2にAと入力されています。 A列は、小数点第一位を四捨五入するので両方とも50と表示されています。 A列が同じ(この場合は50)時は、B列は昇順に並べたいです。 VBAで並び替えすると、数字は50.1と49.9なので1行目と2行目が入れ替わりません。 セルに表示されている数字での並び替えはどうしたら良いのでしょうか?

  • Excelで索引を作る際、重複項目とページ数を抽出したい

    副読本教材の索引を作っています。Excelに索引項目とページ数を入力しましたが、重複項目のページ数をつまみ上げる方法が分かりません。どなたか教えていただけませんでしょうか。 <現在の状態> A列      B列 (項目名)  (ページ数) 北海道     4 北海道     10 北海道     19 <したい状態> A列      B列 (項目名)  (ページ数) 北海道     4,10,19 どうかよろしくお願いします。

  • セルの数字を昇順に並び替えて重複削除する方法

    いつも大変お世話になっております。 どなたかご存じの方がお見えでしたら回答頂けると幸いです。 【質問】  添付図のとおり、2列×20行の数字が【入力値2列】欄に入っています。  この数字を昇順に並び替えて重複数字を削除したものを【重複チェック済2列】に  出力します。また、【入力値2列】欄の数字を【入力値1列】に縦1列にして数字 を昇順に並び替えて重複数字を削除したものを【重複チェック済1列】に出力しま す。具体的には下記(1)~(4)の手順です。質問は2列×20行での場合ですが、  2列×200行の場合でも上記のことができるようにしたいです。    *********************************** (1)入力値2列(A列・B列)に2つの値をセットします。 (2)入力値2列(A列・B列)の値を重複チェック済2列(D列・E列)に並べて昇順に並び替えて重複数字を削除します。 (3)入力値2列(A列・B列)の値を入力値1列(G列)に1列にセットします。 (4)入力値1列(G列)の値を重複チェック済1列(I列)に並べて昇順に並び替えて重複数字を削除します。 以上、よろしくお願いします。

  • セルの中の数字を横1列に昇順に並べる方法

    どなたかご存知でしたら回答をよろしくお願いします。 【質問】 下図の様に、5×5セルの中に数字が1~99迄重複してランダムに入っています。 これを、昇順に横1列にしてA7から右に並べる方法が知りたいです。 〇例題   A B C D E  1 05 08 34 12 22 2 07 10 11 20 29 3 80 10 12 17 31 4 08 19 24 90 27 5 02 30 04 09 26 〇実行後 02 04 05 07 08 08 09 10 10 11 12 12 17 19 20 22 24 26 27 29 30 31 34 80 90 〇注意事項  ・使用するエクセルは2010です。  ・セルの数字は表示上、2桁で表しています。(例:1ではなく01) 以上、よろしくお願いします。

  • B列にA列の数字をかけた数字を出したい

    B列の各行に3(or2or1)を入力をしたらA列の数字に0.3(2なら0.2,1なら0.1) をかけて小数点第一以下は切り捨てをするマクロを組みたいのですができません。 例  A5に4581と入力されていてB5に3と入力をしたらB5が1374と変換される ようにしたいです;どのようなマクロを組めばよいでしょうか。。。 環境はWINDOWSVISTAのEXCEL2007ですm(__)m

  • すでに入力されている数字で計算をしたい

    数字が入力されている表があります D列E列F列の数字をそれぞれB列の数字で割り算をしたいと考えています 割り算の答えは同じそのセルに上書きするようにします 別のセルで計算した結果を値貼り付けでもってきていたのですが、 マクロで処理できればと考えております 2行目から数字が入力されているのですが、 最終行が決まっておりません。 答えは全て小数点第2位までで表示したいと考えています どなたかご教授いただけますでしょうか よろしくお願い致します

  • エクセルでの重複セルの削除

    こんにちは いつもお世話になっています。 エクセル2003を使っています。 A列に文字列があり、条件付書式で重複データのセルに背景色を付けています。 A列は、ふりがなで昇順でソートしてあります。 条件付書式は数式に =COUNTIF(A:A,A1)>1としています。 B列にはA列の特定セルの行にだけ数字データがあります  A列の特定セルとはA列の重複セルの下側のセルです。 重複データは常に2つだけ出てきます。ソートしてあるのでB列にデータの無いセルが上側に配置されているのだと思います。 例えば、 A    B 事項 該当箇所 (見出しです) 愛知  秋田 秋田 12.23.34. 石川 愛媛 愛媛 5.68.78. (A列の秋田、愛媛のセルの背景色が条件付書式で黄色くなっています) という具合です。 ここで質問ですが、 重複セルの上側のセルだけを削除する方法を教えてください。上の例ではB列にデータの無い秋田、愛媛です。 フィルタオプションで「重複セルを無視する」にチェックをいれても重複セルの下側のセルが無視されてしまいます。また、検索で色つきセルだけを表示しようとしても条件付書式ではできないようです。 わかりにくい説明ですみません。よろしくお願いします。

  • 数字をセルの中央に配置して、右側で揃えたい

    数字をセルの中央に配置して、右側で揃えたいのですが、できますか? 例えば、セルA1に30.2、セルA2に2.2が入っているとき 中央揃えをすると、上下の数字の小数点の位置が左右にずれます。 小数点の位置を揃えて表示したいのですが、できますか? 2.2を02.2と認識させられれば良いのですが。

  • EXCELで入力した数字を切り捨てる方法

    EXCELで計算結果を切り捨てる方法はわかるのですが(ROUNDDOWN,TRUNC等)、入力した数字をそのまま切捨てることはできるのでしょうか? セルの書式設定で小数点以下を0にすれば、見た目は少数以下は無いですが、実際は小数点以下も持っているようです。 もしくは そのセル(A1とした場合に)をほかのセル(B1)で参照して =ROUNDDOWN(A1,0) という式を入れればできるのもわかるのですが、その入力セル自体で切捨てを行いたいのです。 例)あるセルに 1234.56 と入力したら 1234 という数字にしたい。

専門家に質問してみよう