• ベストアンサー

エクセルの表を自動的に、項目毎に別シートへ分ける方法

nishi6の回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

>移動を自動的にさせたいのですが に対して、下記のVBAを書いてみました。参考にして下さい。詳細が分からないので条件があります。 1.データはSheet1にある 2.Sheet1の1行目は表題になっており(A1から)、全ての列に入力されていて、どこかに「分類」という表題がある。 3.「分類」列は全てのデータについて入力されていて1からシート数-1以下である。 注1)転記するシートには2行目から書いています。 注2)分類が増えたらシートを増やします。VBAは修正不要です。 注3)データの増減、修正がある場合、Sheet2以降はデータをクリアする必要があります。   (これがあるためこの方法には抵抗があります。初期化すればいいんですが) Public Sub Sheet2Sheet() Dim BunruiCol As Integer '分類が入力された列(A列からのカウント) Dim columnMax As Integer '列数(データ項目数) Dim rowMax As Integer '行数(データ数) Dim cl, rw As Integer 'カウンタ Dim wRw(255) As Integer '各シートで書いた行番号(2行目からスタート) '分類の列位置、データ列数・行数を調べる With Worksheets("Sheet1") With .Range("A1") While .Offset(0, cl) <> "" And BunruiCol = 0 If .Offset(0, cl) = "分類" Then BunruiCol = cl End If cl = cl + 1 Wend End With columnMax = .UsedRange.Columns.Count rowMax = .UsedRange.Rows.Count - 1 End With '各シートに転記 Dim br '各データの分類 With Worksheets("Sheet1").Range("A1") For rw = 1 To rowMax br = .Offset(rw, BunruiCol) + 1 For cl = 0 To columnMax Worksheets("Sheet" & br).Range("A1").Offset(wRw(br) + 1, cl) = .Offset(rw, cl) Next wRw(br) = wRw(br) + 1 Next End With End Sub >もっと良い方法があったらそれも教えて下さい。 に対して、私なりの感想ですが(やるとしたらこうします) (1)分類数に対応するハガキフォームを先に作ってしまいます。各シートは1分類としSheet2から作ります。1行目(A1から)にデータを適当に入力しておき、それを「+」を使ってレイアウトに編集していきます。肝心なのはここをいかにシンプルに作るか、分類が増えた場合も考え簡単に対応できるようにしておきます。 (2)できたハガキフォームの印刷範囲をシート単位で決定します。 (3)後は、上記VBAのように各シートに移動させるわけすが、該当シートに1件単位に書き込み(1行目に)→そのシートをアクティブに→印刷 を繰り返していきます。VBAは当然、シート数が増えても手を入れなくていい作りにします。(上記VBAもそうです) (4)印刷時は全件印刷や指定印刷が必要でしょうからその機能を付加します。 ざっと書きましたが、印刷はExcelに任せ、1件を該当シートに送ってやれば、1シート1分類、1データとなりリンクもHLOOKUPも不要な気がします。 長々と書いてしまいました。がんばってください。

ruru-k
質問者

補足

大変参考になる回答をありがとうございます。 早速、試してみましたところ、うまくいきました。が・・・ ご意見いただきました通り、1件を該当するシートへ送る方法で進めたいと思います。 その内容について詳しく知りたいのですが、現在、ハガキのフォームはできました。ただ、1行目にデータを適当に入力しておき、「+」でレイアウトに編集?と言う部分が良く分かりませんでした。(とりあえずフォームは出来てますが・・・)ここまでは何とかうまくいってますが、そのフォームにそれぞれの該当データを、HLOOKUPを使用せずに送り込む作業をしているのですが、なかなかうまくいきません。私の単なる知識不足でしょうが・・・ VBAに関して、初心者なものですみません!よろしかったら送り込みの方法を教えていただけませんでしょうか?よろしくお願い致します。

