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

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

ただいまの
回答率

91.78%

  • VBA

    923questions

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

  • Windows

    876questions

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

  • Excel

    797questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

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

解決済

回答 3

投稿 2016/06/08 20:11 ・編集 2016/06/08 21:06

  • 評価
  • クリップ 0
  • VIEW 1,765

Kussy-

score 13

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

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

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

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

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

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

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

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+2

「ファイルを開かずに」という表現が曖昧ですが、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 10:09

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2016/06/10 09:13

    ご回答いただき感謝いたします。

    ファイルを…というのはExcelブックを…という意味で相違ありません。

    ご回答いただいた内容でやればいいことがわかってきました。

    週明けくらいまで時間がかかるかも知れませんが、ご提示いただいた内容で試してみたいと思います。

    また行き詰まったときは教えていただければ幸いです。

    キャンセル

  • 2016/06/16 11:17

    返信が遅くなり申し訳ありません。
    ご回答頂きありがとうございました。

    ご提示いただいた内容を元にいろいろ触ってみて、
    なんとかこの部分についてはやりたいことが出来ました。

    ご協力いただきありがとうございました。
    また質問させていただいた際には宜しくお願いいたします。

    キャンセル

+1

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

Option Explicit
Dim args,i,book,sheet

Set xls = CreateObject("Excel.Application")
xls.DisplayAlerts = FALSE
xls.Visible = TRUE

Set args = WScript.Arguments
For i=1 To args.count Step 1
  Set book = xls.WorkBooks.Open(args.item(i))
  Set sheet = book.ActiveSheet
  '
  '処理
  '
  Set sheet = Nothing
  Set book = Nothing
Next
Set xls = Nothing

投稿 2016/06/08 20:58

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2016/06/08 21:04

    ご回答いただき感謝いたします。

    条件が不足しておりました。申し訳ありません。

    私自身はVBSやaccessを使えば割りとすんなりいくのではと思っていたのですが、お恥ずかしい話、私の職場には私以外にVBSやaccessを扱える人がおらず、メンテナンス性の制約から今回はexcelVBAのみと言われてしまいました。

    せっかくコードを作っていただいたのに大変申し訳ありません。

    今後機会があれば参考にさせていただきます。

    キャンセル

+1

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

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


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

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

投稿 2016/06/09 13:26

編集 2016/06/09 13:31

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2016/06/10 09:16

    ご回答いただき感謝いたします。

    現在のバージョンでは対応していないのですね。

    画面に表示されなければ問題ありません。
    ttyp03さんの方法を試してみようと思います。

    また行き詰まったときは教えていただければ幸いです。
    ありがとうございました。

    キャンセル

  • 2016/06/10 09:47

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

    これを使えば開いていないブックのセルを参照することができますが、ヘッダー内容の取得までは難しい、ということをお伝えしたかったです。

    キャンセル

  • 2016/06/10 17:25

    補足ありがとうございます。

    使えないわけではないけれど、現在の主流ではないということですね。

    奥が深いです。。。

    親切に教えていただきありがとうございました。

    キャンセル

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

ただいまの回答率

91.78%

関連した質問

同じタグがついた質問を見る

  • VBA

    923questions

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

  • Windows

    876questions

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

  • Excel

    797questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

閲覧数の多いVBAの質問