- ベストアンサー
EXCELのすべてのシートから特定セルの値だけを別のシートに書き出すには
excelのマクロで別のEXCELファイルを選択して、たとえば、A3、E4、F10のセルの値だけをそのファイル内のシートすべて(シート数は変化)に対して別のEXCELファイルの1シートに各項目としてまとめて書き出すマクロを教えて下さい。 宜しくお願いします。
- o8ji
- お礼率55% (22/40)
- Visual Basic
- 回答数3
- ありがとう数2
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
書き出し先が開いた対象ブックの1シートなのか、新規ブックのシートなのか質問からは読み取りづらかったので、対象ブックの全シートについて処理を行う所だけ回答します。 例では、書き出し先は自ブック(マクロの入っているブック)の1シート目になります。 全シートの特定セルの値を取り出す便利な関数があるわけではありませんので、シート数分のループを回して該当セルの値を取り出します。 Sub Sample() Workbooks.Open Filename:="C:\Book1.xls" '対象Bookオープン nSheetCount = ActiveWorkbook.Sheets.Count '対象Bookのシート数 OutputRow = 1 '書き出す行番号 '対象ブックの全ブックをループで回す For i = 1 To nSheetCount ActiveWorkbook.Sheets(i).Select 'i番目のシートを選択 '自ブックのSheet1に書き出す ThisWorkbook.Sheets(1).Cells(nOutputRow, 1) = Range("A3") nOutputRow = nOutputRow + 1 ThisWorkbook.Sheets(1).Cells(nOutputRow, 1) = Range("E4") nOutputRow = nOutputRow + 1 ThisWorkbook.Sheets(1).Cells(nOutputRow, 1) = Range("F10") nOutputRow = nOutputRow + 1 Next i ActiveWindow.Close 'アクティブなブック=対象Book をクローズ End Sub なお、サンプルですので、変数宣言やエラー処理は行っていません。 ご参考までに。
その他の回答 (2)
- Po-ni
- ベストアンサー率52% (20/38)
o8jiさんこんばんは。それでは書いていきますね。 1.まず、エクセルを開いて、シート名「Sheet1」「Sheet2」「Sheet3」を作成してください。(まあ、ファイル新規作成で出来ると思いますが^^) 2.「Sheet2」のセルA1,A2にそれぞれ a1,a2 と入れてください。 「Sheet3」のセルA1,A2にそれぞれ b1,b2 と入れてください。 3.「Sheet1」のセルA1,A2,A3にそれぞれ、Sheet2,Sheet3,Sheet4 と入れてください。 4.さて、ここからがミソです。 「Sheet1」のB1に、こう入れてみてください。 =INDIRECT(ADDRESS(1,1,,,A1)) 次いで「Sheet1」のC1に、こう入れてみてください。 =INDIRECT(ADDRESS(2,1,,,A1)) どうでしょう? a1 a2 の文字が表れたと思います。 5.次に、セルB1,C1をコピーして、B2,C2 B3,C3 へ貼り付けしてください。 すると、b1 b2 #REF #REF の文字が表れたと思います。 ここまで来ると、薄々感じていると思います。各シートのセルA1 A2を引用しているのです。ただ、「Sheet4」は存在しないので、#REF になっています。そこで、 6.シート「Sheet4」 を作って、その中でセルA1,A2にそれぞれ c1,c2 と入れてください。そして「Sheet1」に戻ると・・・☆。 解説 INDIRECT関数 ADDRESS関数を組み合わせたものです。各々関数の詳細は調べてみてくださいね。まあ、簡単に書きますと、 =INDIRECT(ADDRESS(1,1,,,A1)) は、 セルA1に書かれたシート内の、行番号1,列番号1を表示しなさいという意味です。試しに開いたセルに =ADDRESS(1,1,,,"Sheet2")と打ってみてください。意味が分かると思います。 これの恐ろしいところは、もし、 =INDIRECT(ADDRESS(A1,A2,,,A3)) と書き、セルA1 A2 A3 にそれぞれ、「2」「3」「Sheet1」と入力すると、 Sheet1!$C$2 のセルに書かれた内容を表示するという代物です。 これは、LOOKUP関数のように限られた範囲で条件に合うものを抽出するという機能はありませんが、同一ファイル内であれば、どのシートのどのセルでも引用出来るという、範囲∞の引数方法なんです。 ちなみに、Sheet1!$C$2 → Sheet1!C2 と言う風に、絶対参照から相対参照に変える方法もありますので(ADDRESS関数に秘密有り)、試してみてください。
お礼
Po-niさん。 求めていた方法ではありませんでしたが、関数での結果表示。参考になりました。ありがとうございました。
- Po-ni
- ベストアンサー率52% (20/38)
こんにちは。 えっと、マクロは同じプログラムを繰り返す仕組みですから、シートの増減によって、マクロを書き換えるしか無いのではないでしょうか。 もしかしたら、私の知識不足かもしれませんが・・・。 別の方法(関数を用いた比較的簡単な方法)でのアプローチを思い出しましたが、今回のお題は「マクロ」ですから省略します。もしマクロにこだわらないなら、また私の知る方法を提示させていただきますね。 (ちなみにその方法は、同じファイル内のシート2~∞の特定セルをシート1に集める方法です)
補足
早速のご回答ありがとうございます。 VBAで、1つのEXCELファイル内の各シートを指定しないですべてを処理する方法が知りたかったのですが、多数のシートがあり、シート名に統一性がなくても、関数で処理できるようでしたら、教えていただけますでしょうか? 宜しくお願いします。
関連するQ&A
- エクセルマクロで特定シートの特定セルの中身取得
エクセルのマクロで、ファイル選択(GetOpenFilename)で取得したファイルの特定のシート(sheet1等固定のシート名)とそのシートの特定のセル(A1等固定のセル)にある数値を取得し、マクロ起動したエクセルのあるセルに貼り付けたいのですが、どうすればよいでしょうか。 かなり略してますが、 nama=GetOpenFilename で選択したファイルのファイル名を Range("A1") = Dir(name) で貼り付け、その横のセル(A2)に name#sheet!A1を貼り付けたいのです。 ご存知な方、すみませんが教えていただけますでしょうか。 (エクセルは2003です。)
- ベストアンサー
- オフィス系ソフト
- エクセル2003で別のマクロで選択したセルに別のシートからコピーして貼り付けるマクロ
別のマクロで選択したセルに別のシートからコピーして貼り付けるマクロ、どうしても、このマクロが作れないです。 難題すぎて・・・・ 貼り付けるセルの値は選択ボタンによって変わる仕様ですが、エクセル2003で可能なんでしょうか? 難しすぎてコードが全然解らない状態です どなたかご教授願えれば幸いです。
- ベストアンサー
- オフィス系ソフト
- エクセルで、範囲内の該当セルを探してその一つ下のセルの値を全て加算した
エクセルで、範囲内の該当セルを探してその一つ下のセルの値を全て加算したいのです。どうすればよいですか? 例: _A, _B, _C, _A, _B, _D, _A, _F 20, _5, 40, 30, 20, 80, 40, 30 という範囲があった時に 項目 _A, _B, _C, _D, _E, _F 合計 90, 25, _0, 80, _0, 30 という集計がおこないたいのです。 データ量が結構な数ありますので、手動は避けたいのです。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 別のシートのセルと同じ値を返すには?
エクセル2000です =a1と書けば他のセルにもa1の値を返せますが、 他のシートのセルと同じ値を返すにはどうすればよいのでしょうか?
- ベストアンサー
- オフィス系ソフト
- エクセルVBAで条件に適合したシートを全て選択にするには
いつもお世話になります。 エクセルでシート数が100枚あり各シートのA1には0か1かの値が入っているとします。 その中で、A1の値が1のシートをすべて選択するにはどのようなマクロを組めばいいのでしょうか?
- ベストアンサー
- オフィス系ソフト
- エクセルのマクロで、セルの値を参照してジャンプ
エクセルのマクロで、セルの値を参照して、 別シートにジャンプして貼り付けたいと思っています。 <Sheet1> | A B C ------------------------------------ 1| A1 あ 100 2| B5 い 50 3| C7 う 80 4| D3 え 20 5| E9 お 40 <Sheet2> | A B C D E ------------------------------------ 1| あ 2| 100 3| え 4| 20 5| い 6| 50 7| う 8| 80 9| お 10| 40 といったイメージです。(お分かり頂けますか?) Sheets1!B1:C1を選択し、A1のセルの値を参照して、Sheets2!A1にジャンプして、 行列入れ替えて貼り付ける、といったマクロを組みたいのですが、 セルの値を参照する部分が分かりません。 実際はSheets2の様なシートは複数あり、1つのリストから複数の形式を変えた表を 作りたいと思っています。 Sheets2以降のシートに見出し行を加え、VLOOK関数を組み込んだ表を作っておき、 結果を貼り付けて見出し行を削除する、といったマクロは組めるのですが、 セルを参照してジャンプして貼り付けてくれると便利だと思い質問させて頂きました。 どなたかお知恵を拝借できましたら嬉しいです。 宜しくお願い致しますm(_ _)m
- ベストアンサー
- オフィス系ソフト
- Excelのマクロを使ってワークシート1にワークシート2のセルの値をコ
Excelのマクロを使ってワークシート1にワークシート2のセルの値をコピーするマクロを作りたいと思っています。 例えば、ワークシート2のA1~A30のセルには1~30の値が順に入っているとします。 それをA1から3の倍数分、つまりA1,A3,A6,A9,・・・,A27,A30の値を ワークシート1のA1~A11のセルに自動で挿入してくれるマクロってどう作ればいいのでしょうか? わかりにくいかもしれませんが、よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- 別のブックのセルの値をコピーするマクロについて
ExcelのVBAのマクロに関する質問です。 複数のブックのセルの値をコピーするマクロについての質問なのですが、現在以下のファイルがあります。 サンプル1.xls サンプル2.xls サンプル3.xls データ.xls そして、 サンプル1のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA1~D1まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA1~D1まで、 サンプル2のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA2~D2まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA2~D2まで、 サンプル3のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA3~D3まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA3~D3まで、 上記のような形でコピーしたいのですがマクロがわかりません。 データ.xlsにボタンを作成し、そのボタンを押すとこの処理が実行されるようにしたいです。 どなかた方法を教えていただけますでしょうか。ご回答お待ちしております。 ※ファイルの名前は今回はサンプル1などとしましたが実際は違う名前も使用します。 また、ファイルの数も今回は3つにしましたが増減します。
- ベストアンサー
- Visual Basic
- エクセルのマクロ(値を検索して別シートにコピー)
エクセルで下記のマクロをご教示いただけるでしょうか。 1.Sheet1のアクティブセルの右に5つ、下に1つのセルを起点として下方向に6セル分をコピー (例)Sheet1のアクティブセルがA2だとすると、F3~F8をコピー 2.Sheet1のアクティブセルの値(yy/mm/dd形式の日付)と同じ値のセルをSheet2のA列から検索し、該当セルの右に2つ分のセルに行列を入れ替えて値のみをペースト (例)Sheet1のアクティブセル(A2)の値がSheet2のA4セルにあるとすると、Sheet2のC4に行列を入れ替えて値のみペースト 3.Sheet1のアクティブセルの値がSheet2のA列に2つ以上あれば、「同じ日付が複数あります。」というメッセージを表示
- ベストアンサー
- Visual Basic
- エクセルのセルの値を別のシートから反映
エクセルのセルの値を別のシートから反映させたいのですが「='[○○○(▲▲▲).xls]◇◇◇'!$A$1」といった数式がそのまま表示されてしまい、他のシートから反映できません。これは何が原因なのでしょうか。
- ベストアンサー
- オフィス系ソフト
お礼
mt2008 さん。 わかりやすい回答でした。とても助かりました。ありがとうございました。最初、エラーになりましたが、 > OutputRow = 1 '書き出す行番号 を nOutputRowに訂正してエラーも解消し、その後読み込むファイルの選択や、項目に分けて書き込むようにアレンジして、やりたかったVBAができあがりました。ありがとうございました。