• 締切済み

マクロの組み方

東京12.xlsとういデータに、12月の在庫1日~31日までがシート別にあります。このような形です→SheetZAIKO01~SheetZAIKO31 これを(東京12月まとめ.xls)として別エクセルにまとめたいのですが。 12月のZAIKO01~ZAIKO31は、1行目がヘッダーで、 A1店舗名 B1商品名 C1前月残 D1今月算 とあるので、 ZAIKO01は"A1:D?"までとりたいのですが、 残りのZAIKO02からはヘッダーが必要ないので、A2から範囲指定をします。 "東京12月まとめ.xls"にまとめる際、 12月のどの日付かがわかるように、A行を日付の欄として設定をし、 たとえばZAIKO01であれば、A行に1、ZAIKO02であれば2と 入れていくような設定にしたいです。 在庫状況は日々変動していますので、日によって、行数が異なっています。 今まで、恥ずかしながら手作業でまとめていたのですが、 毎月かならず発生する作業で東京以外のエリアもあり、時間的なロスがあまりにも大きいので、 大変お手数なのですが、よろしくお願いいたします。

みんなの回答

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

すみません,回答No2です。 変な部分がありましたので修正しました。 Sub test02() Dim ns As Worksheet, st As Worksheet Dim a As Long, b As Long, c As Long Dim d As Variant Set ns = Sheets.Add(Before:=Sheets(1)) '先頭にシートを挿入 ns.Name = "まとめ" '名前を「まとめ」に For Each st In Worksheets '各シートにつき If st.Name Like "*ZAIKO*" Then 'ZAIKOが名前にあれば With st .Range(.Range("A2:D2"), .Range("A2:D2").End(xlDown)).Copy 'そのシートのA2:D2以降の連続データをコピー End With With ns a = .Cells(Rows.Count, "B").End(xlUp).Offset(1).Row 'まとめシートのデータ挿入先行検索 .Cells(a, "B").PasteSpecial 'B2セルから貼り付け b = .Cells(Rows.Count, "B").End(xlUp).Row '貼り付け後の最終行取得 .Range(.Cells(a, "A"), .Cells(b, "A")).Value = Right(st.Name, 2) '貼り付け範囲のA列に各日付挿入 If .Cells(1, "B") = "" Then '1行目があいてれば .Range("A1") = "日付" '見出しに「日付」と記入 .Range("B1:F1").Value = st.Range("A1:E1").Value 'その他見出し記入 End If End With End If Next d = Application.GetSaveAsFilename(InitialFilename:=Left(ThisWorkbook.Name, 4) & "月まとめ.xls", _ fileFilter:="XLSファイル (*.xls), *.xls") '保存先確認&ファイル名を現在のファイル名の左から4文字+月まとめ とする。 If d = False Then 'キャンセルなら MsgBox "ファイル作成をキャンセルしました。" Exit Sub Else Sheets("まとめ").Copy ActiveWorkbook.SaveAs Filename:=d 'まとめシートを保存 End If End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.4

ほとんどの部分が「マクロの記録」を利用して作成できます。 一度に全部の作業を記録すると、わけがわからなくなる可能性がありますので、部分に分けて記録したほうが理解しやすいと思います。 あとは、作成の際の参考に… ・各シート名が「ZAIKO01~SheetZAIKO31」ということなので、それぞれの  シートは "ZAIKO" & ループ変数 で求めることができます。  実際は月によって日数が違うはずなので、ループの上限はDate関数を  利用して求めるのが簡単かと思われます。 >在庫状況は日々変動していますので、日によって、行数が異なっています ・No.1様の回答にもありますが、一番下の行を求めるのによく使われる  方法として、キーとなる列を決めておいて、その列の最終行を求めるとい  うものがあります。  例えば、B列をキーとするなら…(stを対象シートとすると)    st.Range("B" & Rows.Count).End(xlUp).Row  で求めることができます。 ・最初に全部を作ろうと思わずに、「1シート分の処理をする」くらいを目標に  して始めれば、あまり混乱せずにすむのではないかと思います。 がんばってください。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

