• 締切済み

エクセル複数シートから一定の範囲を1シートへVBA

エクセルのVBAで質問です。 A1~A3行までは、タイトル(3行が列タイトル) A4行以降から一定のデータが入っており、商品ごとにシートを分けています。 列BF4~BM81までのデータを自動でコピーし、全データシートも自動でできればと思っています。 BF4列には、日付が入っており、複数のシートからコピーされたものは、日付順にて並べたい。「全データシート」を自動で作成する方法は、ネットにて調べることができたのですが、一定の範囲内の複数シートを合算し、日付順に並べ替えて自動でコピーするというのが分かりません。 VBAも全くの初心者です。 詳しくお教えいただればと思います。 よろしくお願いします。

みんなの回答

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

質問は全部でなくていいんです。 あーしてこーしてxxしたい、 ではなくて あーしたいところをまず質問、クリアして、から こーしたいところを聞く。 その(できあがってきたものの)積み重ねです。 「あーしてこーしてxxしたい」、 の回答を一度にもらうには、 質問側も回答側も大変な話です。 ちょっとの説明では回答しようにも回答できない、多々あります。 それよりも、 文章だけの掲示板でテクニックを聞くのに無理がないか・・、です。 やっぱり本見る、リンク先聞く、図解、解説とともにやる、等のがベターです。 「一定の範囲内の複数シートを合算し、・・・」 をもっと細かく機能分けしてヒントをつかむ。 ネットで探せば、 ここの掲示板よりもいいところある、のは感じているとは思いますが・・。

ringo115_115
質問者

お礼

途中まではなんとか出来たのですが、後少しというところが思うようにならないのでまたVBAの件でこれとは別に質問させて頂きます。もし良かったらまた、ご教授くださいませ。

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

全くの初心者がまず取り掛かるような課題ではない。VBAを勉強して、中級の上のレベルにならないと出来ない課題。 その前に、エクセルVBAにはマクロの記録がある。これである程度のコードの骨格は判る(出来る)はず。 いまの質問者の状態では、回答者にコードを書かせてコピーして終わりになるが、甘えてはいけない、ここはコード作成のコーナーではない。 ー それに質問がわかりにくい 私が質問を書いてみると、 商品ごとのシートが何枚か在る。(質問するときは2・3シートに簡略化する)。 そして各シートの表の列(項目の有無と順序)構成は同じ(だよね) >列BF4~BM81 ではなくセル範囲で、BF4~BM81までにデータがある(ようだ。質問ではA4:CXまでとか簡略化する) それを集合した同フォーマットのシートを作りたい(と言うことではないのか)。 ー >列BF4~BM81 データ最終行は各商品(=各シート)でばらばらではないのか。81行に固定化。良く考えて質問に書くこと。 >日付順にて並べたい こんなものはマクロの記録で、すぐコードが判るだろう。だから質問から除外して書くのが良い。 初心者なら手動で日付順にソートしても良いぐらいだ。 >一定の範囲内の複数シートを合算し 合算と言うと、項目別などの「合計」を出すときにつかう表現だ。主目的は1つのシートにデータを集めればよいのだろう? そういう時は集める質問に徹した質問にして、合計などといわないことだ。 ーー 各シートを掴むコードは Sub test01() Dim shs As Worksheet '集約シート Dim sh As Worksheet '各シート For Each sh In Worksheets MsgBox sh.Name MsgBox sh.Range("BF4") MsgBox sh.Range("B4") Next End Sub これで各シートのB4とBF4セルの値を表示する例。 ーー 集計シートを1シート作っておく問題(コードでもやれる。マクロの記録で。しかし最初はシートの挿入を手動でやってすませ、コードを複雑化させないこと) ーー 集約シートまでデータを集約するとダメだから飛ばす。 Sub test02() Dim shs As Worksheet '集約シート Set shs = Worksheets("集約シート") '集約シートは手動で作っておく Dim sh As Worksheet '各シート For Each sh In Worksheets If sh.Name <> "集約シート" Then MsgBox sh.Name MsgBox sh.Range("BF4") MsgBox sh.Range("B4") End If Next End Sub ーーー ここで各シートのデータ範囲を掴む問題。 ーーー 上記範囲をコピーし、集落シートの最下行の次の行を起点にして貼り付ける。 ーー シートのデータ最終行 Googleででも「VBA シート 最終行」で照会すること。 ーー Googleででも{VBA データ貼り付け Destination」 (Pasteをコード上使わない方法)http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1413982144 この記事は本質問の大きなヒントや答えにもなりうるパターン。 ーー あとは自力で。

ringo115_115
質問者

お礼

ご回答ありまがとうございます。 昨日からずっとVBAに関するものを見てますが、現段階で昨日の質問内容では最低必要な情報が全く足りてないと分かり反省しております。 自動でシートを作成し、データを貼り付けるまではできたのですが、imogasiさんのおっしゃるとおり、データ範囲は、81行までですが、その下行にも関係のないデータが並んでいます。 その必要のない81行から下を削除したらデータを並べることができました。 書いてくださったサイトを参考に勉強していこうと思います。 ありがとうございました。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

