質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

3回答

19057閲覧

ファイルを開かずにヘッダーヘッターの取得

Kussy-

総合スコア59

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2016/06/08 11:11

編集2016/06/08 12:06

いつも丁寧な解答をありがとうございます。

今回はexcel2010のVBAについて教えて下さい。

やりたいこととしては、フォルダ内にあるすべてのExcelブックのファイル名と各ヘッダーとフッターを一覧表に入力する形で取得したいのです。

用途としては、報告書やファイルの提出前に、提出書類を一纏めにしたフォルダにて各ファイルのヘッダーとフッターを確認し、問題があるファイルのみ修正するといったオペレーションをするためです。
ファイル数がそこそこあり、すべて開いて閉じてを繰り返していると手間なのと、大袈裟かもしれませんが開いたタイミングで何らかの人為的なミスが起こらないとも限らないので自動化できるならしたいです。

web上で調べながら試行錯誤してみたところ、フォルダ内のファイルをすべて開くVBAや、閉じている特定のファイルの特定のシートのセル値を取得するVBA、開いているファイルのヘッダーとフッターを取得するVBAはできました。
ただ、フォルダ内のすべてのファイルを開かずにpagesetupの値を取得することはできませんでした。

考え方として、閉じている特定のファイルの特定のシートのpagesetupでヘッダーやフッターを指定すれば出来るのではないかと思っていたのですが、そもそもの考え方がちがうのでしょうか。

実現することは可能でしょうか。
それとも各ファイルを開いて取得するを繰り返すしかないでしょうか。

解決に繋がるヒントやサイトをご存じの方、教えていただけますでしょうか。

よろしくお願いいたします。

追記:今回はメンテナンス性の観点から使用できる言語がexcelVBAのみとなります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

「ファイルを開かずに」という表現が曖昧ですが、EXCELブックとして開かない、ということでしょうか。
COMを使うことで実際にファイルを開かずに処理することはできそうです。

Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim file As String file = "c:\temp\test1.xlsx" Set xlApp = CreateObject("Excel.Application") xlApp.Workbooks.Open Filename:=file, UpdateLinks:=0 'xlApp.Visible = True ' これを有効にするとEXCELファイルが開かれます Set xlBook = xlApp.Workbooks(Dir(file)) Set xlSheet = xlBook.Worksheets("Sheet1") Debug.Print xlSheet.PageSetup.LeftHeader Debug.Print xlSheet.PageSetup.CenterHeader Debug.Print xlSheet.PageSetup.RightHeader xlBook.Close saveChanges:=False xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing

これは1ファイル・1シートを固定で処理してますが、これをフォルダ内のファイル、ブック内のシートを処理するようにすればよろしいかと思います。
また[ツール]-[参照設定]で、"Microsoft Excel XX.X Object Library" を有効にしておいてください。
XX.Xのバージョンはご自分の環境に合わせてください。

投稿2016/06/09 01:09

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kussy-

2016/06/10 00:13

ご回答いただき感謝いたします。 ファイルを…というのはExcelブックを…という意味で相違ありません。 ご回答いただいた内容でやればいいことがわかってきました。 週明けくらいまで時間がかかるかも知れませんが、ご提示いただいた内容で試してみたいと思います。 また行き詰まったときは教えていただければ幸いです。
Kussy-

2016/06/16 02:17

返信が遅くなり申し訳ありません。 ご回答頂きありがとうございました。 ご提示いただいた内容を元にいろいろ触ってみて、 なんとかこの部分についてはやりたいことが出来ました。 ご協力いただきありがとうございました。 また質問させていただいた際には宜しくお願いいたします。
guest

0

閉じている特定のファイルの特定のシートのセル値を取得する

この方法として想定されているのはExecuteExcel4Macroではないかと思います。
確かにこれでファイルを開かずにセルの値を取得することは可能ですが、
(私の知る限りでは)閉じたファイルのヘッダ内容までは取得できないと思います。

ご存知かもしれませんが、ExecuteExcel4MacroはExcelの過去の資産、Excel4.0マクロを実行するものです。
Excel4.0マクロではGET.DOCUMENT(54,[ファイル名]シート名)で指定ファイル名のシートからヘッダ内容を取得(フッター内容は55で取得)できますが、これはあくまで開いているブックが対象となります。


すべて開いて閉じてを繰り返していると手間
何らかの人為的なミスが起こらないとも限らないので自動化したい

これが手作業で1つずつブックを開く作業は手間だしリスクもあるので自動化したい、という解釈でよければ、
「ファイルを開かずに」という部分は「画面上に表示されなければリスクは低いのでファイルは開いても構わない」ものとして、ttyp03さん提示の方法で実現できそうです。
⇒xlApp.Workbooks.Openの部分でファイルを開き、xlApp.Visible = Trueをしないことで非表示のままエクセル操作しています。

「速度等を考慮してファイルを開かず処理したい」のであれば、なかなか難しいのではないかと思います。

投稿2016/06/09 04:26

編集2016/06/09 04:31
jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kussy-

2016/06/10 00:16

ご回答いただき感謝いたします。 現在のバージョンでは対応していないのですね。 画面に表示されなければ問題ありません。 ttyp03さんの方法を試してみようと思います。 また行き詰まったときは教えていただければ幸いです。 ありがとうございました。
jawa

2016/06/10 00:47

>現在のバージョンでは対応していない 誤解を招く書き方になってしまっていたようなので補足します。 最近のExcelではVBE+VBAでのマクロ作成が標準となり、Excel4.0マクロはまず使われない過去の資産となっていますが、使えなくなったわけではありません。 これを使うための手段がExecuteExel4Macroであったり、シートの挿入時にメニューに表示されるExcel4.0マクロシートです。 これを使えば開いていないブックのセルを参照することができますが、ヘッダー内容の取得までは難しい、ということをお伝えしたかったです。
Kussy-

2016/06/10 08:25

補足ありがとうございます。 使えないわけではないけれど、現在の主流ではないということですね。 奥が深いです。。。 親切に教えていただきありがとうございました。
guest

0

例えば VBScript を使うのはどうでしょう。
ドラッグ&ドロップで使うならこんな感じで。

VBScript

1Option Explicit 2Dim args,i,book,sheet 3 4Set xls = CreateObject("Excel.Application") 5xls.DisplayAlerts = FALSE 6xls.Visible = TRUE 7 8Set args = WScript.Arguments 9For i=1 To args.count Step 1 10 Set book = xls.WorkBooks.Open(args.item(i)) 11 Set sheet = book.ActiveSheet 12 ' 13 '処理 14 ' 15 Set sheet = Nothing 16 Set book = Nothing 17Next 18Set xls = Nothing

投稿2016/06/08 11:58

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kussy-

2016/06/08 12:04

ご回答いただき感謝いたします。 条件が不足しておりました。申し訳ありません。 私自身はVBSやaccessを使えば割りとすんなりいくのではと思っていたのですが、お恥ずかしい話、私の職場には私以外にVBSやaccessを扱える人がおらず、メンテナンス性の制約から今回はexcelVBAのみと言われてしまいました。 せっかくコードを作っていただいたのに大変申し訳ありません。 今後機会があれば参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問