プロが教えるわが家の防犯対策術!

どなたかご存じでしたら回答をお願いします。
エクセルで下記のような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ならソースの記述をお願いします。

以上

A 回答 (11件中1~10件)

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/12 22:35

質問の書き方がよくわからない。


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セル0370188625863270
になる。これをその後、左から順に、1列データに直すこともたやすい(関数やVBA)。
ーー
それに1セルに入っている数字(単位の3270のようなもの)のは1定数4個に決っているのか?
関数などでやる場合、複雑化する決定的要因だ。
>での操作方法及びVBAならソースの記述をお願いします
回答者は家庭教師的立場ではないよ。回答をヒントにして質問者が勉強するものだ。丸写しのコピーできる回答が当然と思わないこと。回答で判らなければ、お礼欄で聞いている質問者もある。
    • good
    • 0
この回答へのお礼

ご回答ありがとうござます。
また質問の仕方が悪く申し訳ありません。
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つに分けた方が「左から小さい順に並び替えやすい?」と思ったからです。
長くなりましたが、
いろいろヒントを頂きありがとうございました。

お礼日時:2011/08/12 21:09

◆ひょっとして、こいうことならは、


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")
◆下にコピー
「数字の並び替え。」の回答画像9
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/12 20:53

一例です。


仮に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
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/12 20:53

◆こんな方法はいかがでしょう


◆ただし、元の数字も、並び替え後の数字も「文字列」とします
B1=TEXT(SUM(LARGE(MID(A1,{1,2,3,4},1)*1,{1,2,3,4})*10^{0,1,2,3}),"0000")
★下にコピー
「数字の並び替え。」の回答画像7
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/12 21:14

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

この回答への補足

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

補足日時:2011/08/12 20:48
    • good
    • 0

>セルは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行目以下に貼り付けて下さい。

 以上です。
    • good
    • 0

 今仮に、元データが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行目以下に貼り付けて下さい。

 以上です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/12 20:51

補足願います



1つのセルに入っている「4つでひと固まりなデータ」とは、どれを指すのでしょうか?

No.1 3270
No.2 0370
No.3 2586
No.4 1886

これでひと固まり?
それとも、4つと言うのは数字の事で、

No.1 0237

または

0237

がひと固まり?

この回答への補足

説明不足で申し訳ありません。
「4つでひと固まりなデータ」と言うのは、

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

補足日時:2011/08/12 20:41
    • good
    • 0

No.1です!


前回書き忘れましたが
No.○の後には必ず半角スペースがあるものとしています。

FIND関数でスペースの文字位置から割り出していますので、スペースがない場合は滅茶苦茶な表示になってしまいます。

何度も失礼しました。m(_ _)m
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!