ヒント:他の言語はGoogle翻訳されています。 訪問することができます English このリンクのバージョン。
ログイン
x
or
x
x
登録
x

or

Excelの列に基づいて複数のワークシートにデータを分割する方法は?

巨大なデータ行を持つワークシートがあるとしたら、データを複数のワークシートに分割する必要があります。 名前 列(次のスクリーンショットを参照)、名前はランダムに入力されます。 たぶんあなたは最初にそれらを並べ替えることができますし、それらをコピーし、別の新しいワークシートに1つずつ貼り付けます。 しかし、これは繰り返しコピーして貼り付けるためにあなたの忍耐を必要とします。 今日、私はこの作業を解決するための簡単なテクニックを話します。

1列によるデータの分割

VBAコードの列に基づいて複数のワークシートにデータを分割する

Kutools for Excelで列に基づいて複数のワークシートにデータを分割する


ワークシートの特定の列または行数に基づいてデータを複数のワークシートに分割する:

大きなワークシートを特定の列データまたは行数に基づいて複数のシートに分割する場合は、 Kutools for Excel's 分割データ このタスクを迅速かつ簡単に解決するのに役立ちます。

6列によるデータの分割

Kutools for Excel200便利なExcelアドイン以上で、60日に制限なく試してみることができます。 今すぐダウンロードして無料トライアル!


VBAコードの列に基づいて複数のワークシートにデータを分割する


列の値に基づいてデータをすばやく自動的に分割する場合は、次のVBAコードを選択することをお勧めします。 このようにしてください:

1。 押さえつける Alt + F11 キーを押して アプリケーション用Microsoft Visual Basic 窓。

2に設定します。 OK をクリックします。 インセット > モジュール次のコードをモジュールウィンドウに貼り付けます。

Sub Splitdatabycol()
Dim lr As Long
Dim ws As Worksheet
Dim vcol, i As Integer
Dim icol As Long
Dim myarr As Variant
Dim title As String
Dim titlerow As Integer
Dim xTRg As Range
Dim xVRg As Range
Dim xWSTRg As Worksheet
On Error Resume Next
Set xTRg = Application.InputBox("Please select the header rows:", "Kutools for Excel", "", Type:=8)
If TypeName(xTRg) = "Nothing" Then Exit Sub
Set xVRg = Application.InputBox("Please select the column you want to split data based on:", "Kutools for Excel", "", Type:=8)
If TypeName(xVRg) = "Nothing" Then Exit Sub
vcol = xVRg.Column
Set ws = xTRg.Worksheet
lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
title = xTRg.AddressLocal
titlerow = xTRg.Cells(1).Row
icol = ws.Columns.Count
ws.Cells(1, icol) = "Unique"
Application.DisplayAlerts = False
If Not Evaluate("=ISREF('xTRgWs_Sheet!A1')") Then
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "xTRgWs_Sheet"
Else
Sheets("xTRgWs_Sheet").Delete
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "xTRgWs_Sheet"
End If
Set xWSTRg = Sheets("xTRgWs_Sheet")
xTRg.Copy
xWSTRg.Paste Destination:=xWSTRg.Range("A1")
ws.Activate
For i = (titlerow + xTRg.Rows.Count) To lr
On Error Resume Next
If ws.Cells(i, vcol) <> "" And Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
End If
Next
myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
ws.Columns(icol).Clear
For i = 2 To UBound(myarr)
ws.Range(title).AutoFilter field:=vcol, Criteria1:=myarr(i) & ""
If Not Evaluate("=ISREF('" & myarr(i) & "'!A1)") Then
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
Else
Sheets(myarr(i) & "").Move after:=Worksheets(Worksheets.Count)
End If
xWSTRg.Range(title).Copy
Sheets(myarr(i) & "").Paste Destination:=Sheets(myarr(i) & "").Range("A1")
ws.Range("A" & (titlerow + xTRg.Rows.Count) & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").Range("A" & (titlerow + xTRg.Rows.Count))
Sheets(myarr(i) & "").Columns.AutoFit
Next
xWSTRg.Delete
ws.AutoFilterMode = False
ws.Activate
Application.DisplayAlerts = True
End Sub

3。 次に、 F5 コードを実行するためのキーと、ヘッダー行を選択したことを知らせるプロンプトボックスが表示されます。スクリーンショットを参照してください。

7列によるデータの分割

4。 そして、 OK ボタンをクリックし、2番目のプロンプトボックスで、分割する列データを選択します。スクリーンショットを参照してください。

8列によるデータの分割

5。 次に、をクリックします。 OKアクティブなワークシートのすべてのデータは、列の値によって複数のワークシートに分割されます。 また、分割ワークシートには分割セル名が付けられています。 スクリーンショットを参照してください。

2列によるデータの分割

:分割ワークシートは、マスターワークシートがあるワークブックの最後に配置されます。


Kutools for Excelで列に基づいて複数のワークシートにデータを分割する

Excelの初心者として、この長いVBAコードは私たちにとってはやや難しく、ほとんどの人はコードを私たちの必要性として修正する方法を知らないことさえあります。

ここでは、多機能ツールを紹介します。Kutools for Excel、 その 分割データ ユーティリティは、列に基づいて複数のワークシートにデータを分割するのに役立つだけでなく、行数でデータを分割することもできます。

Kutools for Excel : 300便利なExcelアドイン以上で、60日以内に自由に試してみてください.

あなたがインストールしている場合 Kutools for Excel次のようにしてください:

1。 分割するデータの範囲を選択します。

2に設定します。 OK をクリックします。 Kutools Plus > ワークシート > 分割データ、スクリーンショットを見る:

3列によるデータの分割

3。 の中に データを複数のワークシートに分割する ダイアログボックスでは、次の操作が必要です。

1)。 選択 特定の列 内のオプション に基づいて分割 ドロップダウンリストからデータを分割する列の値を選択します。 (データにヘッダーがあり、新しい分割されたワークシートに挿入する場合は、チェックしてください 私のデータにヘッダーがあります オプション。)