http://www.asahi-net.or.jp/~ef2o-inue/menu/menu01.html エクセルでお仕事 VBA基本、応用のコラムを読んでから取りかかった方が良い。 やるからには(回答の)コピー&貼り付けだけにとどまらないことですね。 コピー&貼り付けで一応結果は出たものの、 何がどうなったのかさっぱりということ多々あります。 ちょっと状況が変わっても対処できないとかあります。 初心者によくある、人任せでちっとも上達しない状態をよくみます。 なので、 回答サンプルコードについては、説明ももらうこと。おさらいしてみること。 VBAはデバッグ(=ステップ実行)の仕方も覚えることです。 複数シートのデータをSheet1へコピーするには? http://www.asahi-net.or.jp/~zn3y-ngi/YNxv99116.html ここのサイトも参考。 使えそうなものがあれば吸収する。 自力なら、マクロの記録で 対象1シート目で実行、別の対象2シート目で実行・・、と実行してみて、 その2回同じような処理になった部分、 「対象nシート目」というのを変数で持たせる、繰り返しを実装、 を考える。

ringo115_115
質問者

お礼

ご回答ありがとうございました。 いろいろと本などで調べてみたりしましたが、私の質問内容も簡単に考えすぎだったようで 反省しております。 教えて下さったサイトも見ながら作っていきたいと思います。 ありがとうございました。

