• ベストアンサー

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

nishi6の回答

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

紛らわしい表現を使ったかもしれません。すいませんでした。「+」を使って・・・とういのは、1行目にあるデータをレイアウトの中に配置するだけという意味で使いました。私自身、別のセルにデータを入れる場合、「=」を余り使わないのでこういう表現をしてしまいました。(F10にA1のデータを入れる場合、F10には+A1としています。) さて、ご質問の件ですが、下記VBAを作ってみました。前提としては、各分類のシートで印刷ができれば動くと思います。今は画面表示PrintPreviewにしてあります。PrintOutにすれば印刷できるはずです。簡単な範囲指定・入力チェックも入れておきました。処理自体はだいぶ単純化されたと思いますがどうでしょうか?何か不具合が合ったら補足してください。 Public Sub BunruiSheetPrint() Dim ws1 As Worksheet 'Sheet1 Set ws1 = Worksheets("Sheet1") Dim BunruiCol As Integer '分類が入力された列(A列からのカウント) Dim columnMax As Integer '列数(データ項目数) Dim cl As Integer '列データ用カウンタ '分類の列位置、データ列数を調べる With ws1 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 End With Dim dmy As String '入力用ワーク文字 Dim startRow As Long '開始行 Dim lastRow As Long '最終行 '印刷開始から最終行を入力(このあたりは処理例です。) dmy = InputBox("印刷開始行を入力します") If dmy <> "" Then startRow = Val(dmy) dmy = InputBox("印刷最終行を入力します") If dmy <> "" Then lastRow = Val(dmy) '開始<=最終 ? (これもチェック例です) If Not (startRow <= lastRow) Then MsgBox "エラー", vbOKOnly, "誤入力": Exit Sub End If ' '各シートに飛ばす(Sheet2から。Sheetは連番) Dim rw '行カウンタ Dim br '各データの分類 Dim ws '印刷をするシート Application.ScreenUpdating = False 'シート表示を固定 With ws1.Range("A1") For rw = startRow To lastRow '指定した範囲を印刷 br = .Offset(rw, BunruiCol) + 1 'シート番号を求める Set ws = Worksheets("Sheet" & br) 'シートを決定 For cl = 0 To columnMax '1行分目的のシートに書く ws.Range("A1").Offset(0, cl) = .Offset(rw, cl) Next ws.Activate 'PrintPreview を PrintOut に変えれば印刷を実行 ActiveSheet.PrintPreview Next End With Application.ScreenUpdating = True 'シート表示の固定解除 ws1.Activate 'Sheet1を表示 End Sub

ruru-k
質問者

補足

nishi6さん、回答ありがとうございます。 すみません理解できません! とりあえず、VBAを打ち込んでみましたが、うまくいきません。エラーで、デバックをクリックすると 「br = .offset(rw,BunruiCol)+1'シート番号を求める」 のところの行に網掛けが出ます。なぜでしょうか? やっぱり、初心者では無理ですか? 何度もお尋ねして申し訳ございませんが、もし、初心者でも出来る範囲でしたら、もう少し詳しく教えていただけませんでしょうか? 私も、もっと勉強してみますので、宜しくお願い致します。

関連する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列にもデータが入っていますが、今回は生徒番号、氏名、クラスのみの ファイルにしたいです。 良い方法を教えてください。よろしくお願いします。