2)。 次に、分割されたワークシート名を 新しいワークシート名 セクションで、ワークシート名のルールを キャンペーンのルール ドロップダウンリストでは、 接頭辞 or サフィックス シート名についても同様です。

3)。 クリック OK ボタン。 スクリーンショットを見る:

4列によるデータの分割

4。 これで、データは新しいワークブックの複数のワークシートに分割されます。

5列によるデータの分割

クリックしてExcel用のKutoolsをダウンロードし、今すぐ無料トライアル!


Kutools for Excelで列に基づいて複数のワークシートにデータを分割する

Kutools for Excel 300以上の便利なExcelツールが含まれています。 自由に60日に制限なしで試してみてください。 今すぐ無料トライアルをダウンロードしてください!


関連記事:

行数によって複数のワークシートにデータを分割する方法は?



推奨生産性ツール

Office Tab

金星1 Chrome、Firefox、新しいInternet Explorerと同様に、Excelやその他のOfficeソフトウェアに便利なタブを持たせる。

Kutools for Excel

金星1 素晴らしい! 5分で生産性を向上させます。 特別なスキルは必要ありません。毎日2時間節約できます!

金星1 300 Excelの新機能は、Excelを非常に簡単かつ強力にする:

  • データを失うことなくセル/行/列をマージします。
  • 複数のシートとブックを結合して統合する。
  • 範囲を比較し、複数の範囲をコピーし、テキストを日付、単位、通貨の変換に変換します。
  • 色数、ページング小計、高度なソートとスーパーフィルター、
  • 詳細選択/挿入/削除/テキスト/書式/リンク/コメント/ワークブック/ワークシートツール...

Kutools for Excelのスクリーンショット

