• ベストアンサー

エクセル_行で分割する方法

K Kazz(@JazzCorp)の回答

回答No.2

'マスタファイルを、指定された行数で分割して複数のファイル(ブック)にする '結果はマクロブックと同じフォルダに出る 'マクロブックは、マスタファイルと同じフォルダに入れる 'マクロブックに指示書(ブック名とシート名の対応)を書いて、アクティブシートにして実行 '1行目にマスタの情報(A1:ブック名:拡張子も必要、B1:シート名) '2行目以降に分割後のファイルの情報(ブック名とシート名のセット) '環境に依存するところは適当に変更する Option Explicit Sub DivideRobo() Const xUnits = 4000 '分割行数 Const xHeads = 1 '見出しの行数 Dim xSheet As Worksheet Dim xRange As Range Dim xPath As String Dim xPath_M As String Dim xMaster As String Dim xNames() As String Dim xName As String Dim xLast As Long Dim xLast_M As Long Dim kk As Long Dim mm As Long Dim nn As Long On Error Resume Next Debug.Print vbNewLine & Now & " :Here We 50!" ' Application.ScreenUpdating = False Application.DisplayAlerts = False 'マクロを実行したときのシートにブック名とシート名の対応が設定されている Set xSheet = ThisWorkbook.ActiveSheet xName = xSheet.Name xLast = xSheet.Cells(Rows.Count, "A").End(xlUp).Row ReDim xNames(xLast + 1) xMaster = xSheet.Range("B1").Value Worksheets(xMaster).Delete xPath = (ThisWorkbook.Path & "\") ChDir xPath 'マスタの存在を確認 xPath_M = (xPath & xSheet.Range("A1").Value) If (Dir(xPath_M, vbNormal) <> Empty) Then With Workbooks.Open(xPath_M) 'マスタをマクロブックにコピー Debug.Print xMaster .Worksheets(xMaster).Copy After:=ThisWorkbook.Worksheets(xName) 'マスタよ!サヨウナラ、、、 .Close (False) End With 'アクティブシートは、コピーしたマスタ Set xSheet = ThisWorkbook.Worksheets(xName) ' ThisWorkbook.Worksheets(xSheet.index+1).Activate xLast_M = Cells(Rows.Count, "A").End(xlUp).Row Debug.Print xLast_M nn = 1 For kk = 2 To xLast If Not IsEmpty(xSheet.Cells(kk, "A")) Then Debug.Print nn If (nn < xLast_M) Then xNames(kk) = xSheet.Cells(kk, "B").Value Debug.Print xNames(kk) Worksheets(xNames(kk)).Delete Worksheets.Add After:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).Name = xNames(kk) With Worksheets(xMaster) Application.CutCopyMode = False .Rows(1 & ":" & xHeads).Copy Cells(1, "A").PasteSpecial Paste:=xlPasteAll ' mm = xUnits * (kk - 2) + xHeads + 1 mm = nn + 1 nn = mm + xUnits - 1 If (nn > xLast_M) Then nn = xLast_M End If Application.CutCopyMode = False Debug.Print mm & ":" & nn .Rows(mm & ":" & nn).Copy With Cells(Cells(Rows.Count, "A").End(xlUp).Row + 1, "A") ' .PasteSpecial xlPasteValuesAndNumberFormats 'Excel2000はコォ~なっちゃう、、、 .PasteSpecial xlPasteFormats .PasteSpecial xlPasteValues End With '引数を省略すると新規ブックが自動的に開いてシートがコピーされ、新規ブックがアクティブになる Worksheets(xNames(kk)).Move '保存して閉じる xNames(kk) = xSheet.Cells(kk, "A").Value Debug.Print xNames(kk) ActiveWorkbook.SaveAs (xPath & xNames(kk)) ActiveWorkbook.Close (False) End With End If End If Next Else MsgBox "File not found !!" End If ThisWorkbook.Worksheets(xName).Select Application.CutCopyMode = False Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub

noname#183561
質問者

お礼

ありがとうございます。 エクセルも関数もマクロも全く分からず… 勉強しながらやってみます。