>ZAIKO01は"A1:D?"までとりたいのですが、 >残りのZAIKO02からはヘッダーが必要ないので、A2から範囲指定をします。 先に項目行を書き込んでしまえば、SheetZAIKO01~SheetZAIKO31は全て2行目以降で統一できますよ。 ただ”東京以外のエリア”に対して同様の事をするのなら、例えば12月のブックは 全て同じフォルダに入れてしまい、そのフォルダ単位で実行する方が楽なのかなって思います。 ⇒東京12.xlsと言うブックに対して、東京12月まとめ.xlsと言うブックを新規作成した後、 必要な処理を実行していくとか。 一案までですが。

全文を見る
すると、全ての回答が全文表示されます。
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

とりあえず参考程度に一例を Sub test01() Dim ns As Worksheet, st As Worksheet Dim a As Long, b As Long, c As Long Dim d As Variant Set ns = Sheets.Add(Before:=Sheets(1)) '先頭にシートを挿入 ns.Name = "まとめ" '名前を「まとめ」に For Each st In Worksheets '各シートにつき If st.Name Like "*ZAIKO*" Then 'ZAIKOが名前にあれば With st 'そのシートの2行目以降の連続データをコピー .Range(.Range(.Range("A2"), .Range("A2").End(xlDown)), .Range(.Range("A2"), .Range("A2").End(xlDown)).End(xlToRight)).Copy End With With ns a = .Cells(Rows.Count, "B").End(xlUp).Offset(1).Row 'まとめシートのデータ挿入先行検索 .Cells(a, "B").PasteSpecial、B列から貼り付け b = .Cells(Rows.Count, "B").End(xlUp).Row .Range(.Cells(a, "A"), .Cells(b, "A")).Value = Right(st.Name, 2) 'A列に日付挿入 If .Cells(1, "B") = "" Then '1行目があいてれば .Range("A1") = "日付" '見出しに「日付」 .Range("B1:F1").Value = st.Range("A1:E1").Value 'その他見出し End If End With End If Next d = Application.GetSaveAsFilename(InitialFilename:=Left(ThisWorkbook.Name, 4) & "まとめ.xls", _ fileFilter:="XLSファイル (*.xls), *.xls") '保存先確認&ファイル名を現在のファイル名の左から4文字+まとめ とする。 If d = False Then 'キャンセルなら MsgBox "ファイル作成をキャンセルしました。" Exit Sub Else Sheets("まとめ").Copy ActiveWorkbook.SaveAs Filename:=d 'まとめシートを保存 End If End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

あえて、そのままの答えを書かないで、ヒントだけを書きます。 それぞれのシートのデータには空行が無いものとします。 A1セルを選択した状態で、Ctrl + *を押してみてください。 テンキーのないノートPCとかだったら、Ctrl + Shift + : (Shift + : = * なので)を押してみてください。 表全体が選択されますよね? それを「マクロの記録」で記録してみましょう。 A列の最も下のセルA65536を選択した状態で、Ctrl + ↑ を押してみてください。 A列にあるデータの一番下のセルに移動しますよね? それも「マクロの記録」で記録してみましょう。 ヘッダが必要ない場合は、貼り付けた後で削除すれば良いです。 貼り付ける前にIntersect関数でヘッダを削ることもできますが、貼り付けた後で削除する方が初心者には解りやすいと思います。 > 12月のどの日付かがわかるように、A行を日付の欄として設定をし、 > たとえばZAIKO01であれば、A行に1、ZAIKO02であれば2と A行とは、A列のことですか? A列には店舗名が入るんですよね?

momorinco1
質問者

補足

マクロCtrl + *のものとCtrl + ↑ の分を記録しました! >ヘッダが必要ない場合は、貼り付けた後で削除すれば良いです。 なるほど。そうなんですね! >A行とは、A列のことですか? はい。そうです。 >A列には店舗名が入るんですよね? A列には触らない状態では店舗名なのですが、 完成させるデータはA列に日付を入れたいです。

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

