• ベストアンサー

エクセルファイルを取引先ごとに分割

1つのエクセルファイルにすべての取引先の情報が入っているファイルが存在するのですが、そのファイルを取引先ごとに自動で分割したいと思っています。 データの並びは以下のようなものです。 A列  B列  C列 取引先名 取引内容 金額 取引先1  ○○○  1000 取引先1  ○○○  1000 取引先2  ○○○  1000 取引先2  ○○○  1000 ネットでいろいろ検索し下記までは見つけて実施してみたのですが、このままですと分割したファイルに表題(各列の1行目の部分)をつけることができません。 http://soudan1.biglobe.ne.jp/qa4088700.html 分割したファイルのすべてに表題をつけたいと思い上記の内容を変更してやってみましたが今の自分の力ではうまくいきません。 申し訳ありませんが、表題部をつけてファイルを分割する方法をアドバイスいただけないでしょうか 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

元の質問の回答者です。ご質問の様にソーティングされたデータであれば、もっと分かりやすい、VBAの基本的な機能でのコード作成が可能だと思いますが、それは他の回答者にお任せします。 とりあえず、以前回答したコードを、見出し行を全ファイルに入れる様、改造したコードを呈示いたします。 Sub test() 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 Set sourceRange = ActiveSheet.Range("A1").CurrentRegion Set fieldNameRange = sourceRange.Rows(1) Set sourceRange = sourceRange.Offset(1, 0).Resize(sourceRange.Rows.Count - 1, sourceRange.Columns.Count) 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, 3) Else Set myDic.Item(.Value) = Union(myDic.Item(.Value), targetRange.Resize(1, 3)) End If End With Next i myKey = myDic.keys For i = 0 To myDic.Count - 1 Call saveToText(myDic.Item(myKey(i)), fieldNameRange) Next i Set myDic = Nothing End Sub Private Sub saveToText(targetRange As Range, fieldNameRange As Range) Dim fso As Object Dim filePath As String Dim i As Long Dim oneLine As String Dim area As Range filePath = ThisWorkbook.Path & "\" & targetRange.Cells(1).Value & ".txt" Set fso = CreateObject("Scripting.FileSystemObject") With fso.CreateTextFile(filePath) .writeline myJoin(fieldNameRange) For Each area In targetRange.Areas For i = 1 To area.Rows.Count .writeline myJoin(area.Rows(i)) Next i Next area .Close End With Set fso = Nothing End Sub Private Function myJoin(target As Range) As String Dim i As Long Dim buf() As Variant ReDim buf(1 To target.Cells.Count) For i = 1 To target.Cells.Count buf(i) = target.Cells(i).Value Next i myJoin = Join(buf, vbTab) End Function

keny1967
質問者

お礼

回答ありがとうございます。 回答いただいた内容で問題なくできました。 本当にありがとうございました。

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

その他の回答 (1)

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

丸投げの質問だが、一応コードの一例を書いておく。 ーー 例データ 取引先名 取引内容 金額 取引先1 ○○○ 1000 取引先1 ○○○ 2000 取引先2 ○○○ 3000 取引先2 ○○○ 4000 取引先2 ○○○ 5000 取引先3 ○○○ 6000 取引先3 ○○○ 7000 取引先5 ○○○ 8000 取引先6 ○○○ 9000 取引先6 ○○○ 10000 ーー 取引先が変わったら1シート追加し、順次下行に貼り付ける。 ーーー コード Sub test01() d = Worksheets("Sheet1").Range("A65536").End(xlUp).Row MsgBox d m = Worksheets("Sheet1").Cells(2, "A") sn = Worksheets.Add.Index Sheets(sn).Name = m Sheets(sn).Range("A1:C1") = Array("取引先名", "取引内容", "金額") K = 2 'コピー先の行番号 '-- For i = 2 To d '元シートデータで2行目以下繰り返し If Worksheets("Sheet1").Cells(i, "A") = m Then '元シートで1行前と取引先が同じなら Worksheets("Sheet1").Range("A" & i & ":J" & i).Copy Worksheets(sn).Cells(K, "A") K = K + 1 '次回貼り付け先を1行下へ Else sn = Worksheets.Add.Index 'シートを増やし、インデックス番号取得 Sheets(sn).Range("A1:C1") = Array("取引先名", "取引内容", "金額") '見出しを第1行に K = 2 '第2行目に下記で貼り付け Worksheets("Sheet1").Range("A" & i & ":J" & i).Copy Worksheets(sn).Cells(K, "A") K = K + 1 m = Worksheets("Sheet1").Cells(i, "A") '直前取引先を今の取引先にする Sheets(sn).Name = m End If Next i End Sub 上記例でテスト済み。 ーーー 実際では、変更箇所 Sheet1 Range("A" & i & ":J" & i)のJ->上記はデータがJ列まで、の意味です。テストデータは3列しかないが、多めにしたもの。 Array("取引先名", ・・->実際の項目名で、実際の数だけ、””で囲って追加 Sheets(sn).Range("A1:C1") も項目数にあわせて変える。 ーー スキルを要する2、3のことを使っている。この処理ロジックも含め、質問者には難しいかもしれないが、当面鵜呑みしかない。

