- ベストアンサー
Excelシート名の追加方法と変更方法
- Excelでシート名を複数のセルから取得して追加する方法を教えてください。
- キーとなるデータの抽出と重複したキーの削除はできたが、シート名を変更しながら追加する方法がわかりません。
- シート名を追加する方法として、取得したキーをシート名に指定する方法と全て追加後にシート名を変更する方法が考えられます。どちらが良いでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
重複したキー云々はあまり関係ありませね。 もちろんやり方によっては重要となりますが。 方法はいくつもありますがシンプルなコードを提示します。 新しいブックのSheet1にテストデータをいれ以下のコードを実行してください。 (条件) データシート: Sheet1 データ見出行: 1行目 データ開始行: 2行目~~ データ列__: A~K列(最後の列K列は適当に) データキー列: A列 '-------------------------------------------- Sub Test() Dim mySheet As Worksheet Dim NewSheet As Worksheet Dim myRange As Range Dim myKey Dim R As Long Dim StartRow As Long Dim EndRow As Long Application.ScreenUpdating = False Sheets("Sheet1").Copy After:=Sheets(Sheets.Count) Set mySheet = ActiveSheet Set myRange = mySheet.Range("A1").CurrentRegion myRange.Sort Key1:=mySheet.Range("A2"), Order1:=xlAscending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod:=xlPinYin StartRow = 2 With mySheet For R = 2 To .Cells(Rows.Count, "A").End(xlUp).Row If .Cells(R, "A").Value <> .Cells(R + 1, "A").Value Then myKey = .Cells(R, "A").Value Set NewSheet = Sheets.Add(After:=Sheets(Sheets.Count)) NewSheet.Name = myKey EndRow = R .Range(.Cells(StartRow, "A"), .Cells(EndRow, "K")).Copy NewSheet.Range("A2") .Rows(1).Copy NewSheet.Range("A1") StartRow = R + 1 End If Next R End With Application.DisplayAlerts = False mySheet.Delete Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub '--------------------------------------------------- 見れば分かると思いますが、 先ず、データシートSheet1を丸ごとコピーして新しいシートを作成し、それを使って作業をします。 作業が終わったら、そのコピーしたシートは削除する。 以上。
お礼
大変助かりました。パーフェクトにやりたい事が出来ました。 当然のことですが、やはりツギハギで作っている物とは大違いですね。 まだ、いろんなパーツを拾い集めてはくっつけて動かす程度の事しか出来ないため、教えて頂いた 中身も完全には理解できていませんが、凄く良いお手本を頂けましたので一つひとつを紐解いて、 今後の参考にさせて頂き、いつの日か自力で完成出来るように頑張ろうと思います。 本当に有難うございました。