関連するQ&A

  • エクセルで別ブックのセルを参照する式の内部

    エクセルで別ブックのセルを参照する式の内部 別ブックのセルを参照する時は ='パス名[ブック名]シート名'!セル名 という式みたいなので、 ='item\zaiko\[zaiko_2010_06_01.xls]在庫シート'!B5 という式を作りました(パスは適当です)。 それで、 ='item\zaiko\[zaiko_2010_06_01.xls]在庫シート'!B5 ='item\zaiko\[zaiko_2010_06_02.xls]在庫シート'!B5 ='item\zaiko\[zaiko_2010_06_03.xls]在庫シート'!B5 ='item\zaiko\[zaiko_2010_06_04.xls]在庫シート'!B5 と日付を連番で複数のセルに入れていきたいので、 日付の 2010_06_01 の部分を他セルから持ってきたいのですが、 この式の中に 文字列参照のMID() とかで挿入できるでしょうか? 日付の入っているセルがちょうど横の方に連番で存在しています。 分かる方いましたら教えてください。 よろしくお願いします。

  • エクセルのマクロで(1)

    エクセルのマクロで下記のようなことはできますか? なんかとても複雑なような気がしますがもしご存知の方よろしければご教授下さい。   A  B  C  D 1名前 品名 数量 日付 ←タイトル 2山田 たこ  3  日付 3山田 たこ  2  日付 4山田 いか  1  日付 5佐藤 たこ  2  日付 6佐藤 なす  5  日付 となっていた時に下記のようにしたいのです。   A  B  C  D 1名前 品名 数量 日付 ←タイトル 2山田 たこ  5  日付 3    いか  1  日付 4佐藤 たこ  2  日付 5    なす  5  日付 説明: ・1行目はタイトルです ・名前が重なっているのを上の行に1つ入るようにする。 ・山田さんのように同じ<たこ>がある場合、数を足して<たこ>は1つに合計する。ただし佐藤さんの<たこ>とは合わせない。 ・数を合わせた後3行目はスペースが空くのでBに合わせてBが無記入の行のみ詰める。 さらにこんなことができましたら別で構いませんので同時にご教授していただけるととてもありがたいです。 別ファイル(食べ物<日付>.xls)をファイル名にできれば日付が入るように自動作成して A2から品名数の集計を貼り付ける   A  B  C  D 1品名 合計   日付 2たこ 7     日付 3いか 1     日付 4なす 5     日付 だいぶ複雑そうですが何卒宜しくお願いいたします。

  • エクセル 行挿入のマクロについて

    こんばんは、エクセルのマクロについてお伺いします。 現在 A1:支店名 B1:連番 C1:在庫数 全部で1000行位入力があります。 ・A列には支店名 ・B列には連番は1・2・3~と1000件位 ・c列には在個数にはそれぞれ1桁から2桁の数字 【質問】 在庫数の数だけその連番の行を増やしたい。 例えば、 A2:東京支店 B2連番:1 C2在庫数:3 だとすると2行目のあとに2行挿入し在庫数が3なので下記のように3行にしたい。 A2 東京支店 B2連番 1 C2 在庫数 1 A3 東京支店 B3連番 1 C3 在庫数 空欄 A4 東京支店 B4連番 1 C4 在庫数 空欄 何せ数が多いのでマクロをお教え頂ければ助かります。 ※その際、支店名と連番は同じ物がはいるとありがたいです。 ※在庫数は空欄で構いません。 マクロでなくても方法があればお教え下さい。 よろしくお願い致します。

  • エクセル(マクロ) 特定セルのファイル間コピペ

    マクロで下記内容の処理を行いたいと思っております。 どのようなコードにすればよいかご教授よろしくお願い致します。 1.A.xlsを開く 2.B.xlsを開く 3.B.xlsの特定セルの値をコピーする。(特定セルを仮にB4、C7、D9とする) 4.A.xlsのC列にあるファイル名リストから「B.xls」というファイル名の入ったセルを検索する。 5.仮に5行目に「B.xls」というファイル名があれば、同じ行にある特定列 (行は固定で、例えばE5、F5、G5とする)に3.でコピーしたB4、C7、D9の値を張り付ける。 ※B4はE列、C7はF列、D9はG列に対応するものとする 6.B.xlsを閉じる 7.C.xlsを開く 8.C.xlsの特定セルの値をコピーする。(特定セルはB.xlsと同じB4、C7、D9) 9.A.xlsのC列にあるファイル名リストから「C.xls」というファイル名の入ったセルを検索する。 10.仮に7行目に「C.xls」というファイル名があれば、同じ行にある特定列 (行は固定で、例えばE7、F7、G7とする)に8.でコピーしたB4、C7、D9の値を張り付ける。 ※B4はE列、C7はF列、D9はG列に対応するものとする 11.C.xlsを閉じる 12.D.xlsを開く 以下、同じ処理を繰り返す。

  • ExcelのVBAマクロ作成で他のExcelから条件つきでデータを取り込みたい

    毎日の在庫データが記載されたファイル群の中から特定のデータのみを他のファイル(貼付け先ファイル)の一つのシートに縦一列にして取り込みたいのですがどうすればよいのでしょう? 具体的には… ・在庫データは年ごとにファイルが分かれている(ファイル名「在庫2003年.xls」など) ・在庫データファイルは月ごとにシートが分かれている(シート名「2003年04月」など) ・シートの中のA列に「日付」(上記のシートなら2003/4/1から2003/4/30まで)、D列に「製品A在庫数」、F列に「製品B在庫数」が入力されており他の列にも様々なデータが入力されている。 ・貼付け先ファイルはA列に日付(2000/1/1~2006/12/10)が入力されている。 この状況で、例えば2003年4月と指定してマクロを実行すると、指定の在庫データファイルのシートから「製品A在庫数」と「製品B在庫数」を貼り付け先ファイルの、日付に対応したB列、C列の部分に入力してくれるようにしたいのですが、VBAの記述の仕方がわかりません。どうすればよいのでしょう? お願いします!

  • エクセルマクロ 次のようなプログラム教えてください

    エクセルのマクロで、次のようなことをしたいと思っていますが、 素人でわかりません。 教えていただけますか。 ---------------------------------- o動かしているファイルをa.xlsとします。  a.xlsは、3行目からA列に名前、B列~D列にデータが入っていて、  各行ごとのファイルを作りたい。(行数は決まっていない)  なお、セルE1にある文字が入っている。 o各ファイルは、原紙としてgensi.xlsとして保存されているファイルに、  a.xlsのB~D列のものを入力したものを作りたい。  (B~D列のデータは、gensi.xlsのそれぞれセルC7・C8・C9に入力する)   gensi.xlsは、a.xlsと同じフォルダにあります。 o作成場所は、「C:\date」の中に、セルE1にある文字のフォルダ、A列に  ある名前のフォルダに作りたい。 (セルE1の文字のフォルダは、マクロを初めて実施するときは無いと思います  が、2回目からは存在すると思います。A列の名前のフォルダはマクロ実施時  にはありません。作成するファイル名は、A列の名前と同じ(フォルダ名と同じ).xls にします。) o実行ボタンを3つ作って、1つは今選択されている行のフォルダ・ファイルを作る。  2つ目は数字を入力させて、今選択されている行から入力した数字の行までを一括  で作成する。  3つ目は、3行目から現在入力されている行すべてを一括で作成する。 ------------------------------- 上記のことをしたいと思っています。 よろしくお願いします。 駄文ですみません。 なお、エクセルは古いバージョンでエクセル2000です。

  • Excel のマクロを作成したい。

    Excel で作成した作業計画表(テ-ブル)に下記マクロを作成し実行したいので。 当初計画表には後述のB,C,Dは存在していない。 下記マクロにてテ-ブル内に追加したセ-ルB=開始日、C=終了日、D=作業期間を自動に求めたい。 タイトルとして 第1行目コロンA=作業者名、B=開始日、C=終了日、D=作業期間、E=2011年10月31日、 F=2011年11月7月、次のコラムから1週間後の日付が設定されている(テストとしてJまで) J=2011年12月5日 第2行Aコラムには作業者=田中さん、B,C、Dを自動で求めたい。 第3行Aコラムには作業者=鈴木さん、B,C、Dを自動で求めたい。 第4行Aコラムには作業者=林さん、B,C、Dを自動で求めたい。 Excel のテ-ブルでは 第2行A=田中さん EからFに(当初はB~G)赤色で線を塗り2週間の作業とした。 第3行Aコラムには作業者=鈴木さん、FからGに赤色で線を塗り2週間の作業、 第4行Aコラムには作業者=林さん、HからJに赤色で線を塗り3週間の作業として計画した。 田中さんの作業開始日は2011年10月31日、終了日2011年11月12日、作業期間は2週間との 結果を求めたい。 下記マクロは Sub test() i = Colum(E)     :Eコラムの番号 x = Colum(J)     :Jコラムの番号 y = EtActivitecell.Row For c = i To x Step 1 If Adresse(Row(y), Colum(c), 4) = "D" Then Adresse(EtActivitecell.Row, EtActivitecell.Colum) = ADRESS(Colum(c), 1, 4) End If Next End Sub

  • excel2000マクロ抽出方法

    2つのファイルがあります。ブック名A.XLS シート名 WORK              ブック名b.XLS シート名 SORT              ブック名A.XLS シート名 WORKに下記のデータが入っています。 AD 1300G A227550 000PA505(C列2行目) 200112(F列)200201(G列)200202(H列)200203(I列)200204(J列)200205(K列)→1行目固定データ AD 1300G A227550 000PA533(C列3行目)   ブック名b.XLS シート名 SORTに下記のデータが入っています。 AD 1300G A227550 000PA505(A列2行目)200112(E列)200201(F列)200202(G列)200203(H列)200204(I列)200205(J列) →1行目E列~J列のデータは都度変わっている AD 1300G A227550 000PA533(A列3行目)    データ抽出条件  ブック名A.XLS シート名 WORKの F列~K列の1行目の列データとブック名b.XLS シート名 SORTの  E列~J列の1行目の列データが同じで、ブック名A.XLS シート名 WORKのC列の2行目以降のコードと  ブック名b.XLS シート名 SORTのA列の2行目以降のコードが同じだったら  ブック名b.XLS シート名 WORKの E列~J列の同じ行にデータを入れる。違うときは、  ブック名b.XLS シート名 WORKのデータはそのままにする。 上記の条件を満たしたマクロの記述の仕方を教えてください。 以上よろしくお願いします。

  • Excel VBA 印刷設定/ヘッダー、フッターの設定

    ヘッダー/フッターと印刷範囲の設定について 教えてください。 「取引情報」シートに下記情報があります。※実際は200行ぐらいの情報です。 No. 取引先名称 日付    製品番号 製品名  備考    金額 1 A株式会社 2009/12/17 GG-GAWA ○○薬品 在庫少ない 29,000 2 B株式会社 2009/11/13 HH-TRAR ○○植物 在庫有   12,000 3 C株式会社 2010/1/13 KK-REAS ○○食材 在庫なし 29,890 [質問事項] 「取引情報」シートの取引先名称ごとに別シートにコピーするマクロをつくります。 コピー先のシートのみにヘッダー/フッターと印刷範囲の設定を行いたいと思います。 ※「取引情報」シートはヘッダー/フッターと印刷範囲の設定は不要です。 自動記録を活用して作業していますが、うまくいきません。 参考になるサンプルがあれば、お教えください。 よろしくお願いいたします。

  • 複数のエクセルファイルをひとつにまとめたい(追記したい)

    複数のエクセルファイルをひとつにまとめたい(追記したい) こんにちは。 他にも似たような質問はあったのですが、どうもやりたい形にするにはしっくりこないもので、質問させていただきました。 12か月分の伝票ファイルを自動で追記?みたいな形で一つにまとめたいのですが、何か良い方法はありませんか? 具体的には 1月.xls(ファイル名)    A   B   C . . . 1 日付 金額 項目 2 1/1 1000 あああ 3 1/5 2000 いいい 4 1/8 3000 ううう . . 2月.xls(ファイル名)    A   B   C . . . 1 日付 金額 項目 2 2/10 1000 えええ 3 2/15 2000 おおお 4 2/18 3000 かかか . . 同様に12月まであります。これを↓ まとめ.xls(ファイル名)    A   B   C . . . 1 日付 金額 項目 2 1/1 1000 あああ 3 1/5 2000 いいい 4 1/8 3000 ううう 5 2/10 1000 えええ 6 2/15 2000 おおお 7 2/18 3000 かかか . . といった形でくっつけたいです。 マクロは現在勉強中なため、あまり分かりませんので、できれば具体的なソースも乗せていただけると幸いです。 ちなみに使用しているのはoffice2003です。 申し訳ございませんが、よろしくお願いいたします。m(_ _)m

専門家に質問してみよう