[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シートを任意で「入れ替え」したい』(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.