[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シート並べ替え』(しのみや)
【シート】 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
なんか方向性があさっての方を向いてるようで 前回のスレッドに回答する方が先なのでは? (´・ω・`) 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.