No.6ベストアンサー
- 回答日時:
一部修正します。
内容:with - end with 構文の中での記述漏れ
.Range(.Cells(xxx--), .Cells(xxx--)).Value = myData(i)
Range,cellの直前に、"."を追加しました。
一応、なくても動きますが、何のために、 withを使ったのと???となります。
Sub Macro1()
Dim myData(201) As Variant
Dim myDatasheets As Integer
Dim myRowPosition As Integer
Dim myRow As Integer
Dim myColumn As Integer
For i = 1 To Worksheets.Count
myData(i) = Worksheets(i).Cells(1, 1).CurrentRegion
Next
myDatasheets = i - 1
Worksheets.Add after:=Worksheets(Worksheets.Count)
myRowPosition = 0
With Worksheets(myDatasheets + 1)
For i = 1 To myDatasheets
myRow = UBound(myData(i), 1)
myColumn = UBound(myData(i), 2)
.Range(.Cells(myRowPosition + 1, 1), .Cells(myRowPosition + myRow, myColumn)).Value = myData(i)
myRowPosition = myRowPosition + myRow
Next
End With
End Sub
尚、このマクロを日ごろの仕事に使うためには、更に改造が必要です。
逆に、その分、今のままでは、下記事項をユーザーに要求します。
○各シートにて必ず、Header(「部品名」、「個数」)が存在すること
本当は、このヘッダーの存在をチェックして、処理するようにした方がよいとは思います。
○マクロを使えるようにするためには、セキュリティを少なくとも「Middle」に設定する必要があります。2003と2010では、その設定の仕方が異なります。
必要なら、言っていただければ、お答えします。
atom28様
この度はご回答ありがとうございました。
お手数お掛けしました。
大変わかりやすくとても勉強になりました。
またマクロも作って頂きありがとうございます。
こちらのマクロを実行した所、うまくできました。
マクロの実行結果のsheetを統合して、自分の思った通りの結果がでました。
本当に感謝しております。今までの作業時間がかなり短縮されました。
この度はありがとうございました。
No.5
- 回答日時:
まずは、下記を試してください。
前提は、シート数は、200枚です。
全シート上のデータの行数を集めた数は、約32000個(integer)を上限とします。
これ以上であれば、変数の属性を変える必要があります。
(1) すべてのシートの情報を単純に1枚のシートに持ってきます。
これは、下方に示すマクロを使います。
一番右に、シートが自動生成されます。
前提:各シート上のデータの列の数は、必ずしも、同じである必要はありません。
また、行の数は、同じであることは、全く期待しておりません。
(2)単純に集めたデータ(一番右のシート)に対して、PIVOTを使って、集計します。
PIVOTは、本がたくさん売りに出されていますから、勉強してください。
しかし、参考までに、行に「部品名」、データに「個数」です。データの属性は「合計」です。
尚、単純に集めたシートにて、ヘッダー(「部品名」、「個数」)が、シート数分集まっていますが、
実害はないので、無視します。
(3)最後にPIVOTの表の部分を転記するのですが、PIVOTのシートにて、全セル選択、コピーして、
別の新しいシートを作成、cells(1,1)を選択した上で、「形式を選択して貼り付け」としてください。
-----------------------------------------
マクロの組み込み方
データシートのあるエクセルブックにて、
(a)ツール/マクロ/新しいマクロの記録 (excel2003の場合、2010でも、マクロの記録はあります)
記録開始したら、即終了とします・・・・マクロの枠を作成しただけ。
(b)先に作成したマクロの枠(多分名称は「Macro1」、この部分に、
下のMacro1()の記述をそっくり、コピペする。
(c)マクロの実行
ツール/マクロ/マクロ(Excel2003の場合) で、Macro1()を選んで、「実行」とします。
Sub Macro1()
Dim myData(201) As Variant
Dim myDatasheets As Integer
Dim myRowPosition As Integer
Dim myRow As Integer
Dim myColumn As Integer
For i = 1 To Worksheets.Count
myData(i) = Worksheets(i).Cells(1, 1).CurrentRegion
Next
myDatasheets = i - 1
Worksheets.Add after:=Worksheets(Worksheets.Count)
myRowPosition = 0
With Worksheets(myDatasheets + 1)
For i = 1 To myDatasheets
myRow = UBound(myData(i), 1)
myColumn = UBound(myData(i), 2)
Range(Cells(myRowPosition + 1, 1), Cells(myRowPosition + myRow, myColumn)).Value = myData(i)
myRowPosition = myRowPosition + myRow
Next
End With
End Sub
No.4
- 回答日時:
こんばんは!
↓の画像のようにすべてのSheetの配置が統一されていて、A列(部品名)の並びも一緒であれば
「串刺し計算」が可能です。
Sheet見出し(Excel画面の下にSheet名が表示されているところ)の一番左側Sheetに
Sheet見出しの2番目以降の数量を集計する場合の「串刺し計算」のやり方です。
Sheet1(一番左側のSheet)のB2セルを選択 → 画面右上にあるオートサム(Σ)のアイコンをクリック → 2番目SheetのB2セルを選択
→ Sheet見出しの左側の右向き▶を選択しShiftキーを押しながら最後のSheet見出しをクリック → Enterで確定!
仮にSheetが100ある場合は数式バーに
=SUM(Sheet2:Sheet100!B2)
と表示されます。これをフィルハンドルで下へコピー!
これですべてのSheetの「部品名」の合計数量がB列に表示されます。
※この手間が面倒な場合はVBAになりますが一例です。
Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り、マクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub 集計() 'この行から
Dim i As Long, k As Long, lastRow As Long
With Worksheets(1)
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
Range(.Cells(2, "B"), .Cells(lastRow, "B")).ClearContents
For k = 2 To Worksheets.Count
For i = 2 To lastRow
With .Cells(i, "B")
.Value = .Value + Worksheets(k).Cells(i, "B")
End With
Next i
Next k
End With
End Sub 'この行まで
※ マクロの場合は各Sheetの変更があるたびにマクロを実行する必要があります。
尚、一旦マクロを実行すると元に戻せませんので別Bookでマクロを試してみてください。
万一Sheet1に数式が入っている場合は数式も消えて実データになってしまいます。m(_ _)m
回答ありがとうございます。
お手数をお掛けしまして大変感謝しております。
「串刺し計算」大変勉強になりました。
またマクロも作って頂きありがとうございました。
大変参考になりました。ありがとうございました。
No.3
- 回答日時:
統合の意味がわかりません。
もう少し、具体的に、入力情報が、何で、出力情報が何を明確に教えていただけないでしょうか?
例えば、
シートその1
A1 部品名 B1 個数
A2 アメ B2 10
A3 チョコ B3 20
シートその2
A1 部品名 B1 個数
A2 アメ B2 10
A3 チョコ B3 20
統合するとは、
例えば、シート100番目に
A1 部品名 B1 個数
A2 アメ B2 20
A3 チョコ B3 40
やりたいこと如何によっては、単純コピペ、PIVOTを使うとかでも
方法は、いくらでも考えられます。
よろしくお願いします。
この回答への補足
ありがとうございます。
補足させて頂きます。部品名はばらばらです。
シートその1
A1 部品名 B1 個数
A2 アメ B2 10
A3 チョコ B3 20
A3 スナックB3 20
シートその2
A1 部品名 B1 個数
A2 アメ B2 30
A3 スナック B3 20
統合するとは、
例えば、シート100番目に
A1 部品名 B1 個数
A2 ピザ B2 20
A3 スナックB3 40
A4 アメ B2 30
などなど、宜しくお願い致します。
No.2
- 回答日時:
一つのファイル内でしたら、計算式を入力する際に、シートのタブを複数選択すれば、選択したシートの全ての同一セルを対象とした計算式を入力出来ます。
→参考URLしかし、何百も有っては、この手法は使えませんね。
と言うことで、No.1さんの言われる通り、マクロの勉強をしましょう。
参考URL:http://hamachan.info/excel/kusizasi.html
No.1
- 回答日時:
一般的に、似たような作業だけど、少しずつ違うことを何度も繰り返して、正確に・素早く行うことは、人間は苦手です。
ですので、そういう処理を行うプログラムを作ることになります。
エクセルであれば、エクセルVBAという言語がありますから、それを使ってプログラミングします。
もちろん、どんなロジックで作ればいいかを考えて、それを実行するコードを打ち込むことになるので、それなりの考える時間が必要です。
もし、VBAという言語を知らないなら、その言語から勉強する時間も必要です。
それでも、プログラムは、人間とは比べものにならない速度で処理してくれますから、頑張る価値はあります。
ちなみに、ある方が、エクセルの表を作るのに、頑張ったけど、その作業があまりに面倒で挫折したという表がありました。
その表を作るためのデータ処理プログラムを作るのに、私が2日くらいかかりましたけど、完成したプログラムは、10秒もかからずに、処理結果を出してきました。
大手の書店に行けば、エクセルVBAの書籍が沢山あると思います。その中で、参考になる本を購入して、チャレンジされてみればいいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- スーパー・コンビニ 「コンビニで エクセルをプリントアウト」することができますか? 8 2022/06/16 15:54
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- Excel(エクセル) 【Excel質問】別シートにある複数の同型の表から、同じ行項目にある数字を集計する 4 2023/02/16 00:14
- その他(プログラミング・Web制作) python文字化けエラーが発生しているようです 3 2022/04/13 19:41
- その他(Microsoft Office) オフィス365のエクセル 3 2023/06/29 13:10
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) VBA For Each 〜 複数条件について 3 2022/10/20 20:05
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
お肉の下のシートを煮込んでし...
-
エクセルを利用して、日計と累...
-
excel シート1の奇数(偶数)...
-
条件にマッチする行を抽出するV...
-
エクセルのシートをコピーして...
-
2つのシート間での重複データ...
-
エクセルで2つのシートに同じ名...
-
エクセルでフラグがたっている...
-
エクセルで○のついた項目を抽出
-
チュロス袋の代用
-
毎日の日計を別シートに自動で...
-
エクセルで1行だけ数式が反映さ...
-
EOMONTH関数の代わり
-
指定した条件でTRANSPOSE関数を...
-
A1セルに入力したら、入力時間...
-
EXCELで○ヶ月を○年○ヶ月に変換...
-
複数の文字列のいずれかが含ま...
-
エクセルの複数のセルを一括で...
-
Excelで同じセルに箇条書きをし...
-
Excelの入力規則で2列表示したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
お肉の下のシートを煮込んでし...
-
エクセルを利用して、日計と累...
-
エクセルのシートをコピーして...
-
2つのシート間での重複データ...
-
エクセルで1行だけ数式が反映さ...
-
条件にマッチする行を抽出するV...
-
エクセルで2つのシートに同じ名...
-
毎日の日計を別シートに自動で...
-
エクセルで○のついた項目を抽出
-
指定した条件でTRANSPOSE関数を...
-
エクセルでフラグがたっている...
-
エクセル ○印がついている行を...
-
チュロス袋の代用
-
Excelで複数のシートに列のグル...
-
excel シート1の奇数(偶数)...
-
EXCELで受験票を作成したい(名...
-
excelマクロで複数シート間のデ...
-
複数シートのセルの 記号の数...
-
VBA 縦のデータを横にするコード
-
エクセル シート毎に数字を変...
おすすめ情報