Excelで各行ごとに新しいシートを作成するにはどうすればよいですか?
データ管理やレポート作成のタスクにおいて、テーブル内の各レコードを個別のワークシートに分ける必要がある場合があります。例えば、Excelで学生の詳細リストを管理している場合、各行が異なる学生の情報を表しているとします。その場合、すべての学生ごとに別々のシートを生成し、それぞれに特定のデータを含めたいと思うかもしれません。あるいは、内容に関係なくすべての行を分割して、それぞれを新しいワークシートに配置したい場合もあります。手動で新しいシートを作成してデータをコピーするのは時間がかかり、ミスも発生しやすいものです。特に大規模なデータセットを扱っている場合にはそうです。このプロセスを自動化することで、大幅な時間の節約ができ、ミスのリスクも軽減されます。このガイドでは、Excelで各行ごとに新しいシートを作成するための2つの実用的な解決策を紹介し、それぞれの方法の長所と短所について説明します。これにより、最適なアプローチを選択する助けとなります。
VBAコードを使用して各行ごとに新しいシートを作成する
Kutools for ExcelのSplit Dataユーティリティを使用して各行ごとに新しいシートを作成する
VBAコードを使用して各行ごとに新しいシートを作成する
VBA(Visual Basic for Applications)を使用することは、退屈で繰り返しの多いExcelタスクを自動化する効果的な方法です。VBAを使用すると、列に基づいて行をグループ化する(例えば、学生名など)か、または内容に関係なく各行ごとに新しいワークシートを迅速に作成できます。このアプローチは、VBAエディタに慣れ親しみ、高度にカスタマイズ可能なソリューションを好むユーザーにとって理想的です。ただし、コードの編集と実行が必要となるため、VBAの経験がないユーザー、または環境でマクロを実行する許可がないユーザーには適さない可能性があります。
1. 「Alt」+「F11」を押して、Microsoft Visual Basic for Applicationsウィンドウを開きます。これにより、Excel操作を自動化するためのVBAコードにアクセスできます。
2. Microsoft Visual Basic for Applicationsウィンドウで、挿入 > モジュールをクリックして新しいコードモジュールを追加します。次に、以下のコードをモジュールウィンドウにコピー&ペーストします。
VBAコード:列に基づいて各行ごとに新しいシートを作成する
Sub parse_data()
'Update by Extendoffice 2018/3/2
Dim xRCount As Long
Dim xSht As Worksheet
Dim xNSht As Worksheet
Dim I As Long
Dim xTRrow As Integer
Dim xCol As New Collection
Dim xTitle As String
Dim xSUpdate As Boolean
Set xSht = ActiveSheet
On Error Resume Next
xRCount = xSht.Cells(xSht.Rows.Count, 1).End(xlUp).Row
xTitle = "A1:C1"
xTRrow = xSht.Range(xTitle).Cells(1).Row
For I = 2 To xRCount
Call xCol.Add(xSht.Cells(I, 1).Text, xSht.Cells(I, 1).Text)
Next
xSUpdate = Application.ScreenUpdating
Application.ScreenUpdating = False
For I = 1 To xCol.Count
Call xSht.Range(xTitle).AutoFilter(1, CStr(xCol.Item(I)))
Set xNSht = Nothing
Set xNSht = Worksheets(CStr(xCol.Item(I)))
If xNSht Is Nothing Then
Set xNSht = Worksheets.Add(, Sheets(Sheets.Count))
xNSht.Name = CStr(xCol.Item(I))
Else
xNSht.Move , Sheets(Sheets.Count)
End If
xSht.Range("A" & xTRrow & ":A" & xRCount).EntireRow.Copy xNSht.Range("A1")
xNSht.Columns.AutoFit
Next
xSht.AutoFilterMode = False
xSht.Activate
Application.ScreenUpdating = xSUpdate
End Sub
パラメータの説明と使用上のヒント:
- A1:C1はデータテーブルのヘッダー範囲です。必要に応じて、この参照を実際のデータヘッダー領域に合わせて調整してください。
- このコードは指定された列(デフォルトでは列A)から一意の値を収集します。一意の値ごとに新しいワークシートが作成され、対応する行が含まれます。
- テーブルがより広い範囲にある場合や、別の行から始まる場合は、
xTitle
およびセル参照をそれに応じて更新してください。 - ワークシートに他のシートを参照する数式が含まれている場合、分割後に参照を確認してください。
3. F5キーを押すか、または[実行]をクリックしてコードを実行します。新しいワークシートは現在のブック内のすべての既存シートの後に作成され、それぞれが選択した一意の列値に基づいて名前が付けられます。サンプル結果については、下のスクリーンショットを参照してください。
列の内容に関係なく、すべての行を独自のワークシートに分割したい場合は、次の代替VBAコードを使用できます。これにより、列条件を指定する必要がなくなります。
VBAコード:直接的に各行ごとに新しいシートを作成する
Sub RowToSheet()
Dim xRow As Long
Dim I As Long
With ActiveSheet
xRow = .Range("A" & Rows.Count).End(xlUp).Row
For I = 1 To xRow
Worksheets.Add(, Sheets(Sheets.Count)).Name = "Row " & I
.Rows(I).Copy Sheets("Row " & I).Range("A1")
Next I
End With
End Sub
このコードをモジュールで実行すると、アクティブなワークシートからすべての行(ヘッダー行を含む)が新しく作成されたワークシートにコピーされます。ヘッダー行も複製されることに注意してください。これを回避したい場合は、出力シートを後で手動で削除または調整する必要があります。
トラブルシューティングと実用的なヒント:
- 「添字が範囲外です」というエラーが発生した場合、シート名に無効な文字や重複した名前がないか確認してください。
- 大規模なデータセットの場合、大量のシートが生成される可能性があり、それがExcelの動作を遅くしたり、ナビゲーションを困難にする可能性があります。非常に大きなテーブルの場合、行ごとに分割する必要があるかどうかを考慮してください。
- VBAコードを実行する前に、常にデータのバックアップを取って、意図しないデータ損失を防いでください。
利点: 無料;高度にカスタマイズ可能。
欠点: VBA/マクロが有効である必要があり、VBAエディタに多少の知識が必要;複雑なデータや異常なデータに対してコードエラーの可能性あり。
適している人: スクリプティングの柔軟性が必要なユーザー、および一度限りまたは不定期のタスクを行うユーザー。
Kutools for ExcelのSplit Dataユーティリティを使用して各行ごとに新しいシートを作成する
コードを書かずにシンプルで使いやすいアプローチを好む場合、Kutools for ExcelのSplit Dataユーティリティをお勧めします。この機能は、数回のクリックだけでデータを新しいワークシートに分割するのに役立ち、ワークシートの管理プロセスを大幅に簡素化します。Kutoolsは、特に大規模で複雑なテーブルを頻繁に扱うユーザー、または手動コーディングよりもグラフィカルインターフェースを好むユーザーにとって有用です。なお、KutoolsはExcelアドインであり、事前にインストールしておく必要があります。
1. 個別のワークシートに分割したいデータを含むテーブルを選択します。次に、Kutools Plusタブをクリックして、Split Dataを選択します。詳しくは下のスクリーンショットを参照してください。
2. [複数のワークシートにデータを分割]ダイアログボックスで、分割要件に基づいて適切な設定を選択します。
A. 列の値に基づいて新しいシートを作成する:
B. 各行ごとに直接新しいシートを作成する:
実行後、選択した設定に基づいて新しいワークシートがすべて含まれる新しいワークブックが生成されます。
列の値に基づいて各行ごとに新しいシートを作成する:
列の値を考慮せずに各行ごとに新しいシートを作成する:
注意点と実用的なヒント:
- Split Dataユーティリティを使用する前に、テーブル内に空白行がないことを確認してください。空白行があると空のシートが生成される可能性があります。
- シートの命名規則を確認し、重複または無効なワークシート名を避けてください。Kutoolsは、名前の衝突が発生した場合に自動的に調整します。
- テーブルが非常に大きい場合、大量のワークシートが生成される可能性があるため、進行する前にこれを考慮してください。
利点: コードを書く必要なしで簡単に使用可能;バッチ処理や頻繁なタスクに適しています。
欠点: Kutoolsアドインをインストールする必要があります。
適している人: すべてのレベルのExcelユーザー、特に反復的なデータ分割を扱うユーザー。
Kutools for Excel - 必要なツールを300以上搭載し、Excelの機能を大幅に強化します。永久に無料で利用できるAI機能もお楽しみください!今すぐ入手
デモ:Kutools for ExcelのSplit Dataユーティリティを使用して各行ごとに新しいシートを作成する
最高のオフィス生産性ツール
🤖 | Kutools AI Aide:データ分析を革新:インテリジェント実行 | コード生成 | カスタム数式の作成 | データを分析してグラフを生成 | Kutools Functions を呼び出す… |
人気機能:重複の検索・ハイライト・マーキング | 空白行を削除 | データを失わず列やセルを統合 | 丸める ... | |
スーパーLOOKUP:複数条件VLOOKUP | 複数値VLOOKUP | 複数シートの検索 | ファジーマッチ .... | |
高度なドロップダウンリスト:すばやくドロップダウンリストを作成 | 依存型ドロップダウンリスト | 複数選択ドロップダウンリスト .... | |
列の管理:特定数の列を追加 | 列を移動 | 非表示列の表示状態を切り替え | 範囲と列の比較 ... | |
注目機能:グリッドフォーカス | デザインビュー | 強化された数式バー | ワークブック&ワークシートの管理 | オートテキスト ライブラリ (Auto Text) | 日付ピッカー | データの統合 | セルの暗号化/復号化 | リスト送信で電子メールを送信 | スーパーフィルター | 特殊フィルタ(太字/斜体/取り消し線でフィルタ...) | |
トップ15ツールセット:12 種類のテキストツール(テキストの追加、特定の文字を削除など) | 50 種以上のグラフ タイプ(ガントチャートなど) | 40を超える実用的な 数式(誕生日に基づいて年齢を計算する、など) | 19種の 挿入ツール(QRコードの挿入、パスから画像の挿入など) | 12種類の 変換ツール(単語に変換する、通貨変換など) | 7つの 結合&分割ツール(高度な行のマージ、セルの分割など) | ...さらに多数 |
Kutools for ExcelでExcelスキルを強化し、かつてない効率を体験しましょう。 Kutools for Excelは300以上の高度な機能で生産性向上と時間短縮を実現します。最も必要な機能を今すぐ取得...
Office TabはOfficeにタブ表示を追加し、作業効率を大幅に向上させます
- Word、Excel、PowerPointでタブ編集とタブ閲覧を有効にします
- 同じウィンドウ内の新しいタブで複数のドキュメントを開いたり作成したりできます。新しいウィンドウを開く必要はありません。
- 生産性が50%向上し、1日に何百回ものマウスクリックも削減できます!