どなたかご存じでしたら回答をお願いします。
エクセルで下記のような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ならソースの記述をお願いします。
以上
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
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セル0370188625863270
になる。これをその後、左から順に、1列データに直すこともたやすい(関数やVBA)。
ーー
それに1セルに入っている数字(単位の3270のようなもの)のは1定数4個に決っているのか?
関数などでやる場合、複雑化する決定的要因だ。
>での操作方法及びVBAならソースの記述をお願いします
回答者は家庭教師的立場ではないよ。回答をヒントにして質問者が勉強するものだ。丸写しのコピーできる回答が当然と思わないこと。回答で判らなければ、お礼欄で聞いている質問者もある。
ご回答ありがとうござます。
また質問の仕方が悪く申し訳ありません。
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つに分けた方が「左から小さい順に並び替えやすい?」と思ったからです。
長くなりましたが、
いろいろヒントを頂きありがとうございました。
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")
◆下にコピー
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
No.7
- 回答日時:
◆こんな方法はいかがでしょう
◆ただし、元の数字も、並び替え後の数字も「文字列」とします
B1=TEXT(SUM(LARGE(MID(A1,{1,2,3,4},1)*1,{1,2,3,4})*10^{0,1,2,3}),"0000")
★下にコピー
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行目以下に貼り付けて下さい。
以上です。
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行目以下に貼り付けて下さい。
以上です。
No.3
- 回答日時:
補足願います
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迄しか書かなかったのも判りにくくしたかも知れません。
No.2
- 回答日時:
No.1です!
前回書き忘れましたが
No.○の後には必ず半角スペースがあるものとしています。
FIND関数でスペースの文字位置から割り出していますので、スペースがない場合は滅茶苦茶な表示になってしまいます。
何度も失礼しました。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Visual Basic(VBA) Excel VBA でデータ転記について 1 2023/03/07 19:11
- Excel(エクセル) 単価シートから単価をエクセル関数で自動取得する方法 1 2023/07/02 22:00
- Excel(エクセル) Excelの操作方法を教えてください!頭文字2~8文字で特定の値に返す方法 8 2022/07/14 11:26
- Excel(エクセル) Excelのマクロについてご教授ください 2 2023/02/25 09:43
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
- Visual Basic(VBA) VBAで大量データの処理 3 2022/11/15 21:53
- Excel(エクセル) VBAで、シート間の転記するコードを教えてください。 4 2023/03/26 10:43
- Google Maps エクセルについて 2 2022/11/27 11:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SUMIF関数で、「ブランク以外を...
-
エクセル1行おきのセルを隣の...
-
エクセルで、指定の値よりも大...
-
文字列から英数字のみを抽出す...
-
EXCEL-同じ組み合わせになった回数
-
エクセルに入力後、別シートの...
-
自分の左隣のセル
-
エクセルで、A2のセルにA3...
-
セルを結合した時のエクセル集...
-
【Excel】4つとばしで合計する方法
-
excelで、空白を除いてデータを...
-
EXCELでマイナス値の入ったセル...
-
Excelで大量のセルに一気に関数...
-
エクセルで年月日から月日のみへ
-
検索関数を使って検索窓を作成...
-
エクセル、○が連続する回数を数...
-
条件付き書式の色付きセルのカ...
-
エラー「#REF」の箇所を置き換...
-
Excelで離れた位置のAVERAGEを...
-
週の労働時間を計算するエクセル
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUMIF関数で、「ブランク以外を...
-
文字列から英数字のみを抽出す...
-
エクセル1行おきのセルを隣の...
-
エクセルで、指定の値よりも大...
-
自分の左隣のセル
-
セルを結合した時のエクセル集...
-
Excelで大量のセルに一気に関数...
-
エクセルで、A2のセルにA3...
-
excelで、空白を除いてデータを...
-
エクセルで特定のセル内にだけ...
-
週の労働時間を計算するエクセル
-
エクセルで年月日から月日のみへ
-
条件付き書式の色付きセルのカ...
-
EXCELのcountif関数での大文字...
-
EXCELでマイナス値の入ったセル...
-
エクセルに入力後、別シートの...
-
【Excel】4つとばしで合計する方法
-
同一セル内の重複文字を削除し...
-
エクセルでエンターを押すと任...
-
エラー「#REF」の箇所を置き換...
おすすめ情報