Say something here...
symbols left.
You are guest ( Sign Up? )
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    Pradeep Sharma · 5 months ago
    The VBA code split the data perfectly but its split the whole data instead of unique value.
  • To post as a guest, your comment is unpublished.
    Jorge Portillo · 5 months ago
    The codes works perfectly, only trouble is that it does not separate columns when the text is too long, I have text with 40 characters and I get an empty "sheet2", every other text gets sorted.


    Any ideas on how to fix it? I've already tried changin variable and placed them as Long, however I am not sure I fully understand the program. all this for the VBA option.
  • To post as a guest, your comment is unpublished.
    Manish · 6 months ago
    I need a macro for following condition
    suppose i have customer excel file in which first 7 rows is for header so, from 8th row records are start
    i need to split rows of 500 record each in one file and save them with name customer1,customer2,customer3,........
    suppose i have customer file of 2540 records so it split in
    customer1 which have header rows with record starts from 8th row to 507th row
    customer2 which have header rows with record starts from 508th row to 1007th row
    customer3 which have header rows with record starts from 1008th row to 1507th row
    customer4 which have header rows with record starts from 1508th row to 2007th row
    customer5 which have header rows with record starts from 2008th row to 2507th row
    customer6 which have header rows with record starts from 2508th row to 2540th row
    • To post as a guest, your comment is unpublished.
      parabola hiperbola · 1 months ago
      hi. I have similar situation, I want to keep first 8 rows in every sheet created. did you find any solution to this?
      • To post as a guest, your comment is unpublished.
        skyyang · 1 months ago
        Hi, guys,
        If your worksheet data contains multiple header rows, the below VBA code can solve your prolem, please try it.

        Sub Parse_data_0213()
        Dim lr As Long
        Dim ws As Worksheet
        Dim vcol, i As Integer
        Dim icol As Long
        Dim myarr As Variant
        Dim title As String
        Dim titlerow As Integer
        Dim xTRg As Range
        Dim xVRg As Range
        Dim xWSTRg As Worksheet
        On Error Resume Next
        Set xTRg = Application.InputBox("Please select the header rows:", "Kutools for Excel", "", Type:=8)
        If TypeName(xTRg) = "Nothing" Then Exit Sub
        Set xVRg = Application.InputBox("Please select the column you want to split data based on:", "Kutools for Excel", "", Type:=8)
        If TypeName(xVRg) = "Nothing" Then Exit Sub
        vcol = xVRg.Column
        Set ws = xTRg.Worksheet
        lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
        title = xTRg.AddressLocal
        titlerow = xTRg.Cells(1).Row
        icol = ws.Columns.Count
        ws.Cells(1, icol) = "Unique"
        Application.DisplayAlerts = False
        If Not Evaluate("=ISREF('xTRgWs_Sheet!A1')") Then
        Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "xTRgWs_Sheet"
        Else
        Sheets("xTRgWs_Sheet").Delete
        Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "xTRgWs_Sheet"
        End If
        Set xWSTRg = Sheets("xTRgWs_Sheet")
        xTRg.Copy
        xWSTRg.Paste Destination:=xWSTRg.Range("A1")
        ws.Activate
        For i = (titlerow + xTRg.Rows.Count) To lr
        On Error Resume Next
        If ws.Cells(i, vcol) <> "" And Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
        ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
        End If
        Next
        myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
        ws.Columns(icol).Clear
        For i = 2 To UBound(myarr)
        ws.Range(title).AutoFilter field:=vcol, Criteria1:=myarr(i) & ""
        If Not Evaluate("=ISREF('" & myarr(i) & "'!A1)") Then
        Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
        Else
        Sheets(myarr(i) & "").Move after:=Worksheets(Worksheets.Count)
        End If
        xWSTRg.Range(title).Copy
        Sheets(myarr(i) & "").Paste Destination:=Sheets(myarr(i) & "").Range("A1")
        ws.Range("A" & (titlerow + xTRg.Rows.Count) & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").Range("A" & (titlerow + xTRg.Rows.Count))
        Sheets(myarr(i) & "").Columns.AutoFit
        Next
        xWSTRg.Delete
        ws.AutoFilterMode = False
        ws.Activate
        Application.DisplayAlerts = True
        End Sub

        Hope it can help you, thank you!
  • To post as a guest, your comment is unpublished.
    Dilusha · 6 months ago
    How can I get the Total of Column C for each sheets.?
  • To post as a guest, your comment is unpublished.
    Joshua · 7 months ago
    This is making new, labeled sheets for everything from my selected column, but it's not actually moving any of the associated data into the new sheets. What am I missing?
    • To post as a guest, your comment is unpublished.
      skyyang · 7 months ago
      Hello, Joshua,
      When applying the above code, you should change the references to your need, and this code is not applied correctly if your key column is date column, we will update a new code later.