advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 2687 for 並べ替え (0.002 sec.)
[[20210625225354]]
#score: 4562
@digest: e97fabd25da20402df9fb60f9faaa651
@id: 88177
@mdate: 2021-07-15T13:45:13Z
@size: 27761
@type: text/plain
#keywords: sortedlst (239848), wscount (145598), putsheetsinorder (46493), getbyindex (29107), move (19390), 重ル (17709), ーー (16902), before (13062), worksheets (12398), ろく (10646), vbwide (9332), strconv (8289), 二重 (7536), 2021 (6937), 合体 (6869), ァベ (5729), ベッ (5105), ィエ (4551), ミデ (4538), ひろ (4128), エイ (4052), activeworkbook (3927), temp (3859), ト名 (3764), after (3451), ルフ (3169), シー (2945), (ひ (2908), アル (2879), 火) (2740), くん (2732), イミ (2554)
『シートの並べ替えで』(ひろくん)
いつもお世話になります A1〜A12までのシート名をならべかえたら A10 A11 A12 A1 A2 . . . みたいになるので 一桁の数字のシートに0をくわえて A01 A02 みたいにしたいのですが どういうマクロを書けばいいでしょうか よろしくお願いします < 使用 Excel:Excel2019、使用 OS:Windows10 > ---- シート名の文字列の長さを見て(Len関数)、 2桁なら、 1桁目 & "0" & 2桁目 とする、というようなことではないですか? Left関数、Right関数などを使うんでしょうか。 シート名による並べ替えって、そもそもどうやっているんですか? (γ) 2021/06/25(金) 23:13 ---- 適当に手を加えてください。 並べ替えの方は考えてません。 Dim Sh As Worksheet For Each Sh In Worksheets aa = Format(Val(Replace(Sh.Name, "A", "")), "A00") MsgBox aa Next (コロナで死ぬかワクチンで死ぬか・・・) 2021/06/26(土) 01:53 ---- 彼は、毎回説明不足! 過去の反省も出来ていない。 (!) 2021/06/26(土) 02:03 ---- 別に名前を変えなくても、順番に並び替えられますよ。 (むしろ名前で並び替えようとするから失敗するんでしょう。) Sub テキトー() Dim i As Long For i = 12 To 1 Step -1 Worksheets("A" & i).Move before:=Worksheets(1) Next i End Sub (もこな2) 2021/06/26(土) 02:30 ---- ときに、新しい質問をするのも結構ですが↓はどうするんですか? [[20210524221724]] 『月初めに起動するマクロを作るには』(ひろくん) (もこな2) 2021/06/26(土) 02:43 ---- https://plaza.rakuten.co.jp/carrascombu/diary/201504220000/ (beb) 2021/06/26(土) 02:49 ---- コメントありがとうございます 書き忘れましたがAからDまであり それぞれA1〜12 B1〜12 C1〜12 D1〜12まであります 書き忘れました すいません (ひろくん) 2021/06/28(月) 19:35 ---- >書き忘れました すいません 追加提示のあったものでも、既出の方法で解決しそうですが、何に困ってるのですか? (もこな2) 2021/06/28(月) 20:05 ---- Worksheets("A" & i).Move before:=Worksheets(1) をどう変えればB C D にも適用できるかわからないのです (ひろくん) 2021/06/28(月) 20:27 ---- ■1 >どう変えればB C D にも適用できるかわからないのです うーん ステップ実行したりして、どれが固定で、どれが変わっていく(変数になっている)のか、また、どの命令が何をしているのか等々研究してみましたか? 【ステップ実行】 https://www.239-programing.com/excel-vba/basic/basic023.html http://plus1excel.web.fc2.com/learning/l301/t405.html また、以下も知っておいて損は無いと思います。 【イミディエイトウィンドウ】 https://www.239-programing.com/excel-vba/basic/basic024.html https://excel-ubara.com/excelvba1/EXCELVBA486.html 【ローカルウィンドウ】 https://excel-ubara.com/excelvba4/EXCEL266.html http://excelvba.pc-users.net/fol8/8_2.html 【ブレークポイント】 https://www.239-programing.com/excel-vba/basic/basic022.html https://www.tipsfound.com/vba/01010 たとえば、 「A12」というシートなら↓ですし Worksheets("A" & 12).Move before:=Worksheets(1) 「A3」というシートなら↓ですよね Worksheets("A" & 3).Move before:=Worksheets(1) 本当にわかりませんか? ■2 ちょっと私が勘違いしていたかもです。 シートを並び替えるんじゃなくて(書き出した?)シート名を並び替えたいといった話なら関係なかったので忘れてください。 そのうえで、A1セルから順番に書き出してあるならB列に↓のような数式を書いてみてはどうでしょうか? =LEFT(A1,1)&REPT("0",3-LEN(A1))&MID(A1,2,LEN(A1)) (もこな2) 2021/06/29(火) 07:40 ---- >『シートの並べ替えで』 >シート名をならべかえたら 目的は、シートそのものの並べ替えなの? それともシート名の一覧(シート上にある)を並べ替えるの? >みたいになるので どうやったらそうなった? >みたいにしたい ならば、その方法または作業手順を考えましょう。 >どういうマクロを書けばいいでしょうか 作業手順を考えるところから、プログラミングは始まってます。 サンプルを書いてもらって、 傾向と対策で一部を変更すればよいとお考えのようですが、 作業手順を日本語で説明できるようにならなければ、 マクロを書けるようにはならないですよ。 (書けるようになりたいと思ってないかもですが。。。) (まっつわん) 2021/06/29(火) 15:25 ---- 色々ありがとうございます 少し考えてみます 勉強してみます (ひろくん) 2021/06/29(火) 21:14 ---- コメント遅くなりました もこな2さんのコードを試したところ インデックスが有効範囲にありませんと出ます で 再度みたところ シート名が A1 A2 ではなく A1R A2R というふうに 最後にRがついてました 見落としてました すいません (ひろくん) 2021/06/30(水) 19:46 ---- なんか迷走しているようですが、 【シート自体】を並び替える (シートに書き出した)【シート名】を並び替える どっちですか? (もこな2 ) 2021/06/30(水) 19:55 ---- もこな2さん 説明が下手でした シート自体を並べ替えるです (ひろくん) 2021/06/30(水) 20:00 ---- では、再掲 「A12」というシートなら↓ですし Worksheets("A" & 12).Move before:=Worksheets(1) 「A3」というシートなら↓ですよね Worksheets("A" & 3).Move before:=Worksheets(1) 本当にわかりませんか? (もこな2) 2021/06/30(水) 20:21 ---- Worksheets("A" & 3).Move before:=Worksheets(1) の"A"を変えればよろしいでしょうか ちなみに最後にRがつくのですが (ひろくん) 2021/06/30(水) 20:34 ---- ■3 >〜よろしいでしょうか [[20210524221724]] 『月初めに起動するマクロを作るには』(ひろくん) ↑でもコメントしましたが、【ご自身で検証した結果】問題がなければそれでよいでしょう。 いずれにせよ、検証(デバッグ)作業はご自身でなさるべきですよ。 >ちなみに最後にRがつくのですが えっと。。。 「"A"」と「12」を合体させると「A12」になります。 「"A"」と「3」を合体させると「A3」になります。 では 「"A"」と「10」と「"R"」を合体させると何になりますか? (もこな2) 2021/06/30(水) 21:29 ---- わかりました すこしお待ちください (ひろくん) 2021/07/01(木) 20:32 ---- コメント遅くなりました Sub テキトー() Dim i As Long For i = 12 To 1 Step -1 Worksheets("A" & i & "R").Move before:=Worksheets(1) Next i End Sub としましたがまたインデックスが有効範囲にありませんと出ます 変数のiには12と出ています (ひろくん) 2021/07/05(月) 20:09 ---- >インデックスが有効範囲にありませんと出ます そういうシートは存在しないということです。 そのマクロで何をしようとしいるのか。読み取れません。 (?) 2021/07/05(月) 20:27 ---- 上にも書きましたがシート自体を並べ替えたいです (ひろくん) 2021/07/05(月) 20:34 ---- # 船頭多くしての類だが、最初にコメントしたので、追加したい。 簡単な例で示すと、こういうことでしょ? A2 A3 A4 A1 とシートが並んでいたとして、 これをA1,A2,A3,A4の順に並び変える方法は少なくも二つあります。 (1)優先度の高いものから順に、ワークシートの最後に移動する A2 A3 A4 A1 A1を最後に(結果的に動かない) A3 A4 A1 A2 A2を最後に移す A4 A1 A2 A3 A3を最後に A1 A2 A3 A4 A4を最後に または、 (2)優先度の低いものから順に、ワークシートの先頭に移動する A4 A2 A3 A1 A4を先頭に移す A3 A4 A2 A1 A3を先頭に A2 A3 A4 A1 A2を先頭に A1 A2 A3 A4 A1を先頭に どちらかといえば、(1)が自然じゃないかな。 優先度順は、 >それぞれA1〜12 B1〜12 C1〜12 D1〜12まであります ということなら明確じゃないですか。 簡単に二重ループに落とし込めそうです。 (γ) 2021/07/06(火) 10:06 ---- ■4 >インデックスが有効範囲にありませんと出ます とりあえず、↓を実行してイミディエイトに出力されたものをそのまま貼り付けて(投稿して)もらえませんか? Sub リスト出力() Dim buf(4) As String Dim i As Long, c As Long For i = 1 To Worksheets.Count buf(c) = Worksheets(i).Name If c = 4 Then Debug.Print " " & Join(buf, vbTab) c = 0 Erase buf Else c = c + 1 End If Next i If c > 0 Then Debug.Print " " & Join(buf, vbTab) End Sub ■5 お返事がないので確認。↓はわかった(理解出来た)のですか? 「"A"」と「10」と「"R"」を合体させると何になりますか? >どう変えればB C D にも適用できるかわからないのです また、私も↓のお返事が気になりますのできちんと返答されては如何ですか? >シート名による並べ替えって、そもそもどうやっているんですか? (もこな2) 2021/07/06(火) 11:13 ---- もこな2さん いつもお世話になります 上記コードを実行してみました イミディエイトに出力されたのは A2R A1R A4R A7R A9R A10R A11R B6R B8R B9R B10R C3R C6R C8R C10R C11R A3R A6R A8R A12R B2R B3R B4R B7R B11R B12R C1R C2R C4R C7R C9R C12R です >「"A"」と「10」と「"R"」を合体させると何になりますか? A10Rです >シート名による並べ替えって、そもそもどうやっているんですか? 質問の意味がわからないのですが・・・ (ひろくん) 2021/07/06(火) 18:57 ---- | A1〜A12までのシート名をならべかえたら | A10 | A11 | A12 | A1 | A2 | . | みたいになるので と質問の文章にあるので、 すでに並べ替えは実行されているかと受け止め、 どうやって並び替えたのですか? と質問したわけです。 意味がわからないほど、おかしな質問ですか? (γ) 2021/07/06(火) 19:16 ---- 失礼しました 別シートにシート名だけを書き出し単純に並べ替えを実行しただけです (ひろくん) 2021/07/06(火) 19:49 ---- 了解しました。 シート名のソートと、シートそのものの並べ替えは関連はしても、別の話ですね。 船頭は多くてもいけないので、私はここでフェイドアウトします。 2021/07/06(火) 10:06で書いたアルゴリズムのイメージは、 理解促進につながるものと思っています。 (γ) 2021/07/06(火) 20:39 ---- >別シートにシート名だけを書き出し単純に並べ替えを実行しただけです シート上で並べ替えると、こうはならず >A10 >A11 >A12 >A1 >A2 こうなるけどねえ? 2007 A1 A10 A11 A12 A2 まるっきり作ってまらうために なんか適当言ってないですかね? (おかしい) 2021/07/07(水) 01:05 ---- こう? ="A" &TEXT(MID(A1,2,10),"00") (おかしい) 2021/07/07(水) 01:24 ---- 書きためている間に話が進んでいたので、前後する部分もありますが、投稿しておきます。 ■6 >>「"A"」と「10」と「"R"」を合体させると何になりますか? >A10Rです ちがいます。「A10R」です。(全角と半角は別物です) >>シート名による並べ替えって、そもそもどうやっているんですか? >質問の意味がわからないのですが・・・ 冒頭に >A1〜A12までのシート名をならべかえたら〜みたいになるので と仰っているので、皆さん【何らかの方法で並び替えた結果】を前提に質問されているだと解釈してるとおもいますが・・・・・(少なくとも私はそう解釈してました) ■7 今回のケースは割と難題ですね。ポイントは数字部分です。 「■6」で指摘のとおり、全角と半角は別物ですから、数"字"部分を合体させる前に、1文字であれば全角に変換、2文字であれば半角のままという条件分岐をする必要でてきます。 たとえば、こんな感じ Sub 研究用() Dim i As Long For i = 1 To 12 If Len(i & "") = 1 Then Debug.Print "A" & StrConv(i, vbWide) & "R" Else Debug.Print "A" & i & "R" End If Next End Sub ■8 既にγさんから二重ループの指摘があるところですが、実際にはどのように並べたいのですか? 1) A1R,A2R,A3R.....B1R,B2R,B3R... ↑のようにアルファベットごとに、1〜12までならべたい 2) A1R,B1R,C1R,D1R, A2R,B2R,C2R,D2R.... ↑のように数字ごとに、A〜Dまでならべたい おそらく↑のどちらかだとは思いますが、どちらでも、あえて二重ループにしないというものありだとおもいます。 いずれにせよ、数日後のご自身が理解出来る方法を採られるとよいと思います。 (いままでの質問の傾向からみて、かえって混乱しそうに思うので、コメントしました。心配不要ということなら、お読み流しください) このほか↓について、一向にお返事が頂けないのですが大丈夫ですか? >お返事がないので確認。↓はわかった(理解出来た)のですか? >>どう変えればB C D にも適用できるかわからないのです (もこな2) 2021/07/07(水) 08:59 ---- ■9 ちなみに、数字部分が二桁の場合のみ半角ということなら、確かに昇順では↓のように並ぶでしょうね A10R A11R A12R A1R A2R A3R A4R A5R A6R A7R A8R A9R この場合は、B列に↓のような数式をかけば、目的は達成できたとおもいます。 =IF(LEN(A1)=4,JIS(A1),LEFT(A1,1)&"0"&RIGHT(A1,2)) シート上に書き出して並び替えたシート名の順番に、シート自体を並び替える算段があったのだとすれば、こちらのアプローチのほうが理解しやすいかもしれません。 (もこな2) 2021/07/07(水) 18:02 ---- コメント遅くなりました > ■8 既にγさんから二重ループの指摘があるところですが、実際にはどのように並べたいのですか? 1) A1R,A2R,A3R.....B1R,B2R,B3R... ↑のようにアルファベットごとに、1〜12までならべたい 2) A1R,B1R,C1R,D1R, A2R,B2R,C2R,D2R.... ↑のように数字ごとに、A〜Dまでならべたい 1)です (ひろくん) 2021/07/08(木) 19:08 ---- アルファベットごとに、1〜12までならべたいといいうことなら、直接ループ処理で並び替える方法でも、シート上に書き出したシート名を並び替えてからそれをシート自体の並び替えに反映させる方法でも、すでにアドバイスされている理屈で対応できるのではありませんか? 何処で詰まってるのですか? (もこな2 ) 2021/07/09(金) 06:49 ---- いや、ゴネていれば最終的に完成した物を書いてくれるみたいなので (ゴネ) 2021/07/09(金) 08:59 ---- コメント遅くなりました すいません どういうコードを書いていいのかがわからなくて (ひろくん) 2021/07/11(日) 18:11 ---- こんなのでいいんじゃないですか? Sub putSheetsInOrder() Dim i As Long Dim prefix Dim WsCount As Long WsCount = Worksheets.Count For Each prefix In Array("A", "B", "C", "D") For i = 1 To 12 On Error Resume Next Worksheets(prefix & Format(i, "#0R")).Move after:=Worksheets(WsCount) Worksheets(prefix & Format(i, "00R")).Move after:=Worksheets(WsCount) On Error GoTo 0 Next i Next prefix End Sub (半平太) 2021/07/11(日) 20:36 ---- ありがとうございますためしてみます (ひろくん) 2021/07/12(月) 20:26 ---- 半平太さんありがとうございます 提示されたコードを実行してみましたが何も変化がなかったです何か他に必要なんでしょうか すいません (ひろくん) 2021/07/13(火) 21:00 ---- >何か他に必要なんでしょうか シート名に関する情報が不正確すぎます。 下のプログラムを実行して、イミディエイトウィンドウに打ち出されるシート名を コピーして、この掲示板に貼り付けてください。(解決策はそれを見た後で考えます) こんな感じで出てくるはずです。 ↓ A1R A2R A3R A4R A5R A6R A6R A7R A8R A9R A10R A11R A12R A12R B1R B2R B3R B4R B5R B6R B6R B7R B8R B9R B10R B11R B12R B12R D12R '貼り付けるマクロ ↓ Sub wsNamePrintInImeadiateWindow() Dim i, ws i = 0 For Each ws In ThisWorkbook.Worksheets i = i + 1 If i >= 6 Then i = 0 Debug.Print ws.Name & " ", vbCr End If Debug.Print ws.Name & " "; Next End Sub (半平太) 2021/07/13(火) 21:26 ---- 半平太さんありがとうございます 上記コードを実行してみました イミディエイトウィンドウには A2R A1R A4R A7R A9R A10R A10R A11R B6R B8R B9R B10R C3R C3R C6R C8R C10R C11R A3R A6R A6R A8R A12R B2R B3R B4R B7R B7R B11R B12R C1R C2R C4R C7R C7R C9R C12R A2R A1R A4R A7R A9R A10R A10R A11R B6R B8R B9R B10R C3R C3R C6R C8R C10R C11R A3R A6R A6R A8R A12R B2R B3R B4R B7R B7R B11R B12R C1R C2R C4R C7R C7R C9R C12R と出ます (ひろくん) 2021/07/13(火) 21:52 ---- 失礼しました2回貼り付けてました 正しくは A2R A1R A4R A7R A9R A10R A10R A11R B6R B8R B9R B10R C3R C3R C6R C8R C10R C11R A3R A6R A6R A8R A12R B2R B3R B4R B7R B7R B11R B12R C1R C2R C4R C7R C7R C9R C12R です失礼しました (ひろくん) 2021/07/13(火) 22:25 ---- これでどうですか? Sub putSheetsInOrder() Dim sortedLst As Object Dim i, NM, Temp Dim ws As Worksheet Dim wsCount As Long Set sortedLst = CreateObject("System.Collections.SortedList") For Each ws In ThisWorkbook.Worksheets NM = ws.Name Temp = Left(NM, 1) & Format(Mid(NM, 2, Len(NM) - 2), "00") & Right(NM, 1) sortedLst.Add StrConv(Temp, vbNarrow), ws.Name Next ws wsCount = ThisWorkbook.Worksheets.Count For i = 0 To sortedLst.Count - 1 Worksheets(sortedLst.GetByIndex(i)).Move after:=Worksheets(wsCount) Next i End Sub (半平太) 2021/07/13(火) 22:49 ---- 編集がかぶりましたがそのまま。 >シート名に関する情報が不正確すぎます。 またしょうもない回答者と怒られちゃいそうですが、シート名の状況は、「(ひろくん) 2021/07/06(火) 18:57」を見ればおわかりになるかと。 ■10 結局ご自身で考えるのは放棄してしまわれたようで残念でなりません。 最後まで答えていただけませんでしたが、 >どう変えればB C D にも適用できるかわからないのです ↑は、直ぐに理解できると思ったがゆえに”本当にわからないのか?と繰り返し確認していました。 "A" & 10 & "R" ・・・・ 【A10R】 なのですから、 "B" & 10 & "R" ・・・・ 【B10R】 になることはご理解いただけるのではないかと。 ■11 半平太さんがやる気になられているようなので、私はこの辺で撤退しますが、「■7」をちゃんと研究していただいたなら、↓のようなコードができたとおもいますので参考に提示しておきます。 Sub ループを複数回にわける() Dim i As Long For i = 12 To 1 Step -1 If Len(i & "") = 1 Then Worksheets("D" & StrConv(i, vbWide) & "R").Move before:=Worksheets(1) Else Worksheets("D" & i & "R").Move before:=Worksheets(1) End If Next i For i = 12 To 1 Step -1 If Len(i & "") = 1 Then Worksheets("C" & StrConv(i, vbWide) & "R").Move before:=Worksheets(1) Else Worksheets("C" & i & "R").Move before:=Worksheets(1) End If Next i For i = 12 To 1 Step -1 If Len(i & "") = 1 Then Worksheets("B" & StrConv(i, vbWide) & "R").Move before:=Worksheets(1) Else Worksheets("B" & i & "R").Move before:=Worksheets(1) End If Next i For i = 12 To 1 Step -1 If Len(i & "") = 1 Then Worksheets("A" & StrConv(i, vbWide) & "R").Move before:=Worksheets(1) Else Worksheets("A" & i & "R").Move before:=Worksheets(1) End If Next i End Sub '------------------------------------------------------------- Sub 二重ループで一度に処理する() Dim アルファベット As Variant Dim 数字 As Long For Each アルファベット In Array("A", "B", "C", "D") For 数字 = 12 To 1 Step -1 If Len(数字 & "") = 1 Then Worksheets("A" & StrConv(数字, vbWide) & "R").Move before:=Worksheets(1) Else Worksheets("A" & 数字 & "R").Move before:=Worksheets(1) End If Next 数字 Next アルファベット End Sub ※γさんがコメントされている(1)のようにしてもよかったのですが、 個人的には【それ以外】のシートが後ろに集まったほうが気持ちが良いと思うので、 どんどん前において後ろに押し出すようにしています。(好みの問題ですね) (もこな2 ) 2021/07/13(火) 22:53 ---- 失礼。二重ループのほう間違えました。 Sub 二重ループで一度に処理する_修正() Dim アルファベット As Variant Dim 数字 As Long For Each アルファベット In Array("D", "C", "B", "A") For 数字 = 12 To 1 Step -1 If Len(数字 & "") = 1 Then Worksheets(アルファベット & StrConv(数字, vbWide) & "R").Move before:=Worksheets(1) Else Worksheets(アルファベット & 数字 & "R").Move before:=Worksheets(1) End If Next 数字 Next アルファベット End Sub (もこな2 ) 2021/07/13(火) 22:57 ---- ありがとうございます 実行してみました Sub putSheetsInOrder() Dim sortedLst As Object Dim i, NM, Temp Dim ws As Worksheet Dim wsCount As Long Set sortedLst = CreateObject("System.Collections.SortedList") For Each ws In ThisWorkbook.Worksheets NM = ws.Name Temp = Left(NM, 1) & Format(Mid(NM, 2, Len(NM) - 2), "00") & Right(NM, 1) sortedLst.Add StrConv(Temp, vbNarrow), ws.Name Next ws wsCount = ThisWorkbook.Worksheets.Count For i = 0 To sortedLst.Count - 1 Worksheets(sortedLst.GetByIndex(i)).Move after:=Worksheets(wsCount) ここ Next i End Sub ここというところが黄色くなり インデックスが有効範囲にありませんと出ます (ひろくん) 2021/07/13(火) 22:59 ---- >またしょうもない回答者と怒られちゃいそうですが もこな2さんにそんなこと言った覚えはないです。 その発言をしたときは「最近増えた回答者の中には」と言うニュアンスがあったはずですが。 >>シート名に関する情報が不正確すぎます。 >シート名の状況は、「(ひろくん) 2021/07/06(火) 18:57」を見ればおわかりになるかと。 一応読んではいますが、そんな危なっかしい命名ルールではいつかミスを犯します。 いや既に犯しているかも知れない。 「済みません。そうなってないシートがありました」なんてオチは珍しくもない。 なので、現物名を出してもらった次第です。 (半平太) 2021/07/13(火) 23:14 ---- >ここというところが黄色くなり >インデックスが有効範囲にありませんと出ます あれれ? そんなこと起こるはずがないと思うんですがねぇ・・ ちょっと、i、sortedLst.GetByIndex(i) 、WsCount がどうなっているかチェックして頂けませんか? For i = 0 To sortedLst.Count - 1 Debug.Print i, sortedLst.GetByIndex(i) ,wsCount '←ーーーーーーーーーーーーーーー 一行挿入 Worksheets(sortedLst.GetByIndex(i)).Move after:=Worksheets(wsCount) Next i あと、イミディエイトウィンドウの最終はどう出ていますか? こっちでは、こうなりますが、 ↓ 30 C11R 32 31 C12R 32 (半平太) 2021/07/13(火) 23:27 ---- Sub putSheetsInOrder() Dim sortedLst As Object Dim i, NM, Temp Dim ws As Worksheet Dim wsCount As Long Set sortedLst = CreateObject("System.Collections.SortedList") For Each ws In ThisWorkbook.Worksheets NM = ws.Name Temp = Left(NM, 1) & Format(Mid(NM, 2, Len(NM) - 2), "00") & Right(NM, 1) sortedLst.Add StrConv(Temp, vbNarrow), ws.Name Next ws wsCount = ThisWorkbook.Worksheets.Count For i = 0 To sortedLst.Count - 1 Debug.Print i, sortedLst.GetByIndex(i), wsCount '←ーーーーーーーーーーーーーーー 一行挿入 Worksheets(sortedLst.GetByIndex(i)).Move after:=Worksheets(wsCount) Next i End Sub ですよねぇ 同じところでエラーになります・・・・・・・・・・・・・ (ひろくん) 2021/07/14(水) 19:33 ---- 失礼しました エクセルの個人用マクロブックに作ってました 実行するブックにマクロをつくったらできました 個人用マクロブックでできるようにはできないのでしょうか ちなみに 最後は 31 C12R 32 でした (ひろくん) 2021/07/14(水) 19:41 ---- 撤退するといっておきながらですが。 >個人用マクロブックでできるようにはできないのでしょうか できます。 ↓について【どのブックの】シートを【どのブックの】シートの後ろに移動させるのか、それぞれブックをきちんと指定すればよいです。 Worksheets(sortedLst.GetByIndex(i)).Move after:=Worksheets(wsCount) (もこな2 ) 2021/07/14(水) 20:34 ---- ActiveWorkbook.Worksheets(sortedLst.GetByIndex(i)).Move after:=ActiveWorkbook.Worksheets(wsCount) としましたがエラーになりました (ひろくん) 2021/07/14(水) 20:53 ---- For Each ws In ThisWorkbook.Worksheets ‾‾‾‾‾‾‾‾‾‾‾‾ (ここも) 2021/07/14(水) 21:23 ---- Sub putSheetsInOrder() Dim sortedLst As Object Dim i, NM, Temp Dim ws As Worksheet Dim wsCount As Long Set sortedLst = CreateObject("System.Collections.SortedList") For Each ws In ActiveWorkbook.Worksheets NM = ws.Name Temp = Left(NM, 1) & Format(Mid(NM, 2, Len(NM) - 2), "00") & Right(NM, 1) sortedLst.Add StrConv(Temp, vbNarrow), ws.Name Next ws wsCount = ActiveWorkbook.Worksheets.Count For i = 0 To sortedLst.Count - 1 Debug.Print i, sortedLst.GetByIndex(i), wsCount '←ーーーーーーーーーーーーーーー 一行挿入 ActiveWorkbook.Worksheets(sortedLst.GetByIndex(i)).Move after:=ActiveWorkbook.Worksheets(wsCount) Next i End Sub Sub putSheetsInOrder() Dim sortedLst As Object Dim i, NM, Temp Dim ws As Worksheet Dim wsCount As Long Set sortedLst = CreateObject("System.Collections.SortedList") For Each ws In ActiveWorkbook.Worksheets NM = ws.Name Temp = Left(NM, 1) & Format(Mid(NM, 2, Len(NM) - 2), "00") & Right(NM, 1) sortedLst.Add StrConv(Temp, vbNarrow), ws.Name Next ws wsCount = ActiveWorkbook.Worksheets.Count For i = 0 To sortedLst.Count - 1 ActiveWorkbook.Worksheets(sortedLst.GetByIndex(i)).Move after:=ActiveWorkbook.Worksheets(wsCount) Next i End Sub でできました皆さんありがとうございました (ひろくん) 2021/07/14(水) 21:58 ---- 撤退するといっておきながらですが、多少は研究する気があるようなので提供だけしておきます。 Sub 二重ループで一度に処理する_その2() Dim i As Long, MySTR As Variant On Error Resume Next With ActiveWorkbook For Each MySTR In Split("A,B,C,D", ",") For i = 1 To 12 .Worksheets(MySTR & i & "R").Move after:=.Worksheets(.Worksheets.Count) .Worksheets(MySTR & StrConv(i, vbWide) & "R").Move after:=.Worksheets(.Worksheets.Count) Next i Next MySTR End With On Error GoTo 0 End Sub '------------------------------------------------------------------------ Sub シート上で並び替えてから反映() Dim i As Long With Worksheets.Add 'シートに書き出し For i = 1 To Worksheets.Count .Cells(i, "A").Value = Worksheets(i).Name '▼「■9」で提示の数式でよいはずだが「Formulaプロパティ」に代入するとNameエラーになっちゃうのでとりあえず.. If Len(Worksheets(i).Name) = 3 Then .Cells(i, "B").Value = Left(Worksheets(i).Name, 1) & "0" & Right(Worksheets(i).Name, 2) Else .Cells(i, "B").Value = StrConv(Worksheets(i).Name, vbWide) End If Next i 'シート上でシート名を並び替え .Range("A:B").Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlNo '並び替えたシート名の順番にシート自体を並び替える For i = 1 To Worksheets.Count Worksheets(.Cells(i, "A").Value).Move after:=Worksheets(Worksheets.Count) Next i '作業用のシート削除する Application.DisplayAlerts = False .Delete Application.DisplayAlerts = True End With End Sub (もこな2 ) 2021/07/14(水) 23:28 ---- ありがとうございます勉強します (ひろくん) 2021/07/15(木) 22:45 ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/202106/20210625225354.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97017 documents and 608140 words.

訪問者:カウンタValid HTML 4.01 Transitional