関連するQ&A

  • 80万行あるテキスト文書を正しく分割する方法

    80万行以上あるテクストを、Excelで読み込めるよう いくつかのフリーソフトを使って行数で分割しましたが なんと、分割したファイル各々の件数をカウントすると 元の件数と一致しませんでした・・・ ベストなのは、ツールで読み込めば自動的に分割して excelに随時読み込んでくれることですが、そんな そふとはあるでしょうか? また、行数ごとの分割が正しくできるソフトや方法はないですか> マクロのサンプルはどこかで見た気がするのですが、 マクロが全く使えず、困った記憶があります。 (もしそのマクロをご存知でしたらどうすればいいか  丁寧に教えていただけると嬉しいのですが・・・)

  • エクセル:シートの分割

    お世話になります。 エクセルで、あるシートに任意の行数のファイルがあります。 1~6行目はタイトル行扱いで、7行目からがデータ部分になります。 この7行目からはじまるデータ部分を25行分ずつシート単位で分割したいのです。 1つ目のシートが分割前の本データとすると、2つ目のシートには1~6行目と7~31行目、2つ目のシートは1~6行目と32~56行目… というように。 必ず各シートの先頭は1~6行目部分になります。 1つ目のシートが分割前のシートで、2つ目以降に25行分ごとに分割されたシートがどんどん追加されていくイメージです。A列には必ずデータが入っているので、A列にデータが入っている最終行までが処理の対象になります。 追加するシート名は、分割1、分割2…というようにしたいです。 このような処理を自動化するマクロができれば教えてください。

  • 2つのエクセルから同じデータを持つ行を出力する方法

    エクセルで作成した二つのDBがあります。それぞれ、列・行の数は異なるのですが、同じ名称の列(例えば郵便番号)を持っています。 この二つのファイルから、同じ列に同じ情報をもった行を取りだす、ということをしたいのですが、関数やマクロでの実現できる方法がございましたら、教えて頂けないでしょうか。 例:二つの住所録のようなファイルAとファイルBがあって、郵便番号が154-0001のデータ(行)を、別のファイルCに出力する。(また、ファイルC上では、各データがファイルAとファイルBのどちらから出力されたものかも、判別が付くように出力したい) 分かりにくいケースで大変恐縮ですが、ご存じの方がおりましたら、どうぞよろしくお願いいたします。 ※エクセル2003を使用しています。

  • エクセル。複数行あるセルの分割はできますか?

    こんにちは。 教えてください! たとえば、B1のセルに次のように3行でデータが入力されていたとします。 B1「日本   アメリカ   イギリス」 これをそれぞれ分割して次のようにできる関数はありますか? B1「日本」 B2「アメリカ」 B3「イギリス」 それが簡単にできると仕事がスムーズになるので助かります。 もし次のことも解決できる方法があれば教えてもらえませんか? A1「8月30日」 B1「日本、アメリカ、イギリス(3行で入ってます) C1「出発」 というようなデータがあって、B1をそれぞれの国で分割して、A1とC1のデータをアメリカが入っている行、イギリスが入っている行に自動的にコピーされる。 これは関数ではなくて、マクロになるのかな?とも思うのですが、「分割が行われた行までコピー」というやり方がさっぱりわからないでいます。(その前に分割する方法が分からないんですけど・・・) ちなみに、データがずらーっと並んでいるリストの一部にあるB1のようなデータを整理したいというのが、目的になります。 どうぞ宜しくお願い致します。

  • エクセルで数字とアルファベットと文字列を分割する方法

    こんばんは。 エクセルのセルで数字とアルファベットの文字列を分割する方法を教えて下さい。 100AB3.4C → "100" "AB" "3.4" "C" 間にスペースやカンマなど無く、文字数は異なります。 数字は小数点がある場合と無い場合があります。(上記の "100" "3.4" のように) 同じ列に同様のデータが数件~数千件あり、まとめて分割したいです。 関数もしくはマクロ(VBA)で可能であれば教えて下さい。 最近マクロの勉強を初めたのですが、方法が思いつきません。。。 宜しくお願いします。

  • エクセルの行を65536以上に増やす方法はないでしょうか

    エクセルの行は65536までしかありません。マクロで組んだ業務ソフトを使っていますが、処理データが多くなると最終行まで使ってしまって、エラーで止まってしまいます。行数を2~3倍に増やす方法はないでしょうか。

  • 住所の分割方法

    顧客データで、住所フィールドが1,2,3とあり、本来であれば、 1・・・都道府県 2・・・市区町村から番地 3・・・マンション、アパート名 としなければいけないのですが、郵便番号辞典から入力したため、住所2のフィールドに1と2がくっついて入力されています。 これを都道府県で切って、都道府県名を住所1のフィールドに、市区町村から番地までを住所2のフィールドに分割したいのですが、関数もしくはマクロがあれば教えてください。 住所1には、「東京都」などの「都」に相当する都道府県名まで入れたいのですが。 (データが5000件くらいあります)

  • エクセルで文字列をスペースで列に分割

    エクセルマクロ超初心者です。 住所録を作成しているのですが、既存データの形式が、G列に郵便番号と住所がスペースを挟んで同一セルに入っています。 コレを、何かボタンを押したら郵便番号と住所を別々の列に分割するようなマクロを教えて頂きたいのですが。色々本で調べているのですが思うように進みません。 教えていただけると非常に助かります。

  • excelでシート:何行あるのか

    excelでシート内行数が数千のデータを扱うとき、ぱっと何行あるのか、 或いはぱっと最終行に移動できるとかどちらでもいいが、そのような方法あれば教えて。 マクロを使っても、式を使っても可です。

  • 40万行のデータをEXCELで読み込みは?

     ある時間間隔で電圧値をサンプルした約40万行のテキストデータがあるのですが、EXCELでは約6万データしか読み込めないようです。これら全データを読み込む方法はあるのでしょうか。  またはデータ数をはしょって読み込む(マクロを使う?)ことはできるのでしょうか。  データをWORDで読み込み、分割して保存しEXCELに取り込むことはできるのですが、非常に手間です。何か良い方法ご存知の方いらっしゃいましたらお願いします(こちらで聞くべき内容ではないかもしれませんが…)。