• 締切済み

Excelファイルをマクロでファイルに分割したい

資産管理のため、次のような作業を行いたいのですが、 勉強が足りず困っております。 あまえた質問で申し訳ないのですが、どうぞお知恵を貸してください。 下のようなExcelファイル(約3000行15列のもの)を 場所 資産番号 資産の種類 使用者 購入日・・・ 本社 123456 AA 東京太郎 2001/4/4 大阪 123457 BB 大阪花子 2003/1/10 福岡 123458 AA 福岡一郎 2005/3/10 京都 123459 CC 京都次郎 2006/8/1        場所ごとに分割して「場所」名のファイルを作成したいと思い、 過去の記事を探して、ここへたどり着きました。 http://okwave.jp/qa/q4361389.html 早速、mitarashiさんのマクロを使用し、ファイルの分割はできたのですが、 3列目までしか記載されておらず(これは当然のことだと思うのですが) どこを変えればいいか、試行錯誤したのですがエラーになってしまいます。 残りの列の値も出力させるには、どうしたらよいでしょうか。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

私は、質問者が参考にしたいというコードはFSO(Googleで参照)を含んでいて、初心者には難しすぎるのではないかと思う。 其れでソート法を提案する。 XXXX..aブックのSheet3で 場所列でソートする。すると データ例 場所 資産番号 資産の種類 使用者 購入日 本社 123456 AA 東京太郎 2001/4/4 本社 123457 AA1 東京次朗 2001/4/5 本社 123458 AA2 東京三郎 2001/4/6 本社 123459 AA3 東京四郎 2001/4/7 本社 123460 AA4 東京五朗 2001/4/8 大阪 123457 BB 大阪花子 2003/1/10 大阪 123457 BB1 大阪菊子 2003/1/11 大阪 123457 BB2 大阪桃子 2003/1/12 大阪 123457 BB3 大阪華子 2003/1/13 大阪 123457 BB4 大阪梨子 2003/1/14 福岡 123458 AA 福岡一郎 2005/3/10 福岡 123458 AAC 福岡鳥郎 2005/3/11 福岡 123458 AAC 福岡川郎 2005/3/12 福岡 123458 AAC 福岡夏郎 2005/3/13 京都 123459 CC 京都次郎 2006/8/1 京都 123459 CC1 京都権二郎 2006/8/2 京都 123459 CC2 京都茂郎 2006/8/3 京都 123459 CC3 京都次郎 2006/8/4 コード 標準モジュールに Sub Macro3() Dim sh1 As Worksheet Dim sh2 As Worksheet Dim midasi Set sh1 = Workbooks("xxxx.xls").Worksheets("Sheet3") d = sh1.Range("a65536").End(xlUp).Row MsgBox d r = sh1.Range("IV2").End(xlToLeft).Column MsgBox r midasi = sh1.Range(sh1.Cells(1, "A"), Cells(1, r)) '--初期設定 mae = sh1.Cells(2, "A") '最初データ行の場所 hajime = 2 '第2行 basho = sh1.Cells(2, "A") '最初の場所 '--最終行までくり返し For i = 3 To d If sh1.Cells(i, "A") = mae Then '直前行と場所が変わったか Else owari = i - 1 '--- Workbooks.Add.Activate '新規ブックを開く Set sh2 = ActiveWorkbook.Worksheets("Sheet1") sh2.Range(sh2.Cells(1, "A"), sh2.Cells(1, r)) = midasi sh1.Range(sh1.Cells(hajime, 1), sh1.Cells(owari, r)).Copy sh2.Range("A2") MsgBox basho ActiveWorkbook.SaveAs basho & ".xls" ActiveWorkbook.Close '---初期設定入れ替え mae = sh1.Cells(i, "A") hajime = i basho = sh1.Cells(i, "A") End If Next i '--最後の場所の処理 owari = i - 1 Workbooks.Add.Activate '新規ブックを開く Set sh2 = ActiveWorkbook.Worksheets("Sheet1") sh2.Range(sh2.Cells(1, "A"), sh2.Cells(1, r)) = midasi sh1.Range(sh1.Cells(hajime, 1), sh1.Cells(owari, r)).Copy ActiveWorkbook.Worksheets("sheet1").Range("A2") MsgBox basho ActiveWorkbook.SaveAs basho & ".xls" ActiveWorkbook.Close End Sub 結果 例えば「京都.xls」ブックのSheet1は 場所 資産番号 資産の種類 使用者 購入日 京都 123459 CC 京都次郎 2006/8/1 京都 123459 CC1 京都権二郎 2006/8/2 京都 123459 CC2 京都茂郎 2006/8/3 京都 123459 CC3 京都次郎 2006/8/

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

