下記のプログラムを参考にして、各ブックごとのページ数の合計を出力するには、どうしたら良いでしようか。宜しくお願いします。
各ブックごととは、指定したフォルダ内にある複数のブックです。どうぞ宜しくお願いします。 指定したフォルダ内にあるファイル名とページ数を取得するのが目的です。ファイル名までは出力されますが、ページ数の取得でうまくいかず、下記のプログラムを参考に作成したいと考えております。
出力イメージ
テーマ 工程 ファイル名 ページ数
1 設計 .xlsx 3ページ
2 設計 .xlsx 2ページ
'=============================================
' ページ数を取得してシート一覧表を作成
'=============================================
Sub ページ数を取得してシート一覧表を作成()
Dim mysheet As Worksheet '各シート
Dim page_sum As Integer 'ページ数
Dim list() As Variant 'シート名とページ数格納用
Dim i As Integer '配列添え字用
Dim maxi As Integer '配列最大添え字用
'-----------------------------------------
' シート名とページ数を配列に代入
'-----------------------------------------
maxi = 0
'ブックの各シートごとに
For Each mysheet In Worksheets
'シートのページ数取得
mysheet.Activate
page_sum = Application.ExecuteExcel4Macro("get.document(50)")
'配列にシート名とページ数を代入
ReDim Preserve list(1, maxi)
list(0, maxi) = mysheet.Name
list(1, maxi) = page_sum
maxi = maxi + 1
Next mysheet
'-----------------------------------------
' 配列をブックに転記
'-----------------------------------------
'リストタイトル設定
Range("A1").Value = "シート名"
Range("B1").Value = "ページ数"
'配列転記
For i = 0 To maxi - 1
Range("A" & i + 2) = list(0, i)
Range("B" & i + 2) = list(1, i)
Next
End Sub
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
ご質問の内容、拝見しました。サンプルを作成してみました。説明が冗長でしたらスミマセン...
自分のブック内を参照するときはWorksheetsと書くだけで自分自身のWorkbookオブジェクト(ActiveWorkbookあるいはThisWorkbook)を暗黙的に参照しているのですが
(つまり For Each mysheet In Worksheets は、(省略せずに書くと)内部的には For Each mysheet In Application.ActiveWorkbook.Worksheets のようになっています)
他のブックを参照するときは、OpenやAdd関数で明示的に開いて、そこで得たオブジェクト変数から参照や操作を行います。
Option Explicit
Public Sub Sample()
' 転記先(アクティブなシート?)をオブジェクト変数myWsにセットしておきます。
Dim myWs as Excel.Worksheet
Set myWs = ActiveSheet
'※ファイルパスは投稿時バックスラッシュ(\)になってしまいましたが、円マーク(¥)です
Dim folderPath As String
folderPath = "(フォルダ)\*.xls*"
' Dir関数でフォルダ内のファイルを列挙します
Dim fileName As String
fileName = Dir(folderPath)
Do Until (fileName = "")
' ブックのファイルパスをxlsFilePathに生成します。
Dim xlsFilePath As String
xlsFilePath = folderPath & "\" & fileName
' ブックを開き、参照用につかうオブジェクト変数wbへ格納します(念のために、今回はReadOnly=True)
Dim wb As Excel.Workbook
Set wb = Workbooks.Open(xlsFilePath, , True)
' ブックwbの各シートをFor Eachで列挙して、参照用につかうオブジェクト変数wsに格納して操作します。
Dim ws As Excel.Worksheet
For Each ws In wb.Worksheets
' ここに、処理(ページ数の計算と、集計セルへの出力)を書きます。
MsgBox ws.Name
myWs.Range("A1").Value = "サンプル" ' 例
Next
' ブックの操作が終わったので閉じます。
wb.Close
fileName = Dir() ' これ以上ブックがなければ fileName = ""
Loop
End Sub
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
対象のブックを既に開いているのであれば、シートをループする前にブックをループしてあげればいいと思います。
'ブックのループ
For Each mybook In Workbooks
'ブックごとに合計ページ数をリセット
page_sum = 0
'取得したブックのシートをループ
For Each mysheet In mybook.Worksheets
・・・
'合計ページ数にシートのページ数を加算
page_sum = page_sum + Application.ExecuteExcel4Macro("get.document(50)")
・
・
・
対象ブックを開きながら処理する場合も、やはりシートをループする前に対象ブック数分のループを行い、ブックのオープン・クローズをしながらページ数を加算していけばいいと思います。
'ブックのループ
For ~ ブック数分のループ
Set mybook = Workbooks.Open("xxx.xlsx")
'シートのループ
For ~ ブック数分のループ
'ページ数の加算
Next シート
mybook.Close
Next ブック
完成形のコードは提示していませんが、がんばってみてください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 91.04%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
hsk
2016/01/27 09:24
おはようございます。「各ブックごと」とご質問にありますが、自分のブックだけではなくて、どこかほかにある複数のブック(ファイル)について処理を行うと考えて合っているでしょうか?どこかのフォルダ内に入っているブック群でしょうか?もしくは、集計シートに対象のブックのファイル名を書いておいたりするのでしょうか?
sehiro
2016/01/27 10:15
おはようございます。質問内容が不足しており申し訳ありません。 各ブックごととは、指定したフォルダ内にある複数のブックです。どうぞ宜しくお願いします。 指定したフォルダ内にあるファイル名とページ数を取得するのが目的です。ファイル名までは出力されますが、ページ数の取得でうまくいかず、上記のプログラムを参考に作成したいと考えております。 出力イメージ テーマ 工程 ファイル名 ページ数 1 設計 .xlsx 3ページ 2 設計 .xlsx 2ページ