[[20080522180917]] 『マクロ:種別毎に各シートへ転記(振り分け)した』(はと) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロ:種別毎に各シートへ転記(振り分け)したい』(はと)

 以下の様な表があります。

 シート名:ALL
    A     BCD       E     F       GH    IJ      K         L     M(←使用セル列)
   1 件数 登録番号 種別 サイズ 価格 業者名 業者番号 担当 期日
   2                  TEL・FAX
    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
   3  1  E1000   A   M  10万 東京社  7234   ○  5/5
   4                  000・001
    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
   5  2  X2001   B   S  10万 大阪社  2151   △  5/5
   6                  200・201
    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
   7  3  L1005   C   M  20万 京都社  3407   ○  5/6
   8                  300・301
    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
   9  4  F3001   A   M  15万 福岡社  8169   ×  5/6
  10                  400・401
    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
 (↑使用セル行:結合して二行で一つになってます。)

 この表を、

 シート名:A
    A     BCD       E     F       GH    IJ      K         L     M
   1 件数 登録番号 種別 サイズ 価格 業者名 業者番号 担当 期日
   2                  TEL・FAX
    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
   3  1  E1000   A   M  10万 東京社  7234   ○  5/5
   4                  000・001
    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
   5  2  F3001   A   M  15万 福岡社  8169   ×  5/6
   6                  400・401
    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

 シート名:B
    A     BCD       E     F       GH    IJ      K         L     M
   1 件数 登録番号 種別 サイズ 価格 業者名 業者番号 担当 期日
   2                  TEL・FAX
    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
   3  1  X2001   B   S  10万 大阪社  2151   △  5/5
   4                  200・201
    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

 シート名:C
    A     BCD       E     F       GH    IJ      K         L     M
   1 件数 登録番号 種別 サイズ 価格 業者名 業者番号 担当 期日
   2                  TEL・FAX
    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
   3  1  L1005   C   M  20万 京都社  3407   ○  5/6
   4                  300・301
    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

 という様に、種別がAならAシート、BならBシートへ行全体が転記(振り分け)されるよう設定したいのです。
 ALLシートに入力する度に、各シートへ自動的に転記させる方法はないでしょうか?
 それに合わせ、件数については各シート毎に1行目は1、次は2、という様に自動更新できるよう設定できませんでしょうか?
 過去スレから色々と検索したものの、マクロに全く触れた事がなく理解に至りませんでした。
 マクロ(VBA?)というものにお詳しい方、どうかよろしくお願い致します。

 [エクセルのバージョン]Excel2000[OSのバージョン]WindowsXP

 回答ではありまへんが、こういったセルの結合はマクロを組むのにとても面倒になりま
 す。
 一見簡単そうなマクロでも取り組んでみようと思われる御方は私も含めてそう居てない
 と思いまっせぇ。
 まぁ、もちょっと気長にお待ち下され。
       (弥太郎)

 こんにちは、だるまです。
http://hp.vector.co.jp/authors/VA033788/index.html

 私も回答ではありませんが、ちょっと気になったので。
 結合セルについては弥太郎さんのおしゃるとおりですが、もうひとつ、

 >入力する度に、各シートへ自動的に転記させる
 という仕様についてです。

 いつどの時点で入力完了と判断するのかということと、もし入力を間違えた時はどうするのかという
 こと、がこれまた面倒だと思いますので、仕様を見直された方が良いような気がします。

 さらに、同じデータを複数の場所で管理すると言う仕様もトラブルの元です。

 (余計なお世話ならごめんなさい。^d^)


 弥太郎さん、だるまさん、ご回答ありがとうございます!
 やはりセルが結合されていると難しいのですね。
 解らないなりに、過去ログを拝見してその事がネックそうだと感じていました。

 結局セル結合を外して一行横並びにし、「一日の入力・修正等が完了したら、その都度マクロの実行で各シートへ振り分ける」という仕様にする事になりました。
  ■二行で作成していたのは、印刷(それを閲覧する際)の都合でしたが、そこは諦めました。
  ■結局一行にするなら、フィルターで十分なんじゃないかって感じです・沈

 もし今後、セルが結合されたままでもこの様な作業ができるマクロができましたら、是非教えて下さい!
 ご親切にどうもありがとうございました!


 この問題は、家計簿の応用で出来るのではないでしょうか?
 市販の家計簿は、前準備がいろいろあって面倒ですから、Excelで
 作成して使っていますが、大変便利です。
 10日ほど前に質問のあった