関連するQ&A

  • VBA一定の範囲内からデータが入っている行を検索

    現在VBAにて作成中です。 内容は、各シートの全く同じ範囲内から1シートへ自動で貼り付けを行い日付順に並べ替えるということです。 各シートは全て同じ表になっていますので、コピー範囲のセル番地は全シート同じです。 コピー範囲は、BF4:BM81で、BF4に日付が入っています。 81行までありますが、82行には、合計行が入っていることや、その下行もデータが入っている為、範囲指定をしています。また、81行設けていますが、上から順にデータは入っているものの、81行まで全て埋まっているとは限りません。 その為、下記のVBAにすると、各シートの81行までのデータが反映され1シートに全てのシート分が貼り付けられるので、かなりの行数になり、空白や0の行が出てしまいます。 範囲内から日付(列BF)のデータが入っている行までを検索し選択、貼り付けを行えるようにしたいと思っています。 どなたかご教授頂ければと思いますのでよろしくお願い致します。 見よう見まねで下記を作成しました。 Sub matome() Dim i As Integer Dim lRow As Long, lCol As Long, lRow4 As Long Application.ScreenUpdating = False '----全データシートの有無をチェックします sh_check '----列見出しをコピーします Worksheets(2).Range("bf1:bm3").Copy Worksheets(1).Range("A1") For i = 2 To Worksheets.Count With Worksheets(i) 左上 = "Bf4" 右下 = "bm81" 範囲 = 左上 & ":" & 右下 lRow = .Cells(Rows.Count, 1).End(xlUp).Row lCol = .Cells(58, Columns.Count).End(xlToLeft).Column '----シートのデータが4行以上の場合にコピーします If lRow >= 4 Then lRow4 = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1 .Activate Range(範囲).Select Selection.Copy Worksheets(1).Cells(lRow4, 1).PasteSpecial Paste:=xlPasteValues End If End With Next i End Sub 説明に不足がありましたら、追って書き込みさせていただきます。

  • エクセル 1つのシートを日付で複数シートに分けたい

    エクセル2007を使用してます。初心者です。 1行名に列ごとのタイトルが入ってます。 A列~S列まで色々とデータが入っており、M列に日付(20140618のように)が入ってます。 このシートを日付ごとに別シートに分けたいのですが、何か計算式かもしくはマクロでできますか? できれば、R列に入っている数字を日付のあとにつけて自動で保存できると大変助かるのですが・・・。(20140618-2 というような感じ) マクロの扱い方も良く分からないので教えていただけると助かります。

  • 【Excel VBA】複数範囲の並べ替えは可能でしょうか?

    【Excel VBA】複数範囲の並べ替えは可能でしょうか? Excel2003を使用しています。 CSVデータを元に作成された下記のような表があります。 A列…日付、B列…受注番号、C列…摘要(会社名・品名等)、D列…金額となっています。 6行目以下に上記の内容でデータが入力されていますが、会社ごとのデータ内で日付順に並べ替えをしたいのですが、VBAで複数の範囲を選択して、それぞれの範囲内での並べ替えは可能でしょうか?     A     B     C    D 6             ○○会社 7   1/20   123   AAA   1,000 8   1/15   120   BBB   2,000 9 10              計     3,000 11 12            ××会社 13 計の1行上と下は空欄行で、以下、会社名の後にデータが続くというパターンの繰り返しで数十社分あります。 Excelのデータ⇒並べ替えでは複数選択した状態での並べ替えはできないので、VBAで可能であればと思い、質問させていただきました。 よろしくお願いします。

  • excel vba 複数シートをまとめる

    お世話になります。 A.xlsというブックがあります。 その中に[集計]というシートがあります。 このシートに[ボタン]を配置してクリックしたら以下の動作を実現させたいのです。 (1)[集計]シートのA2に位置セット (2)[東京]、[大阪],[名古屋]という名称のシートの列=A2~A62、行=A2~データ最下行にある全データを[集計]シートにどんどんコピー貼り付けして追加していきたいのです。 上記動作を実現するVBAのロジックをどなたかご教授いただけますでしょうか。 よろしくお願い致します。

  • エクセル 関数を自動的に入力するVBAで困っています

    VBA初心者です。 エクセルの入力シートで行ごとにデータを下記のように入力しています。      A      B       C 1   日付    品番     商品 2   10/25    10     りんご 3   10/26    20     みかん 4 5 6 2行目から順にデータを入力すると自動的にC列にVBAで VLOOKUP関数をセットして商品を検索したいのですが 上手くできませんでした。 教えてください。よろしくお願いします。

  • エクセル 複数シートのデータを1シートにまとめるマクロ

    エクセルの複数シートにデータがあります。同じ条件の人のデータだけをひとつのシートにまとめたいのですが、マクロを教えていただけますでしょうか。それとも、マクロ以外に良い方法がありますか? エクセル初心者なので、あたりまえのことも知らないかもしれません。。。  【データ】 ●シート1からシート20まで、同じ配列でデータがあります。 ●1行目は見出しです。2行目から1人づつのデータです。(多くても65行までと思っています。) ●A列に到達度、B列に出欠をいれました。 ●C列からM列が氏名、課題、その他のデータです。 ●リストはシート21にあります。  【こんな作業でしょうか?】 ●シート1から20で A列が「C」または「D」ならば その行のA列からM列をコピーして シート21のA列からM列に形式を値にして張り付ける ●シート1から20で B列が「欠」ならば その行のA列からM列をコピーしてシート21のA列からM列に形式を値にして張り付ける (っというのが私の乏しい知識で考えた方法なのですが、これでは不具合がでますか? もちろん、この方法じゃなくもっといいのがあれば、それをやってみたいです。)

  • Excel Vba でデータの範囲を知るには?

    Excelを使用していますが、マクロ(VBA)で、シートのデータの範囲を知るにはどうすればよいのでしょうか。  印刷プレビューを行うと、自動的にページ数が求めらていますが、これは、シートのデータの範囲(列及び行の最大値)を判別しているからできるのだと思います。  これを、VBAで行、及び列のMAX値を取得したいのですが、そのメソッド(プロパティ)を知りたいのです。  どなたかご教授ください。

  • エクセルで複数のシートにあるものをひとつに

    お世話になっております。 似たような質問を検索してみましたが、いまいち要領がつかめませんので教えて下さい。 ブックに複数のシートがあり、それをを同じブックまたは、別のブックでもいいので一つのシートにまとめたいのですが何かいい方法はありますでしょうか? ブックにより、シート枚数が違います(多いものは30シート以上)。 同じブックでの各シートの列のタイトルは同じで、行はデータ量により違います。(多いものは1000行以上) イメージとしては、シートを全コピーして、新しいシートにペースト。 次のシートを全コピーしてそれを、今ペーストした下の行にペースト。 現在はこのコピー&ペーストで地道に作業しております。 かなり時間を取られております。 XPでオフィスは2007を使用しております。

  • excel vbaで複数のcsvファイルの読み込み

    100シート分のcsvファイルのデーターを一つずつ読み込んでexcelにコピーして使用してますが莫大な時間がかかって困ってます。 vbaを使用して作業を簡素化出来る事は出来ないでしょうか? ------------------------------------------ ※ csvの概要 excelで1枚のcsvファイルを開くとA列の11行目から65536行まで数値データがあります。 ※ vbaできたらよいなと思う仕様 そこで、複数のcsvファイルを選択して読み込むとCSV_データと言うSeetのA列の10行目から1枚目のcsvファイル、B列の10行目から2枚目のcsvファイルと言う風に選択した分のcsvを列に続けて数値データを貼り付けしてくれるvbaをご教授していただけると大変助かります。 不躾で申し訳ございませんが宜しくお願い致します。 excel2003 ------------------------------------------

  • エクセル VBA

    最終行から順番に下へ同列で入力するVBAを教えて下さい。 EXCELのVBAで教えて下さい。 シート1のA列にはB列が入力されると自動入力されるNo.があり、C~G列もB列が入力されると自動入力されます。 B列には日付が、H列には3~4桁の数字が入力したいのですが、 入力行は必ず最下行のセルB、Gな為、VBAでフォームを作成し、 入力実行ボタンを押すことにより、最下行のセルB、Gに反映されるように したいです。 又、上記入力後に、シート2のH~N列をコピーして、シート3のA~G列に値のみの貼り付けを行い保存した後、シート3のA~G列をコピーして csvファイルを作成して保存したいです。 一連の流れを、フォームの入力実行ボタンを押すことで実行したいのですができるのでしょうか? 宜しく御願い致します。

専門家に質問してみよう