[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シートを任意で「入れ替え」したい』(nest1anest)
下記のように4枚のシートを任意に入れ替えるボタンをフォーム上に作りました。
ボタン「1と2を入れ替える」
〃 「1と3を入れ替える」
〃 「1と4を入れ替える」
〃 「2と3を入れ替える」
〃 「2と4を入れ替える」
〃 「3と4を入れ替える」
しかし、任意で入れ替えるのは一度別のシートを作り、セルにそれぞれのシート名を入れておれを並び替えたのち、そのセルを参考にシートを実際に入れ替えるしかなさそうでした。
割と頻繁に使う予定のボタンですし、厳密には「任意の並び替え」ではなく、「任意の入れ替え」なので、もう少し簡単でさらっと押せるようなコードはないかと思っています。
各シート名はそれぞれ
シート1「佐藤」
シート2「鈴木」
シート3「内藤」
シート4「吉田」
です。
Worksheets(1)に「鈴木」
Worksheets(2)に「佐藤」
と単純に指定できたらいいのですが・・・
< 使用 Excel:Excel2019、使用 OS:Windows10 >
とりあえず、"入替"という命令は無いと思いますので、指定した場所に移動(挿入)を行うという処理になろうかとは思いますが…
(もこな2) 2019/10/27(日) 20:06
が、指定した場所に移動ということであれば、
Moveメソッドというものがあり、
例えば ボタン「1と2を入れ替える」 であれば、
Worksheets("鈴木").Move Before := Worksheets(1)
ボタン「1と3を入れ替える」 であれば、
Worksheets("内藤").Move Before := Worksheets(1)
Worksheets("佐藤").Move Before := Worksheets(4)
という感じで多くても2〜3行で済むようですね・・・(あってますでしょうか?)
またなぜたった2行で済むことを
新規シートを作る
→シート名を取得してセルに順番に代入
→セルを並び替える
→並び替えた順序を参考にシートを実際に移動する
→新規シートを削除する
という長々としたコーディングが必要なのでしょうか?
(nest1anest) 2019/10/27(日) 20:35
こういうことでしょうか?
Sub mychg1and2() With Worksheets '1234 .Item(2).Move before:=.Item(1) '2134 End With End Sub
Sub mychg1and3() With Worksheets '1234 .Item(1).Move before:=.Item(4) '2314 .Item(2).Move before:=.Item(1) '3214 End With End Sub
Sub mychg1and4() With Worksheets '1234 .Item(1).Move after:=.Item(4) '2341 .Item(3).Move before:=.Item(1) '4231 End With End Sub
Sub mychg2and3() With Worksheets '1234 .Item(3).Move before:=.Item(2) '1324 End With End Sub
Sub mychg2and4() With Worksheets '1234 .Item(2).Move after:=.Item(4) '1342 .Item(3).Move before:=.Item(2) '1432 End With End Sub
Sub mychg3and4() With Worksheets '1234 .Item(4).Move before:=.Item(3) '1243 End With End Sub
(渡辺ひかる) 2019/10/28(月) 10:22
Sub main() Dim dic As Object, k As Variant, i As Long, j As Long Set dic = CreateObject("Scripting.Dictionary") For i = 1 To Worksheets.Count For j = 1 To Worksheets.Count If dic(Worksheets(j).Name) = "" Then If MsgBox(i & "番目のシートは、" & Worksheets(j).Name & "でよろしいですか?", 36) = 6 Then dic(Worksheets(j).Name) = i Exit For End If End If Next j Next i For i = 1 To Worksheets.Count For Each k In dic If dic(k) = i Then Sheets(k).Move After:=Sheets(Worksheets.Count) Next k Next i End Sub (mm) 2019/10/28(月) 18:18
Sub test() Call SheetChange("佐藤", "吉田") ' Call SheetChange(1, 4) 'こう指定してもOK End Sub
Sub SheetChange(cw1 As Variant, cw2 As Variant) Dim iw1 As Long Dim iw2 As Long
iw1 = Sheets(cw1).Index iw2 = Sheets(cw2).Index If iw1 < iw2 Then Sheets(cw1).Move before:=Sheets(cw2) Sheets(cw2).Move before:=Sheets(iw1) Else Sheets(cw1).Move after:=Sheets(cw2) Sheets(cw2).Move after:=Sheets(iw1) End If End Sub (???) 2019/10/29(火) 11:16
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.