関連するQ&A

  • EXCEL VBA 保護したシートを読込みしたい

    お世話になります。 EXCEL VBAで「データ」というシートあります。ここの100件ほどのデータが入っており、もう1つの「集計」というシートにフォームを作成してそのフォームからVBAを使って集計するのですが、この「データ」シートはユーザーにいじられたくないので保護もしくは非表示にしたいと思っています。 しかし「データ」シートを保護してしまうとVBAで「データ」シート読み込む際にエラーになってしまいます。 何かよい方法はありますでしょうか? 環境 WindowsXP SP3 Excel2003

  • Excelのシートを隠す方法

    Excelにて表作成をしえおります。 1枚のシートに定価と掛け率を入れて隠したデータを作りたいのですが、シートを隠す+保護+パスワード設定をしましたが、VBAにてシートがあることがわかってしまいます。VBA画面でもシートがあることがわからないようにする方法はありませんでしょうか?できればマクロは使わない方法にてお願いいたします。

  • エクセルで別シートから内訳を反映させる方法。

    エクセルで簡易な合計請求書を作成しました。 しかし別シートから内訳を引っ張ってくる方法がわかりません。 知恵をお貸しください。 下記の画像で上画面のシートが合計請求書のフォームになります。 下画面の別シートに売上が入力しておりその入力した売上を店舗ごとに 集計して表示されるような関数が上シートの金額部分に入っています。 上のシートの緑色部分にはマクロが登録されており押すと金額と店舗の住所が 合計請求書のフォームに反映されるようになっております。 ここで緑のボタンを押した時に住所と一緒にその合計請求書のフォームの下に金額の内訳が入るように関数を入れたいのですがそういった関数はありますでしょうか? 分かり辛い説明で申し訳ありません。 宜しくお願いいたします。

  • エクセルでデータを別シートに表示する方法。

    エクセルでの質問です。 運送会社に勤めてまして、乗務員の拘束時間を管理できる表の作成を頼まれました。 シート1には記入表があって、名前をリストで選択しデータ入力、そのデータを名前別に シート2に蓄積し、保存されます。 シート1の記入表の名前を他の名前にリストから変更したら、記入表の数字はクリアにされますが シート2には前回の名前のデータはそのまま保存。また名前を選択したら随時更新が出来るように したいです。 名前のリストは500人程度です。 一人一人のシートを作成したのでは非常に時間がかかるため、マクロやVBAで効率よく分類、 またはそれ以外の方法がありましたら、ご教授いただければと思います。 よろしくお願いいたします。 表は画像にあります。

  • エクセルデータを別のエクセルファイルに自動で書き込む方法

    Excel 2003を利用している初心者です。 質問させていただきます。 エクセルのシートのデータを別のエクセルに自動で書き込んでくれるような仕組み(マクロ?)の作成方法を教えてください。 具体的には、 A.xls内の ---------------------------------------------------------------- 名前       住所     電話番号    登録日 山田太一    東京都豊島区  0309990999   2005/11/01 宮田太一    東京都港南区  0309990999   2005/11/01 ・          ・      ・      ・  ・          ・      ・      ・ ---------------------------------------------------------------- のようなのデータを、横列単位で ---------------------------------------------------------------- 名前:山田太一    登録日2005/11/01 住所:東京都豊島区  電話番号:0309990999   ---------------------------------------------------------------- のように、項目のみを記載してある、B.xlsファイルに、自動で書き込むしたいのですが、その場合、どのような方法があるのでしょうか? エクセルに関しては、ずぶの素人なので、どのような方法があるかもわからず、漠然と質問してしまいましたが、 何卒よろしくお願いいたします。

  • VBA シート毎にユーザーフォームを作成する方法

    VBAの初心者です。記載内容に不備があるかもしれませんが、ご了承下さいませ。 エクセルのシート毎に異なったデータを簡単に入力したいと思っています。それをVBAを使って作成したいのですが、シート毎のユーザーフォーム作成方法(オブジェクトのWorksheetやモジュールの記載内容など)がわかりません。一つのシートに対しては、なんとかユーザーフォームを作成でき、データ集計できています。 ネットで検索しても、思い通りのサイトが見つかりませんでしたので、質問させていただきます。 教えて下さい。宜しく御願い致します。

  • Excel VBAで抽出したデータを別シートに表示する方法。

     Excelで20分類された3000行くらいの商品DBシートから名前の定義を利用して分類別のリスト選択(入力規則)しています。  内容は分類シートで商品DBシートから分類列別で抽出し(関数で分類)分類列ごとに名前の定義を設定し入力シートでリスト化(入力規則)を行っております。  商品DBシートにデータを追加すれば自動的に分類シートに反映はされますが、各セルに関数が入っており、再計算が非常に時間がかかります。  VBAで効率よく分類、またはそれ以外の方法がありましたら、ご教授いただければと思います。  よろしくお願いいたします。

  • エクセル データをシート別に分けたい

    現在 エクセルにてその日入荷商品を仕分しています。データ入力シートに商品番号を入れると単価と重量と分類が出てきます(化粧品なので口紅、香水など) 1 1234 香水 1000円 100グラム 分類 3303.00 2 5645 口紅 900円  50グラム 分類 3304.00 3 2256 香水 3000円 250グラム 分類 3303.00 データ入力した際の1番目に来た商品(香水)は別の1番シート、香水を除いた2番目に来た商品(口紅)を2番シートに・・・のようにしたいのですが、現在はオートフィルで摘出してコピーをしています。 シート1 1 1234 香水 1000円 100グラム 分類 3303.00 2 2256 香水 3000円 250グラム 分類 3303.00 シート2 3 5645 口紅 900円  50グラム 分類 3304.00 順番はその日によって違い何が1番目に来るのかわかりませんが、必ず1番上から仕分をしなくてはいけません。 摘出後、1番シートに1番から番号を振り最後まで振ったら続きを2番シートというようなものを作成したいと思っております。商品は大体8種類から14種類に分類されます。 どのように作成すればいいのか、どなたかご教授ください。よろしくお願いいたします。

  • EXCELで自動的にデータレコードを追加する方法について

    EXCELシートのレコードを自動的に追加して生きたいのです。というのは2枚のEXCELシートがあって1枚のシートは入力フォームになっていて他のフォームにアクセスのようなレコードを作り1行目のレコードにリンクさせます。この場合1枚目の入力シートにデータ追加するたびに2枚目のシートにレコードが追加される方法がないでしょうか。マクロを使ってコピー貼り付けではできません。もちろんデータのフォームではデータ貼り付けを受け付けませんのでだめです。アクセスまがいのことをEXCELでしようとしているのですが。どなたかヒントいただけませんでしょうか。

  • エクセルで項目ごとに新しい別のシートにしたい

    エクセルで名簿を作成しています。 C列に生徒番号、D列に氏名、E列にクラスがAからFまでランダムに入っています。 この名簿を新しいファイルに、クラスごとに別のシートにしたいです。 できればシート名も「A」「B」となっていれば助かります。 A,B列にもデータが入っていますが、今回は生徒番号、氏名、クラスのみの ファイルにしたいです。 良い方法を教えてください。よろしくお願いします。