[[20080510170157]]『新規顧客表の作成方法』(るるるさん)も同様な内容になるかと思います。
 第1シートを入力表にし、1データのみ入力します、第2シートが集計表で
 月のデータが全部入ります。(はとさんのallシートになります)
 第3シートから科目別のシートになります。(はとさんの種別シート)
 第1シートに1データ入力したら、マクロ(転記というボタンをクリック)で
 集計表(allシート)と科目別シート(種別のシート)へ同時に転送します。
 この時、書式も転送するようにすれば、セルの結合があっても問題ないと
 思います。まず無いと思いますが、心配であれば別シートに表のスタイル
 だけ作成しておき、マクロで転送する時に表のスタイルも同時に転送するように
 マクロを組み込めば良いと思います。
 作りたい表をもう少し詳細に書いていただければ、たたき台のマクロを
 作成してみますが
 なお、登録番号、業者番号のところでセルの結合がありますが、なぜでしょうか、
 セル幅を広げるだけでダメでしょうか、必要のないセルの結合はやらないほうが
 良いと思います。業者名のところも、TELとFAXを2列にしてはと考えます。 
 入力ミスを極力避けるには、マクロボタンで転送する時に入力ミスが無いか
 問い合わせのメッセッジがでるようすこともできます。(ミスがあれば修正)
 また、マクロでallシートと種別シートに同時に転送しますから、両シートの
 内容が違うことはありえません。
 慣れてきたら、第1シートをユーザーフォームにすれば、更に便利になります。
 わたしは、マクロの初心者ですが、難しいことになってもこの学校にはたくさんの
 指導者が見えますから、だいじょうぶです。(あまちゃん)


 過去に回答したものですが、今回の質問の参考になるでしょうか。
 ついでに、これまでも何度か同じような質問があったので、汎用性を持たせるように
 コードを修正してみました。
 同じような案件には、Const 部分を書き換えるだけでできるようにしたつもりです。
[[20050721182519]] 『一つのシートから各個人ごとに分割したシートを作る』

 今回の件では、E列には種別のみ、データは常に2行、I列は空欄がない、という条件で
 動作するかと思います。

 ちなみに、結果は毎回新規ブックとして作成されます。

 Option Explicit

 Const tmpSheetName = "TMP"      '--- 作業用テンプレートシート名

 Const masterSheetName = "ALL"   '--- 元データシート名
 Const checkRow = "E"            '--- 元データの分割判定を行う列
 Const checkLastRow = "I"        '--- 各シートの最終列を判定する列
 Const rowUnitSize = 2           '--- コピー行単位
 Const dataStartLine = 3         '---  各シートのデータ開始行(ヘッダ行+1)

 '---------------------------------
 Sub Grouping()
 '---------------------------------
    Dim i&, lastRow
    Dim dstWB As Workbook

    Application.ScreenUpdating = False
    With ThisWorkbook.Worksheets(masterSheetName)
        lastRow = .Range(checkRow & Rows.Count).End(xlUp).Row
        .Copy
        Set dstWB = ActiveWorkbook
        dstWB.Worksheets(masterSheetName).Name = tmpSheetName
        dstWB.Worksheets(tmpSheetName).Rows(dataStartLine & ":" & Rows.Count).Clear

        For i = dataStartLine To lastRow
            If .Cells(i, checkRow).Value <> "" Then
                AddLine dstWB, i, .Cells(i, checkRow).Value
            End If
        Next
    End With
    Application.DisplayAlerts = False
    dstWB.Worksheets(tmpSheetName).Delete
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
 End Sub

 '---------------------------------
 Sub AddLine(dstWB As Workbook, lineNum&, sheetName$)
 '---------------------------------
 ' コピー先シートにデータをコピー
 '---------------------------------
    Dim lastLine%

    checkAndMake dstWB, sheetName
    lastLine = dstWB.Worksheets(sheetName).Range(checkLastRow & Rows.Count).End(xlUp).Row + 1
    ThisWorkbook.Worksheets(masterSheetName).Rows(lineNum & ":" & lineNum + rowUnitSize - 1).Copy
    dstWB.Worksheets(sheetName).Rows(lastLine).Insert Shift:=xlDown
 End Sub

 '---------------------------------
 Sub checkAndMake(dstWB As Workbook, sheetName$)
 '---------------------------------
 ' コピー先シートがあるかチェックしなければ作成
 '---------------------------------
    Dim tmpWS As Worksheet
    On Error Resume Next
    Set tmpWS = dstWB.Worksheets(sheetName)
    If tmpWS Is Nothing Then
        dstWB.Worksheets(tmpSheetName).Copy after:=dstWB.Worksheets(dstWB.Worksheets.Count)
        dstWB.Worksheets(dstWB.Worksheets.Count).Name = sheetName
    End If
    On Error GoTo 0
 End Sub
 (Mook)

  はとさん
 Mookさんが非常に上手くまとめてみえますから、ぜひ挑戦して完成してください。
 私は泥臭いコードになってしまいますから、陰で応援いたします。
 マクロのコードが、時には100行以上になることもありますが上手く作動します
 から、Excelのマクロは非常に楽しいものです。マクロを使えば
 表の操作でまず不可能なことは無いと思いますから、頑張ってください。
                   (あまちゃん)

 新規ブックにするためのコードに不備があったので修正
 (Mook)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.