
次のようなデータの例で一まとまりのグループごとに昇順したいのですが、
どのようにしたらいいでしょうか?
======================
名前A
======================
11111 <=ここから
22222
33333
55555 <=ここまでを昇順にしたい
======================
名前B
======================
11111
22222
33333
55555
======================
などとずーと続く・・・
つまり
======================
名前A
======================
のあとのデータ(次の名前まで)を並び替えて
表示したい。
======================<=ここから
名前B
======================<=ここまではそのまま表示
11111 <=ここから並び替える
22222
33333
55555
No.6ベストアンサー
- 回答日時:
了解しました。
Sub Sample()
Dim SRow As Long
SRow = 0
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If InStr(Cells(i, 1), "===") = False Then
If SRow = 0 Then SRow = i
Else
Rows(SRow & ":" & i + 1).Sort Key1:=Range("A1"), _
Order1:=xlAscending, Header:=xlNo
SRow = 0
End If
Next
End Sub
積極的な手段とは言いづらいですが、どうぞ。
こんな感じでお望みの結果を得られたら良いですが。
あ、
> パターンのキーワードは
> =====
> ランダム
> =====
> データ・・・
> データ・・・
> です。
ということだったので、条件は勝手に
「===(イコールが3つ以上並んでいたら)」
にしてます。
あとは・・単純に「===」に挟まれた範囲をソートしていってますので、
「名前(ランダム)」が一箇所につき2行あったりするここもソートされます。
とりあえず、走らせて見てくださいませ。
No.7
- 回答日時:
ふつーにエクセルを使っていると「===」とか入力できませんが、まぁそこいらはてきとーに応用してください。
sub macro1()
dim c as range
dim e as range
dim c0 as string
dim flg as boolean
on error resume next
’ if application.countif(range("A:A"), "===*") mod 2 <> 0 then
’ msgbox "INVALID PATTERN"
’ exit sub
’ end if
if left(cells(rows.count, "A").end(xlup), 3) <> "===" then
cells(rows.count, "A").end(xlup).offset(1) = "'==="
flg = true
end if
with range("A:A")
set c = .find(what:="===",lookin:=xlvalues, lookat:=xlpart, searchdirection:=xlprevious, matchbyte:=false)
if c is nothing then exit sub
c0 = application.match("===*",range("A:A"),0)
do
set e = .findprevious(c)
if range(e, c.offset(-1)).count > 2 then
range(e, c).sort key1:=e, order1:=xlascending, header:=xlyes
set c = .findprevious(c)
end if
set c = .findprevious(c)
loop until c.row = c0
end with
if flg then cells(rows.count, "A").end(xlup).clearcontents
end sub
#データの無いブロックとか手当てしたら余計な命令が増えちゃいました
No.5
- 回答日時:
こんにちは。
お邪魔します。名前A、名前B、、、等がすべて文字列値で、
並び替えキーとなる値が(文字列でなく)数値で
並び替えキーとなるセルが(数式でなく)定数
であれば、難しいことなどせずに、以下のようにこなすのが
合理的かと思います。
特殊な事情の説明が漏れてなければ大丈夫でしょうけれど、
一発で思い通りの結果になるかどうかは条件次第です。
例えば、並び替えキーがA列にある、という前提で書いていますが、
違っていれば補足してください。
Sub Re8142252()
Dim rA As Range
Dim tnCol As Long
' ' 列数↓を適宜指定
tnCol = ActiveSheet.UsedRange.Columns.Count
On Error GoTo ErrOut_
' ' 運用に合わせてキー列指定↓
For Each rA In Range("A:A").SpecialCells(xlCellTypeConstants, xlNumbers).Areas
If rA.Count > 1 Then rA.Resize(, tnCol).Sort Key1:=rA(1), Order1:=xlAscending, Header:=False
Next
Exit Sub
ErrOut_:
MsgBox "指定列に数値セルが見つかりません"
End Sub
この回答への補足
すみません、名前とデータには文字数値混在です。
上記実行すると、短いのにすばらしいです。数値のときは・・・。
データに文字が入ってるときもこうならばOKなんですが。。
No.4
- 回答日時:
No.2です。
前回のコードはA列に「名前」という文字が含まれている行を検索し、
その次の行から空白、もしくは「名前」という文字が含まれている行の1行前を一塊にして
昇順に並び替える方法にしていました。
>氏名は氏名となっているわけではなく、ランダムな値がきます。。
というコトは固有名がランダムにある訳ですかね?
もしそうであれば↓のコードに変更してみてください。
(A列の氏名以外は「数値」が入っているとします)
Sub 並び替え2()
Dim i As Long, j As Long, k As Long
j = ActiveSheet.UsedRange.Columns.Count
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Not IsNumeric(Cells(i, 1)) Then
For k = i + 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Not IsNumeric(Cells(k, 1)) Or Cells(k, 1) = "" Then
Exit For
End If
Next k
End If
Range(Cells(i, 1), Cells(k - 1, j)).Sort key1:=Cells(i, 1), order1:=xlAscending, Header:=xlYes
i = k
Next i
End Sub
今度はどうでしょうか?m(_ _)m
この回答への補足
有難うございます。データはA列のみでOKです。
でも、上記を実行すると下記のようになり意図したものと
異なります。。
======
ソートされたデータ
======
======
======
名前
名前
・・
No.3
- 回答日時:
ちょっと確認させてくださいね。
> 氏名は氏名となっているわけではなく、ランダムな値がきます。。
「名前A・名前B」などが個人名「名無権兵衛・何野誰造」などの値ってことですね?
コレを「ディスプレイ上で“人の目”で確認」するとき、
名前なのか、データなのか、というのをどのように区別してますか?
(どの行までがAさん、この行からBさん、という区別の方法という意味で。)
例えば「“名前”が入っている行はA列にしか入力されていない」とか、
「名前(人)が変わる前には必ず空白行がある」とか、
「並べ替えたいデータ部分は全て数字で構成されている」とか。
そんな「必ず当てはまる条件」が無いと、マクロを使っても難しいですよ。
この回答への補足
パターンのキーワードは
=====
ランダム
=====
データ・・・
データ・・・
です。
=が2回目で次の=までがデータとしてもいいです。
No.2
- 回答日時:
こんばんは!
一例です。
「名前○」の次の行は空白ではない!という前提で・・・
シートモジュールです。
Sub 並び替え()
Dim i As Long, j As Long, k As Long
j = ActiveSheet.UsedRange.Columns.Count
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If InStr(Cells(i, 1), "名前") > 0 Then
For k = i + 1 To Cells(Rows.Count, 1).End(xlUp).Row
If InStr(Cells(k, 1), "名前") > 0 Or Cells(k, 1) = "" Then
Exit For
End If
Next k
End If
Range(Cells(i, 1), Cells(k - 1, j)).Sort key1:=Cells(i, 1), order1:=xlAscending, Header:=xlYes
i = k
Next i
End Sub
こんな感じではどうでしょうか?m(_ _)m
この回答への補足
なぜかRange(Cells(i, 1), Cells(k - 1, j)).Sort keyのところで止まります。
氏名は氏名となっているわけではなく、ランダムな値がきます。。
No.1
- 回答日時:
少量データならソート用の番号を追加するのが簡単かと思います。
空いてる列に連番を振ってソートするデータ部分には同じ番号を設定します。
ソートは、第一キーをソート用の番号列を、第二キーはデータ列を指定。
1 ======================
2 名前A
3 ======================
4 11111
4 22222
4 33333
4 55555
5
6 ======================
7 名前B
8 ======================
9 11111
9 22222
9 33333
9 55555
この回答への補足
データ量は多いです。
パターンのキーワードは
===が2回のあとデータ次の===が来るまで
で定義したいのですがどのようにすればいいでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ソフトウェア) Googleスプレッドシートについて 5 2022/05/07 11:46
- Excel(エクセル) Excelで漢字人名が勝手に並び変わる 2 2023/01/14 22:14
- Excel(エクセル) 【エクセル】並び替えからの並び替え方法 7 2022/07/22 09:46
- その他(Microsoft Office) 逆順 3 2023/08/24 09:30
- Excel(エクセル) Excelの並び替え(先頭の文字以外を基準に並び替えたい) 3 2023/07/07 22:21
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Excel(エクセル) オフィスをLibreOfficeからmicrosoft 2013に変えました。 1 2022/05/09 00:28
- その他(開発・運用・管理) 複数ファイル名の一括変更について 3 2023/04/27 13:08
- Excel(エクセル) エクセルVBA オートフィルタでの絞り込みと並び替えについて 1 2023/07/08 13:08
- Excel(エクセル) マクロ 2行ごとの並び替えについて 4 2022/12/14 12:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで階層図を作る方法
-
マクロで最終行を取得してコピ...
-
Excel マクロ 検索結果を別シ...
-
エクセルのデータがない行には...
-
VB.net
-
数値に見えるものはすべて数値...
-
Excel VBAでオートフィルタで抽...
-
【マクロ】元データと同じお客...
-
VBAで保存しないで閉じると空の...
-
WPSOffice_マクロの有効化について
-
複数のマクロボタンをまとめて...
-
Excel マクロの編集がグレーに...
-
【Excel VBA】マクロでExcel自...
-
マクロの保存先、開いてるすべ...
-
エクセル マクロ名にブック名...
-
エクセルのvbaにて thisworkboo...
-
エクセル関数>参照ファイル名...
-
エクセル;相対パスを絶対パスへ...
-
エクセルのマクロの質問です。
-
エクセルでマクロ(Excel 4.0)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロで最終行を取得してコピ...
-
【VBA】条件に一致しない行を削...
-
Excel VBAでオートフィルタで抽...
-
数値に見えるものはすべて数値...
-
VB.net
-
列から特定の文字列検索→該当以...
-
エクセルで空白行を削除する ...
-
Excel マクロ 検索結果を別シ...
-
エクセルのデータがない行には...
-
【マクロ】A列最終行までを、カ...
-
【VBA】条件に一致しない行を削...
-
各個体に対する平均値の自動計...
-
エクセルのVBAで指定した行数の...
-
EXCEL VBAでA列にある空白行よ...
-
VBAでの重複データに色付け
-
空白を複数行一気に挿入するには?
-
エクセルで階層図を作る方法
-
vbaエクセルマクロについて she...
-
【至急】Excel 同一人物の情報...
-
Excel97 指定した行だけマク...
おすすめ情報