書いた方を差し置いて書くのは僭越ですが、mitarashiさんの書いたコードを尊重すると、 col = sourceRange.Columns.Count '※ と、列を取れば、自動的に取れますが、定数で、列数を入れても以下のようにしても可能です。 col = 5 VBAとして、ベテランの人のコードだと思います。(こういう言い方は、返って失礼かもしれませんが。) '// Sub testR()   Dim sourceRange As Range   Dim targetRange As Range   Dim fieldNameRange As Range   Dim myDic As Object   Dim i As Long, j As Long   Dim myKey As Variant   Dim col As Long '※   Set sourceRange = ActiveSheet.Range("A1").CurrentRegion   Set fieldNameRange = sourceRange.Rows(1)   col = sourceRange.Columns.Count '※      Set sourceRange = sourceRange.Offset(1, 0).Resize(sourceRange.Rows.Count - 1, col) ''※   Set myDic = CreateObject("Scripting.Dictionary")   For i = 1 To sourceRange.Rows.Count     Set targetRange = sourceRange.Cells(i, 1)     With targetRange       If Not myDic.exists(.Value) Then         myDic.Add .Value, targetRange.Resize(1, col) '※       Else         Set myDic.Item(.Value) = Union(myDic.Item(.Value), targetRange.Resize(1, col)) '※       End If     End With   Next i '--省略---

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

