[[20201002144254]] 『シート並べ替え』(しのみや) ページの最後に飛ぶ

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

 

『シート並べ替え』(しのみや)

 【シート】
 Data
 Main
 1-A 田中 
 2-A 伊藤
 2-A 服部
 3-A 上田
 bbb
 aaa
 1-B 中村 
 1-B 西田 
 2-B 上野
 2-B 原田
 3-B 鈴木 
 3-B 渡辺

 上記のシートがランダムで並んでいます

 【並べ替えたい基準】
 Data
 Main
 1-A
 2-A
 3-A
 bbb
 aaa
 1-B
 2-B
 3-B

 名前の順番は、昇順

 https://vbabeginner.net/vba/vbaでシートを任意の順番で並べ替える/
 こちらのページを確認させてもらっています

 実際のシートの並べ替えを行うコードの中で

   Sheets(ar(i)).Move before:=Sheets(i + 1)

 この部分で、ワイルドカードが使えないようです

   Sheets(ar(i) & "*").Move before:=Sheets(i + 1) ←エラー

 どのようにしたらよいでしょうか

< 使用 Excel:Excel2010、使用 OS:Windows10 >


 >名前の順番は、昇順

 振り仮名情報はありますか?
(通りすがり) 2020/10/02(金) 14:46

[[20200924110137]] 
 なんか方向性があさっての方を向いてるようで
 前回のスレッドに回答する方が先なのでは?
(´・ω・`) 2020/10/02(金) 14:55

難しく考えずに
 (1)シートの一覧を作成する
 (2)作成した一覧を並べ変えする
 (3)並べ変えした一覧に基づいてシートを移動させる

とすればよいでしょう。
シートを並べ変える方法は、↓でわかってますよね?
[[20200924110137]] 『シート名をテーブルで指定した順番に並べ替えたい』(しのみや) 

(もこな2) 2020/10/02(金) 15:01


 通りすがりさん
 振り仮名情報はないと思います

(´・ω・`)さん

 あれれ…回答したと思っていたのですが…
 失礼しました

 条件がちょっと変わりましたので、
 再度質問させて頂いております。

 もこな2さん
 はい、おかげさまで、少しづつ進んでおります
 (2)は手作業になるのでしょうか?

(しのみや) 2020/10/02(金) 15:05


 質問への直接の回答ではないですが。

 田中	
 伊藤	
 服部	
 上田	
 中村	
 西田	
 上野	
 原田	
 鈴木	
 渡辺	
 ↑をエクセルでソートした結果が↓
 右側の音読みでソートされたものと思われます。

 伊藤	いとう
 原田	げんでん
 上田	じょうでん
 上野	じょうや
 西田	せいでん
 中村	ちゅうそん
 田中	でんちゅう
 渡辺	とへん
 服部	ふくぶ
 鈴木	れいぼく
(通りすがり) 2020/10/02(金) 15:22

たぶん被りましたが、そのまま。

>(2)は手作業になるのでしょうか?
マクロでも手作業でもどちらでもいいんじゃないですか?
そんなことよりフリガナ情報が無いなら、"何を基準"に昇順とするのかのほうが重要では?

ちなみに何も考えずに"昇順"ソートすると↓になりますね。

 1-A 田中
 1-B 西田
 1-B 中村
 2-A 伊藤
 2-A 服部
 2-B 原田
 2-B 上野
 3-A 上田
 3-B 渡辺
 3-B 鈴木 
 aaa
 bbb
 Data
 Main

(もこな2) 2020/10/02(金) 15:27


 通りすがりさん
 名前については、音読みでソートされている順番で
 問題ないです
 ご丁寧にすみません

 もこな2さん
 >>(2)は手作業になるのでしょうか?
 この書き方が良くなかったです

 言い換えますと、マクロでできるのでしょうか?

 ホームページでは、手作業で順番を変えるように書かれてあるものでしたので
 その方法でしかないのかと…

 必要な回答ができてますでしょうか…
(しのみや) 2020/10/02(金) 15:42

どれかのトピックで同種のコメントを受けられていたような気もしますがマクロは魔法ではありません。
ただの作業の自動化です。従って、(人間の)思考が関係しない(前もって並べ替えのルールが決めてある)なら可能でしょう。

また、セル範囲の並び替えであれば、他のトピックのコメントともかぶりますが、まずは【マクロの記録】をとってみてはいかがでしょうか?
必要な命令のアタリをつけることができるようにおもいます。