keny1967
質問者

お礼

親切に回答いただきましてありがとうございます。 この方法でやってみましたが、取引先ごとにシートを追加するのではなく、取引先ごとにファイルを作成したいのです。 他の方法を教えいただき無事解決することができましたが、いろいろなやり方があることがわかり大変勉強になりました。

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

関連するQ&A

  • とても大きなCSVファイルをEXCELで見たい。

    今、手元にとても大きなサイズのCSVファイルがあります。 そのファイルは、行は1800行なのですが、列は256行以上あり何列あるかわかりません。 EXECL2000で開くと全ては開けなかったと表示されてしまいます。 なんとか、EXCELでこのファイルを見ることはできないでしょうか? または、CSVファイルの列を分割できるようなソフトを ご存知ないでしょうか? よろしくお願いします。

  • 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列目までしか記載されておらず(これは当然のことだと思うのですが) どこを変えればいいか、試行錯誤したのですがエラーになってしまいます。 残りの列の値も出力させるには、どうしたらよいでしょうか。

  • 取引先名による金額の自動配分方法

    ウィンドウズXPでマイクロソフトトエクセル2003を使用して「切手受払帳」を作成したいと思っています。Sheet1を切手受払帳に、Sheet2を取引先一覧にSheet名を変更しています。Sheet1を切手受払帳のA1に取引先名、B1に切手使用額、C1に総務、D1に営業、E1に資材と表題を入力しています。Sheet2の取引先一覧にはA列に取引先名を約千件入力しています。B列にはフリガナを半角カタカナで入力し、C列には頭文字を半角カタカナで入力、D列には取引先名に対応した部署名を入力しています。○○工業は総務と登録しています。取引先一覧の取引先名(D列)を元に、切手受払帳A2に取引先名を○○工業と入力し、B2に260と切手使用額を入力すると、C2に260と自動的に金額が表示される。A列に入力した取引先名でB列の切手使用額をC列~E列の部署ごとの列に自動配分する関数の組合せをおしえてください。

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

    お世話になります。 エクセルで、あるシートに任意の行数のファイルがあります。 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…というようにしたいです。 このような処理を自動化するマクロができれば教えてください。

  • エクセル関数。何種類あるか知りたい。

    よろしくお願いします。 A列に重複する取引先の名前が並んでいるとします。 このデータからB列に取引先名が重複しないようにしたいのですが いい方法はありますか? 取引先が何社あるかすぐにわかるような方法ありますか。

  • テキストファイルを1行ずつ別のファイルに分割する

    400行ぐらいのテキストファイルを、1行ずつ別のファイルに分割したいと思います。 ファイル名は**001.txtのように、(**は任意の文字列、数字は連番)なってくれれば嬉しいです。 どなたかこのような処理のできる簡単な方法をご存じないでしょうか? よろしくお願いします。

  • 集計したファイルを分割したい

    あるエクセルファイルに集計を加え、集計した結果をファイル内のある列の値で別ファイルに分割したい場合どの様なvbeを書けばよろしいでしょうか? サンプルファイルでいいますと、集計はN列の伝票番号を基準にL列:原価計 M列:売価計をそれぞれ合計額を集計し、その集計結果を元にG列:店舗の値(1~15)でファイルを分割保存する事が目的です。 ちなみに行数は毎回変わります。(1500行前後になります。) 毎月月末にこの作業をしますが、非常に限られた時間でスピーディに完了しなくてはならず手作業ですとミスが起こり困っております。 どなたかご教示願います。

  • Xxx分割ファイル

    1.分割ファイルを全部同じディレクトリに置きます。  ダウンロード先のサイトから必要な分割ファイルを全てダウンロードされましたか。全てダウンロードしなければ結合はできません。  ダウンロードされていたら全て同じフォルダに入れて下さい。 どういう風に入れるのかわからなくなりました。 すみません、教えてください。

  • ファイルを分割する。

    ひとつのファイルを3つのファイルに分けて保存するプログラムを作りたいと思います。 ファイル名 test.txt 内容 あああ いいい ううう かかか ききき くくく さささ ししし すすす というファイルを指定した行数ごとに違う名前で保存できるようにしたいのです。 SEEKとかでは指定した行では分けれないし、foreachではすべての行になってしまいます。 ファイル名 1.txt あああ いいい ううう ファイル名 2.txt かかか ききき くくく という感じで分けたいと思います。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 企業で取引先に重要なファイルを送付する方法

    こんにちは。企業間でファイルの授受方法で悩んでいます。 ファイルの授受する時は、ファイルをZIP圧縮してパスワードをつけて相手に送っています。取引先も同じようにZIPにパスワードをつけて送ってきます。 知り合いの会社はGnuPG(GPG)を自社、取引先にインストールしてもらい公開暗号方式でデータの授受をおこなっています。 この方法は魅力的に感じたのですが、復数取引先があったら、その分の鍵を作って相手に送らないといけないし、取引先がGPGについて理解するのも大変かなと思ってちょっと全ての取引先にいれてもらうのは難しいと思っています。 他にどのようなソリューションがあるのかお教え頂けたらありがたいです。よろしくお願いいたします。

専門家に質問してみよう