A1セルに「場所」と書いてあってA2(2行目)以下から実データが並んでいるとして。 たとえばこんな具合に。 Sub sample()  Dim s0 As Worksheet  Dim h  Worksheets("元になるリストのシート名").Copy before:=Worksheets(1)  Set s0 = Worksheets(1)  Do Until Application.CountA(s0.Range("A:A")) < 2   h = s0.Range("A2").Value   s0.Range("A1").AutoFilter field:=1, Criteria1:=h   With Worksheets.Add    s0.AutoFilter.Range.Copy Destination:=.Range("A1")    .Name = h    .Move    ActiveWorkbook.SaveAs Filename:="C:\保存先フォルダ名\" & h & ".xls"    ActiveWorkbook.Close False    s0.AutoFilter.Range.Offset(1).Delete shift:=xlShiftUp   End With  Loop  Application.DisplayAlerts = False  s0.Delete End Sub

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • マクロかエクセル関数教えて下さい。

    エクセルマクロ及び関数式で教えていただけないでしょうか?       月  火  水  木  金 太郎   ○ 花子         ○ 一郎      ○ 次郎             ○ 三郎          ○ 担当者名 太郎 一郎 三郎 花子 次郎 このように、丸が入ると担当欄のセルに「担当者名:月は太郎、火は一郎‥」を自動表示させたい。 1.そのセルに関数式 2.マクロ(サンプル) を、ご教授してくださる方が、おられましたら宜しくお願い致します。 これでご覧になれますでしょうか? ↓ http://firestorage.jp/download/37abd45beb74cb129a16bd3a92042647c013... 宜しくお願い致します。

  • 連れ子の相続権について

    ・花子さんと太郎さんの間に一郎君(子供)がいました。 ・花子さんは太郎さんと離婚し、花子さんが一郎君の親権者となりました。 ・花子さんは次郎さんと再婚し、一郎君は次郎さんの扶養(養子?)となりました。 この場合、太郎さんが死んだとき、一郎君に太郎さんの相続をする権利はあるのでしょうか。 一般的な話として教えていただけたらと思います。

  • 【エクセル】領域上端のセル情報を返す方法

    1行目のA列からI列まで順に、「日付 太郎 一郎 次郎 花子 1位 2位 3位 4位」 2行目のA列からE列まで「1/5 1 2 3 4」 3行目以下同様に「1/6 2 1 4 3」 4行目「1/7 4 2 3 1」・・・・・ (数字は順位です) 上記のように、その日のランキングを入力(別の領域からRANK関数で返しています)しており、その横のF~Iの列に1行目にある人の名前を返したいのですが、良い方法は あるでしょうか。 例えば1/6であれば、 F3:一郎 G3:太郎 H3:花子 I3:次郎 という答えが出て欲しいのですが。 できれば関数で処理したいのですが、宜しくお願いいたします。

  • Excelで集計の方法

    A列に名前が入っています。 B列に数字(個数)が入っています。 A列にある名前は重複しています。(同じ名前が何回も出現します。) このA列にあるリストを同じシートのD列に表示し、更にE列に名前ごとの合計を出したいのですが、どうすればよいでしょうか? つまり A列   B列 太郎   50 一郎   20 花子   30 太郎   40 花子   50 一郎   50 太郎   20 これを 太郎=110 一郎=70 花子=80 としたいのです。 よろしくお願いします。

  • エクセル関数について

    エクセル関数の質問です。 AA列にAからEまでの文字がランダムに重複して20行入っています。 AC列に人名が20人分重複しないで入っています。 AA列のたとえばBに対応するAC列の人名を1つのセルに連続して取り出すにはどのような関数を使用すればよいですか? たとえば ”太郎、花子、次郎、・・・”のように、 LOOKUP関数では1つの文字列しか取り出せません。 教えてください。

  • perlでファイルを読み込んだ順で重複行チェック

    perl初心者です。 ファイルを読み込んで重複行について以下の処理をおこないたいです。 ハッシュを使えば比較的苦労しないでできそうなのですが、 ファイルを読み込んだ順に出力をしたいので悩んでいます。 アドバイスをお願いします。 やりたいこと。 ・タブ区切りのファイルを読み込む ・ファイルの出力順は入力ファイルの上から順とし、並び替えを変えたくない。 ・重複行だけのファイルと重複していないファイルを作りたい。←パターン1,パターン2 例) 以下の入力ファイル(タブ区切り)についてidをキーに重複行チェック 入力ファイル id name age 1 質問一郎 20 2 質問和美 30 3 質問次郎 40 1 回答花子 50 3 回答太郎 22 ・パタン1の出力 重複ファイル 1 質問一郎 20 1 回答花子 50 3 質問次郎 40 3 回答太郎 22 ユニークファイル 2 質問和美 30 --------------------- ・パタン2の出力 ※ 重複ファイル 1 質問一郎 20 1 回答花子 50 3 質問次郎 40 3 回答太郎 22 ユニークファイル 1 質問一郎 20 2 質問和美 30 3 質問次郎 40 パターン2の場合、ユニークファイルには最初に読み込んだ重複ファイル1行分も出力させる。

  • エクセルの問題の解き方を教えてください。

    回答2がわかりません↓ 手違いがあり、次の一覧にはデータの重複が発生してしまいました。 効率的に重複データを削除する手順を記述してください。 回答1) 関数を使用し作業した結果で削除する方法 回答2) その他の方法で削除する方法 社員コード 社員名 回答欄 222222 桐生 太郎 444444 前橋 一郎 999999 高崎 花子 555555 伊勢崎 次郎 111111 富岡 一平 777777 藤岡 愛子 666666 太田 明 333333 安中 春子 888888 館林 夏江 555555 伊勢崎 次郎 333333 安中 春子 444444 前橋 一郎 999999 高崎 花子 111111 富岡 一平 333333 安中 春子 444444 前橋 一郎 555555 伊勢崎 次郎 888888 館林 夏江 999999 高崎 花子 666666 太田 明美 777777 藤岡 愛子 999999 高崎 花子 555555 伊勢崎 次郎 333333 安中 春子 444444 前橋 一郎 111111 富岡 一平 666666 太田 明美 333333 安中 春子 888888 館林 夏江 555555 伊勢崎 次郎 333333 安中 春子 444444 前橋 一郎 999999 高崎 花子 111111 富岡 一平 333333 安中 春子 444444 前橋 一郎 555555 伊勢崎 次郎 444444 前橋 一郎 999999 高崎 花子 111111 富岡 一平 333333 安中 春子 444444 前橋 一郎 999999 高崎 花子 555555 伊勢崎 次郎 111111 富岡 一平 777777 藤岡 愛子 666666 太田 明美 333333 安中 春子 555555 伊勢崎 次郎 888888 館林 夏江

  • Excelで作る出席簿での 条件付け

    excelで,出席簿をつけているのですが、毎回最新10件のみで 出席率を自動更新して行きたいのですが、出来るのでしょうか? もしよろしければ教えてください 花子 %|〇〇○○〇〇×〇 太郎 %|××××〇〇×〇 一郎 %|○○○○○○○○ 次郎 %|××××××〇×

  • エクセルの集計での質問

    A列に日付、BからF列に担当者名(1~5)が入っています。 この表で誰が何日稼働したか調べたいのですが、日付の被りがあるのと、例えば▲▲さんが「担当者1」、●●さんが「担当者2」と決まっているわけでなく、早いもの順に「担当者1~5」までに名前が入っています。 A B C D E F 日 担1 担2 担3 担4 担5 1/3 太郎 次郎 花子 三郎 和子 1/3 次郎 太郎 三郎 美和 和子 1/4 花子 次郎 孝夫.......... この場合求められたものが 1/3 太郎 ×1、次郎 ×1、三郎×1、花子×1、和子×1 、美和×1 1/4 花子×1、次郎×1、孝夫×1 なので 太郎1日 次郎2日 三郎1日 花子2日 和子、美和、孝夫各1日 という風にエクセルで集計できないでしょうか?

  • Excelのセル内容の分割について

    以下のようにセルA1では家族の名前が”・”で区切られて入力してあり、セルB1ではそれに伴う”備考”が記入してあります。 A1                                      | B1 山田太郎・花子・次郎・三郎    | 備考文書 以上のような形式を一括で以下のように行を挿入し分割したいと考えています。 *備考は全てB1をコピーしたい。 山田太郎                             | 備考文書 山田花子                             | 備考文書 山田次郎                             | 備考文書 山田三郎                             | 備考文書 分かり難い説明で申し訳ありませんが宜しく御願い致します。

専門家に質問してみよう