(もこな2) 2020/10/02(金) 17:43


 通りすがりさん
 (´・ω・`)さん
 もこな2さん

 お時間頂きありがとうございました

 上手く説明できずにすみませんでした
 対応できました

 あまり参考にならないと思いますが…流れだけを書き出します

 並べ替えたい基準をテーブルにする
 B列に順番を振り、順番テーブルを作成

 【順番テーブルシート】
   A   B
  1 Data 1
  2 Main 2
  3 1-A  3
  ↓

 シート名を担当者シートのセルA1〜に書き出す
 【担当者シート】
   A     B
  1 Data
  2 Main
  3 1-A 田中 
  ↓

 担当者シートのB列に順番をVLOOKUPする

 B列を並べ替える

 担当者シートの順番でシートを並べ替える

 このようにしました
(しのみや) 2020/10/06(火) 16:11

 >どのようにしたらよいでしょうか

1)欲しい結果が得られる作業手順を考える

一度にいろいろ考えるとわけわかんなくなるんで、
ルールを単純にします

  Data → 1番目
  Main → 2番目
  *A  → bbbの前
  bbb → aaaの前
  *B → bbbの後

一旦これで入れ替えて、
そのあと、前後のシートのシート名の頭の数字で比較して前<後
になるよう、何回も入れ替えをトライしたら、
そのうち期待する並びになると思われます。

自動でやるんだから何回ループしてもいいと思いますよ。

2)コードの文法を覚える

 >Sheets(ar(i)).Move before:=Sheets(i + 1)

↑こう書けばできるではなく、どこにどんな値を入れているかとか、
Moveの命令を何に対して行って、細かい指定はどんな風にしているかを
理解してますか?

3)意図した動作になるか実験してみる

 sub test()
     Sheets("Data").Move before:=Sheets(1)
 end sub

↑まずはこの1行だけを、いろんな状況で試してみて
(例えば一番左にDataシートを持って行ってから試したり)
上手くいくなら、ブック内のシートを巡回するコードをためす。
で、次々変わって欲しいところに変数を使ってみる。
で、
Dataならどうする、
Mainならどうする、
という書き方を覚えて試す。
というように、自分が出来ることを少しづつ増やしていくしかないと思います。

上記を参考にコード化してみてはいかがでしょうか?
(まっつわん) 2020/10/06(火) 18:58


 まっつわんさん ありがとうございます

 過去にここの質問箱で
 右端のシートに追加していくと並べたい順番になることをお聞きして
 そのようにさせてもらっております

 理解はまだまだですが、勉強中です

 実験していると別のところでつまづいたりして…
 何が何だかわからなくなったりもしていますが、一つずつ頑張ります
(しのみや) 2020/10/07(水) 12:08

一つの例として。

    Sub 実験用ブック生成()
        Dim tmp As Variant, 配列 As Variant
        配列 = Split("Data,Main,1-A 田中,2-A 伊藤,2-A 服部,3-A 上田,bbb,aaa,1-B 中村,1-B 西田,2-B 上野,2-B 原田,3-B 鈴木,3-B 渡辺", ",")

        With Workbooks.Add(xlWBATWorksheet)
            For Each tmp In 配列
                With .Worksheets.Add
                    .Name = tmp
                End With
            Next tmp

            Application.DisplayAlerts = False
            .Worksheets(.Worksheets.Count).Delete
            Application.DisplayAlerts = True
        End With
    End Sub
    '---------------------------------------------------------------
    Sub さんぷる()
        Dim SH As Worksheet
        Dim i As Long

        Stop

        With Workbooks(Workbooks.Count)
            Worksheets.Add(before:=.Worksheets(1)).Name = "作業用"

            '▼(1)シート名をリストアップ
            For Each SH In .Worksheets
                If SH.Name <> "作業用" Then
                    Worksheets("作業用").Cells(i + 1, "A").Value = SH.Name
                    Worksheets("作業用").Cells(i + 1, "B").Resize(1, UBound(Split(SH.Name, " ")) + 1).Value = Split(SH.Name, " ")
                    i = i + 1
                End If
            Next SH

            '▼(2)セル(範囲)を並び替え
            With .Worksheets("作業用").Sort
                With .SortFields
                    .Clear

                    .Add2 _
                        Key:=Range("B1"), _
                        SortOn:=xlSortOnValues, _
                        Order:=xlAscending, _
                        CustomOrder:="Data,Main,1-A,2-A,3-A,bbb,aaa,1-B,2-B,3-B", _
                        DataOption:=xlSortNormal

                    .Add2 _
                        Key:=Range("C1"), _
                        SortOn:=xlSortOnValues, _
                        Order:=xlAscending, _
                        DataOption:=xlSortNormal
                End With

                .SetRange Range("A:C")
                .Header = xlGuess
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With

            '▼(3)シートを並び替える
            For i = 1 To .Worksheets("作業用").Cells(.Worksheets("作業用").Rows.Count, "A").End(xlUp).Row
                .Worksheets(.Worksheets("作業用").Cells(i, "A").Value).Move after:=.Worksheets(.Worksheets.Count)
            Next

            '▼(4)作業シートを削除する
            Application.DisplayAlerts = False
            .Worksheets("作業用").Delete
            Application.DisplayAlerts = True

        End With               
    End Sub

(もこな2) 2020/10/08(木) 17:45


 もこな2さん ありがとうございます 

 前にご回答いただいているものが今頃になってやっと使いこなせているものもあります…
 また時間を見つけて理解していきたいと思います

 私の説明が不十分の中、ご回答いただきありがとうございます
(しのみや) 2020/10/09(金) 10:28

コメント返信:

[ 一覧(最新更新順) ]


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