[[20210910102217]] 『行の並び替えをしたい』(ぺるしゃねこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『行の並び替えをしたい』(ぺるしゃねこ)

Excel初心者です。
過去ログとかあさってみたのですがさっぱりで、、、どなたか教えていただけないでしょうか。

100行くらいあって今までコピーして貼り付けて並び替えてたのですがとても時間かかるのと間違えてしまうことがあってどうにかならないものかと思い質問させていただきました。

  A   B     C              D               E

   管理番号 	顧客名   	   端末	         開始日	
    ・ 
    ・
    ・
 設定					
       123	株式会社s	タブレット1	2020/7/	
       456	株式会社w	タブレット2	2020/9/	
       789	株式会社z	タブレット5	2020/7/	
       1012	株式会社k	タブレット0	2021/8/	

       1111	株式会社g	タブレット3	2020/7/	
        22	株式会社p	タブレット4	2020/1/	
	・
    ・
    ・				
  設定					

上記のような表があるのですが
A列の設定と入った行から、設定と入った行までの日付を並び替えたいのですが、
Excelの機能の並び替えとフィルター?を使ってみたのですが変に並び替えてしまわれお手上げ状態です、、、
ご教示よろしくお願いいたします。

< 使用 Excel:unknown、使用 OS:unknown >


あ、Excelはoffice365、Windows10です;;
(ぺるしゃねこ) 2021/09/10(金) 10:45

 まず、どの列を基準に並び替えしたいのかと
 >変に並べ替えてしまわれ
 がどのように意図通りでなかったかを教えていただけると回答つきやすいかと思います。
(*) 2021/09/10(金) 11:22

お返事ありがとうございます。

言葉足らずで申し訳ありません。
何故か日付順にならずに困ってます・・書式設定?が違うのか今調べてみています・・
A列の設定〜設定のあいだを基準とかはできないのでしょうか?

出来ればぼたんを押すと並び変わるっというのが理想なのですが・・・

無知で申し訳ないですがどうかよろしくお願いいたします。
(ぺるしゃねこ) 2021/09/10(金) 11:46


>設定と入った行までの日付を並び替えたいのですが、

日付を並べ替え前

   |[A] |[B]     |[C]       |[D]         |[E]    
 [1] |    |管理番号|顧客名    |端末        |開始日 
 [2] |    |・      |          |            |       
 [3] |    |・      |          |            |       
 [4] |    |・      |          |            |       
 [5] |設定|        |          |            |       
 [6] |    |     123|株式会社s|タブレット1|2020/7/
 [7] |    |     456|株式会社w|タブレット2|2020/9/
 [8] |    |     789|株式会社z|タブレット5|2020/7/
 [9] |    |    1012|株式会社k|タブレット0|2021/8/
 [10]|    |        |          |            |       
 [11]|    |    1111|株式会社g|タブレット3|2020/7/
 [12]|    |      22|株式会社p|タブレット4|2020/1/
 [13]|    |・      |          |            |       
 [14]|    |・      |          |            |       
 [15]|    |・      |          |            |       
 [16]|設定|        |          |            |       

日付を並べ替え後

     |[A] |[B]     |[C]       |[D]         |[E]    
 [1] |    |管理番号|顧客名    |端末        |開始日 
 [2] |    |・      |          |            |       
 [3] |    |・      |          |            |       
 [4] |    |・      |          |            |       
 [5] |設定|        |          |            |       
 [6] |    |      22|株式会社p|タブレット4|2020/1/
 [7] |    |     123|株式会社s|タブレット1|2020/7/
 [8] |    |     789|株式会社z|タブレット5|2020/7/
 [9] |    |    1111|株式会社g|タブレット3|2020/7/
 [10]|    |     456|株式会社w|タブレット2|2020/9/
 [11]|    |    1012|株式会社k|タブレット0|2021/8/
 [12]|    |        |          |            |       
 [13]|    |・      |          |            |       
 [14]|    |・      |          |            |       
 [15]|    |・      |          |            |       
 [16]|設定|        |          |            |       

こんな感じになればいいんですかね。
(はまき) 2021/09/10(金) 11:59


返信ありがとうございます。
はまき様、そうです・・!その通りです・・・!
(ぺるしゃねこ) 2021/09/10(金) 13:12

ちなみに・・・の行はほかの情報は入っていて動かしたくない行です、、、、
(ぺるしゃねこ) 2021/09/10(金) 13:27

 並べ替えしたい箇所のみ選択
 [データ]タブの"並び替え"というアイコンをクリック
 最優先キー:列E 並べ替えのキー:セルの値(デフォルト)順序:昇順(デフォルト)
 これではダメですか?
 自動化したければマクロの記録をとるなどしてください。
(*) 2021/09/10(金) 13:35

Excelの本を見ながら調べながら何回か試して、書式設定を見直しましたが、、、
それをしてダメだったので、、、
周りにわかる人もいないし藁にも縋る思いでこちらに質問させていただきました。
記録もしてみましたが行数が変わってしまうため
条件?とか入れないといけないのが私にはわからなくて、、知識不足ですみません。
(ぺるしゃねこ) 2021/09/10(金) 13:49

 先ほど書き込んだ方法でダメだったのですか?
 こちらではうまくいっているので、ダメなら同じ手順を行った結果どうなるのかをここに貼り付けてください。
(*) 2021/09/10(金) 14:42

	123	株式会社s	タブレット1	2021/10/	
	23	株式会社p	タブレット5	2021/10/	
	789	株式会社z	タブレット5	2021/11/	
	1111	株式会社g	タブレット3	2021/11/	
	24	株式会社p	タブレット6	2021/8/	
	456	株式会社w	タブレット2	2021/8/	
	1012	株式会社k	タブレット0	2021/9/	
	22	株式会社p	タブレット4	2021/9/	
	25	株式会社p	タブレット7	2021/9/	
	28	株式会社p	タブレット10	2021/10/	
	29	株式会社p	タブレット11	2021/11/	
	30	株式会社p	タブレット12	2021/12/	
	31	株式会社p	タブレット13	2021/1/	
	32	株式会社p	タブレット14	2021/2/	
	33	株式会社p	タブレット15	2021/3/	
	34	株式会社p	タブレット16	2021/4/	
	35	株式会社p	タブレット17	2021/5/	

Excelそのまま貼り付けてみました。
並び替えをやると下記のようになってしまいます。

	31	株式会社p	タブレット13	2021/1/		
	123	株式会社s	タブレット1	2021/10/		
	23	株式会社p	タブレット5	2021/10/		
	28	株式会社p	タブレット10	2021/10/		
	789	株式会社z	タブレット5	2021/11/		
	1111	株式会社g	タブレット3	2021/11/		
	29	株式会社p	タブレット11	2021/11/		
	30	株式会社p	タブレット12	2021/12/		
	32	株式会社p	タブレット14	2021/2/		
	33	株式会社p	タブレット15	2021/3/		
	34	株式会社p	タブレット16	2021/4/		
	35	株式会社p	タブレット17	2021/5/		
	24	株式会社p	タブレット6	2021/8/		
	456	株式会社w	タブレット2	2021/8/		
	1012	株式会社k	タブレット0	2021/9/		
	22	株式会社p	タブレット4	2021/9/		
	25	株式会社p	タブレット7	2021/9/		

書式がおかしいのかと思いまして、日付になっていましたが、/が影響するのかな?とか考えて
ユーザー定義で種類をyyyy/m/にしてみたりしましたがかわらずでした。

(ぺるしゃねこ) 2021/09/10(金) 15:04


 2021/10/のセルを選択した時に数式バーには
何と表示されているのかな?
2021/10/だったら文字列なので並び替えの結果は
正しいですよ
(どん) 2021/09/10(金) 15:14

もしかして

 Sub Sample1()
    Dim rng As Range
    For Each rng In Selection
        If rng.Value Like "####/#/" Then
            rng.Value = Left(rng.Value, 5) & "0" & Right(rng.Value, 2)
        End If
    Next
 End Sub

 Sub Sample2()
    Dim rng As Range
    For Each rng In Selection
        If rng.Value Like "####/0#/" Then
            rng.Value = Left(rng.Value, 5) & Right(rng.Value, 2)
        End If
    Next
 End Sub

(めざめるパワー) 2021/09/10(金) 15:26


 Sub OmakeMacro()
    Dim SortRange As Range
    Dim Key As Long
    Set SortRange = Selection
    Key = SortRange.Columns.Count

    Call Sample1(SortRange.Columns(Key).Cells)
    Call SortSample(SortRange, Key)
    Call Sample2(SortRange.Columns(Key).Cells)
 End Sub

 Sub SortSample(SortRange As Range, KeyColumn As Long)
    With SortRange.Parent.Sort
        With .SortFields
            .Clear
            .Add Key:=SortRange.Columns(KeyColumn).Cells, _
                 SortOn:=xlSortOnValues, _
                 Order:=xlAscending
        End With
        .SetRange SortRange
        .Orientation = xlTopToBottom
        .Apply
        .SortFields.Clear
    End With
 End Sub

 Sub Sample1(ReplaceRng As Range)
    Dim rng As Range
    For Each rng In ReplaceRng
        If rng.Value Like "####/#/" Then
            rng.Value = Left(rng.Value, 5) & "0" & Right(rng.Value, 2)
        End If
    Next
 End Sub

 Sub Sample2(ReplaceRng As Range)
    Dim rng As Range
    For Each rng In ReplaceRng
        If rng.Value Like "####/0#/" Then
            rng.Value = Left(rng.Value, 5) & Right(rng.Value, 2)
        End If
    Next
 End Sub

とても雑なマクロですが参考程度に
(めざめるパワー) 2021/09/10(金) 15:38


どん様
2021/10/となっていて文字列となっていました・・書式設定すれば変わるものかと思っていました;

めざめるパワー様
ありがとうございます!
何が行われているかさっぱりですがやりたかったことが一瞬にしてできました・・!
マクロってすごいんですね、、
大変厚かましいお願いなのですが、選択範囲を【A列の設定〜設定】の範囲の行を並び替えるというのは可能なのでしょうか・・・・?

(ぺるしゃねこ) 2021/09/10(金) 15:51


 ああ、すみません二桁の存在を失念していました。
 そしてシリアル値ではないのですね。

 どんさんのおっしゃるように文字列だとそうなってしまうので、
 日付の部分の入力をすべて「2021/9/1」のように日付もつけてください。

 そのうえで、yyyy/m/に書式設定をして
 先ほど私が書き込んだ手順でやってみてください。
 ただし、順序が今度は「古い順」になるはずです。
(*) 2021/09/10(金) 15:53

 Sub SortRangeReseaching()

    Dim UsedRng   As Range
    Dim Settei    As Range
    Dim TopRng    As Range
    Dim BottomRng As Range
    Dim SortRng   As Range
    Dim rng       As Range

    Set UsedRng = ActiveSheet.UsedRange
    Set Settei = Intersect(Range("A:A"), UsedRng)
    Set Settei = Settei.SpecialCells(xlCellTypeConstants)
    Settei.Select
    For Each rng In Settei
        If rng.Value = "設定" Then
            If Not TopRng Is Nothing Then
                Set BottomRng = rng.Offset(-1)
                Set SortRng = Intersect(Range(TopRng, BottomRng).EntireRow, UsedRng)
                Call OmakeMacro(SortRng)
            End If
            Set TopRng = rng.Offset(1)
        End If
    Next
    Set SortRng = Intersect(Range(TopRng, TopRng.End(xlDown)).EntireRow, UsedRng)
    Call OmakeMacro(SortRng)
 End Sub

 Sub OmakeMacro(SortRange As Range)
    Dim Key As Long
    Key = SortRange.Columns.Count

    Call Sample1(SortRange.Columns(Key).Cells)
    Call SortSample(SortRange, Key)
    Call Sample2(SortRange.Columns(Key).Cells)
 End Sub

間違えていても元に戻せないので事前にブックを保存してから試してください。
(めざめるパワー) 2021/09/10(金) 16:04


2021/9/1のように日付の部分を付けたら楽だったのですが
入力方法というか形式が2021/9/となっているので・・;;
難しくなってしまっています;;

めざめるパワー様
厚かましいお願い聞いていただき感謝です・・!

 Key = SortRange.Columns.Count
この部分が黄色くなってしまいます;;

Sub SortRangeReseaching()

    Dim UsedRng   As Range
    Dim Settei    As Range
    Dim TopRng    As Range
    Dim BottomRng As Range
    Dim SortRng   As Range
    Dim rng       As Range

    Set UsedRng = ActiveSheet.UsedRange
    Set Settei = Intersect(Range("A:A"), UsedRng)
    Set Settei = Settei.SpecialCells(xlCellTypeConstants)
    Settei.Select
    For Each rng In Settei
        If rng.Value = "設定" Then
            If Not TopRng Is Nothing Then
                Set BottomRng = rng.Offset(-1)
                Set SortRng = Intersect(Range(TopRng, BottomRng).EntireRow, UsedRng)
                Call OmakeMacro(SortRng)
            End If
            Set TopRng = rng.Offset(1)
        End If
    Next
    Set SortRng = Intersect(Range(TopRng, TopRng.End(xlDown)).EntireRow, UsedRng)
    Call OmakeMacro(SortRng)
 End Sub

 Sub OmakeMacro(SortRange As Range)
    Dim Key As Long
    Key = SortRange.Columns.Count

    Call Sample1(SortRange.Columns(Key).Cells)
    Call SortSample(SortRange, Key)
    Call Sample2(SortRange.Columns(Key).Cells)
 End Sub

Sub SortSample(SortRange As Range, KeyColumn As Long)

    With SortRange.Parent.Sort
        With .SortFields
            .Clear
            .Add Key:=SortRange.Columns(KeyColumn).Cells, _
                 SortOn:=xlSortOnValues, _
                 Order:=xlAscending
        End With
        .SetRange SortRange
        .Orientation = xlTopToBottom
        .Apply
        .SortFields.Clear
    End With
 End Sub

 Sub Sample1(ReplaceRng As Range)
    Dim rng As Range
    For Each rng In ReplaceRng
        If rng.Value Like "####/#/" Then
            rng.Value = Left(rng.Value, 5) & "0" & Right(rng.Value, 2)
        End If
    Next
 End Sub

 Sub Sample2(ReplaceRng As Range)
    Dim rng As Range
    For Each rng In ReplaceRng
        If rng.Value Like "####/0#/" Then
            rng.Value = Left(rng.Value, 5) & Right(rng.Value, 2)
        End If
    Next
 End Sub

上記を貼り付けたこーどなのですが、貼り間違えてますでしょか・・?;
よろしくお願いいたします。

(ぺるしゃねこ) 2021/09/10(金) 16:17


いいえ、最終列に「設定」と書いてあると起きるエラーだろうと思います。
(めざめるパワー) 2021/09/10(金) 16:29

 マクロはある程度コードの内容を理解していないと
思わぬ結果になりますよ
 >2021/9/1のように日付の部分を付けたら楽だったのですが
2021/9/→2021/9/1にするのは
F7セルに
=(E6&1)*1
↓コピペしてF列基準で並び替えすれぱよいのでは
(どん) 2021/09/10(金) 16:49

めざめるパワー様

いじくっていたら理解しました!ありがとうございます・・!
こうもばちっと並びかわるととても気持ちがよいです。。
素晴らしい効率化になります・・!

度々すみません。
日付が入っている隣の列(F列)も日付と一緒に並び替えたい場合、どこを変更したらよいでしょうか・・
今上からのどんなことをしているか調べながらやっているのですが・・理解するのに時間がかかりそうなので(;_;)

よろしくお願いいたします。

(ぺるしゃねこ) 2021/09/10(金) 17:03


どん様
思わぬ結果とはどのようなものなんでしょうか・・?
マクロってそんなに恐ろしいものなんですか・・・
変な質問でしたらすみません;;;;
(ぺるしゃねこ) 2021/09/10(金) 17:08

数式を試されていないようなので結果を載せておきます。

(*)さん 2021/09/10(金) 15:53 の場合
>「2021/9/1」のように日付もつけてください。
>そのうえで、yyyy/m/に書式設定をして
>順序が今度は「古い順」になるはずです。

ソート前

    |[A] |[B]       |[C]           |[D]     
 [1] | 123|株式会社s|タブレット1  |2021/10/
 [2] |  23|株式会社p|タブレット5  |2021/10/
 [3] | 789|株式会社z|タブレット5  |2021/11/
 [4] |1111|株式会社g|タブレット3  |2021/11/
 [5] |  24|株式会社p|タブレット6  |2021/8/ 
 [6] | 456|株式会社w|タブレット2  |2021/8/ 
 [7] |1012|株式会社k|タブレット0  |2021/9/ 
 [8] |  22|株式会社p|タブレット4  |2021/9/ 
 [9] |  25|株式会社p|タブレット7  |2021/9/ 
 [10]|  28|株式会社p|タブレット10|2021/10/
 [11]|  29|株式会社p|タブレット11|2021/11/
 [12]|  30|株式会社p|タブレット12|2021/12/
 [13]|  31|株式会社p|タブレット13|2021/1/ 
 [14]|  32|株式会社p|タブレット14|2021/2/ 
 [15]|  33|株式会社p|タブレット15|2021/3/ 
 [16]|  34|株式会社p|タブレット16|2021/4/ 
 [17]|  35|株式会社p|タブレット17|2021/5/ 

ソート後

     |[A] |[B]       |[C]           |[D]     
 [1] |  31|株式会社p|タブレット13|2021/1/ 
 [2] |  32|株式会社p|タブレット14|2021/2/ 
 [3] |  33|株式会社p|タブレット15|2021/3/ 
 [4] |  34|株式会社p|タブレット16|2021/4/ 
 [5] |  35|株式会社p|タブレット17|2021/5/ 
 [6] |  24|株式会社p|タブレット6  |2021/8/ 
 [7] | 456|株式会社w|タブレット2  |2021/8/ 
 [8] |1012|株式会社k|タブレット0  |2021/9/ 
 [9] |  22|株式会社p|タブレット4  |2021/9/ 
 [10]|  25|株式会社p|タブレット7  |2021/9/ 
 [11]| 123|株式会社s|タブレット1  |2021/10/
 [12]|  23|株式会社p|タブレット5  |2021/10/
 [13]|  28|株式会社p|タブレット10|2021/10/
 [14]| 789|株式会社z|タブレット5  |2021/11/
 [15]|1111|株式会社g|タブレット3  |2021/11/
 [16]|  29|株式会社p|タブレット11|2021/11/
 [17]|  30|株式会社p|タブレット12|2021/12/

(どん)さん 2021/09/10(金) の場合
> 2021/9/→2021/9/1にするのは
> F7セルに
> =(E6&1)*1
セル一部変更

     |[A] |[B]       |[C]           |[D]     |[E]      
 [1] |  31|株式会社p|タブレット13|2021/1/ |2021/1/1 
 [2] |  32|株式会社p|タブレット14|2021/2/ |2021/2/1 
 [3] |  33|株式会社p|タブレット15|2021/3/ |2021/3/1 
 [4] |  34|株式会社p|タブレット16|2021/4/ |2021/4/1 
 [5] |  35|株式会社p|タブレット17|2021/5/ |2021/5/1 
 [6] |  24|株式会社p|タブレット6  |2021/8/ |2021/8/1 
 [7] | 456|株式会社w|タブレット2  |2021/8/ |2021/8/1 
 [8] |1012|株式会社k|タブレット0  |2021/9/ |2021/9/1 
 [9] |  22|株式会社p|タブレット4  |2021/9/ |2021/9/1 
 [10]|  25|株式会社p|タブレット7  |2021/9/ |2021/9/1 
 [11]| 123|株式会社s|タブレット1  |2021/10/|2021/10/1
 [12]|  23|株式会社p|タブレット5  |2021/10/|2021/10/1
 [13]|  28|株式会社p|タブレット10|2021/10/|2021/10/1
 [14]| 789|株式会社z|タブレット5  |2021/11/|2021/11/1
 [15]|1111|株式会社g|タブレット3  |2021/11/|2021/11/1
 [16]|  29|株式会社p|タブレット11|2021/11/|2021/11/1
 [17]|  30|株式会社p|タブレット12|2021/12/|2021/12/1

(はまき) 2021/09/10(金) 18:03


おはようございます!
はまき様ありがとうございました!
書式設定も詳しく調べようと思います。他で使用すると思いますので・・
今回はめざめるパワー様の案を採用したいと思います・・!

並び替え方法一つでもいろいろなやり方がある事が知れてとても勉強になりました!
ありがとうございます。

(ぺるしゃねこ) 2021/09/13(月) 09:08


>日付が入っている隣の列(F列)も日付と一緒に並び替えたい場合、どこを変更したらよい

そのままですべての列の並び替えをしますが、並び替えのキー列を

 Key = SortRange.Columns.Count

と、一番右の列にしています。並び替え基準列は変数Keyの値変更で対応可能です。
(めざめるパワー) 2021/09/13(月) 10:10


めざめるパワー様
お早い返信ありがとうございます。とても助かります・・!
完璧に動作しました!
この度は本当に本当にありがとうございました。
Excelについてもっと深く勉強しようと思います!
(ぺるしゃねこ) 2021/09/13(月) 10:53

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.