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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

13166閲覧

vba エクセルページ数 取得 について

sehiro

総合スコア13

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

2クリップ

投稿2016/01/26 23:14

編集2016/01/27 01:19

下記のプログラムを参考にして、各ブックごとのページ数の合計を出力するには、どうしたら良いでしようか。宜しくお願いします。
各ブックごととは、指定したフォルダ内にある複数のブックです。どうぞ宜しくお願いします。 指定したフォルダ内にあるファイル名とページ数を取得するのが目的です。ファイル名までは出力されますが、ページ数の取得でうまくいかず、下記のプログラムを参考に作成したいと考えております。
出力イメージ
テーマ 工程 ファイル名 ページ数
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

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

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

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

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

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

hsk

2016/01/27 00:24

おはようございます。「各ブックごと」とご質問にありますが、自分のブックだけではなくて、どこかほかにある複数のブック(ファイル)について処理を行うと考えて合っているでしょうか?どこかのフォルダ内に入っているブック群でしょうか?もしくは、集計シートに対象のブックのファイル名を書いておいたりするのでしょうか?
sehiro

2016/01/27 01:15

おはようございます。質問内容が不足しており申し訳ありません。 各ブックごととは、指定したフォルダ内にある複数のブックです。どうぞ宜しくお願いします。 指定したフォルダ内にあるファイル名とページ数を取得するのが目的です。ファイル名までは出力されますが、ページ数の取得でうまくいかず、上記のプログラムを参考に作成したいと考えております。 出力イメージ テーマ 工程 ファイル名 ページ数 1 設計 .xlsx 3ページ 2 設計 .xlsx 2ページ
guest

回答2

0

ベストアンサー

ご質問の内容、拝見しました。サンプルを作成してみました。説明が冗長でしたらスミマセン...
自分のブック内を参照するときはWorksheetsと書くだけで自分自身のWorkbookオブジェクト(ActiveWorkbookあるいはThisWorkbook)を暗黙的に参照しているのですが
(つまり For Each mysheet In Worksheets は、(省略せずに書くと)内部的には For Each mysheet In Application.ActiveWorkbook.Worksheets のようになっています)
他のブックを参照するときは、OpenAdd関数で明示的に開いて、そこで得たオブジェクト変数から参照や操作を行います。

VB

1Option Explicit 2 3Public Sub Sample() 4 ' 転記先(アクティブなシート?)をオブジェクト変数myWsにセットしておきます。 5 Dim myWs as Excel.Worksheet 6 Set myWs = ActiveSheet 7 8 '※ファイルパスは投稿時バックスラッシュ(\)になってしまいましたが、円マーク(¥)です 9 Dim folderPath As String 10 folderPath = "(フォルダ)\*.xls*" 11 12 ' Dir関数でフォルダ内のファイルを列挙します 13 Dim fileName As String 14 fileName = Dir(folderPath) 15 16 Do Until (fileName = "") 17 ' ブックのファイルパスをxlsFilePathに生成します。 18 Dim xlsFilePath As String 19 xlsFilePath = folderPath & "\" & fileName 20 21 ' ブックを開き、参照用につかうオブジェクト変数wbへ格納します(念のために、今回はReadOnly=True) 22 Dim wb As Excel.Workbook 23 Set wb = Workbooks.Open(xlsFilePath, , True) 24 25 ' ブックwbの各シートをFor Eachで列挙して、参照用につかうオブジェクト変数wsに格納して操作します。 26 Dim ws As Excel.Worksheet 27 For Each ws In wb.Worksheets 28 ' ここに、処理(ページ数の計算と、集計セルへの出力)を書きます。 29 MsgBox ws.Name 30 myWs.Range("A1").Value = "サンプル" ' 例 31 Next 32 33 ' ブックの操作が終わったので閉じます。 34 wb.Close 35 36 fileName = Dir() ' これ以上ブックがなければ fileName = "" 37 Loop 38End Sub

投稿2016/01/27 02:04

編集2016/01/27 02:20
hsk

総合スコア728

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

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

sehiro

2016/01/27 02:07

ありがとうございます。参考にさせて頂きます。
sehiro

2016/01/27 05:12

たびたびすいません。下記のvbaで、 ' ここに、処理(ページ数の計算と、集計セルへの出力)を書きます。 とありますが、今回はブック内の総ページ数のみ、出力したいので、総ページのみ出力するには、どのような処理にすれば良いかもアドバイス頂けないでしようか。宜しくお願い致します。 ' ブックwbの各シートをFor Eachで列挙して、参照用につかうオブジェクト変数wsに格納して操作します。 Dim ws As Excel.Worksheet For Each ws In wb.Worksheets ' ここに、処理(ページ数の計算と、集計セルへの出力)を書きます。 MsgBox ws.Name myWs.Range("A1").Value = "サンプル" ' 例 Next
hsk

2016/01/27 05:24

ブックの総ページ数=ブック内の全シートの合計ページ数、で合っているでしょうか? でしたら、 シートを列挙するループの前にpage_sumをゼロクリアして page_sum = page_sum + Application.ExecuteExcel4Macro("get.document(50)") で、地道に加算していくことになるかと思います。 調べてみましたら、ほぼズバリのページが見つかりましたよ! http://d.hatena.ne.jp/asuka0801/20110605/1307232920 'ページ数を取得にゃー のあたりが、ページ数加算の箇所ですね。
sehiro

2016/01/27 17:42

ありがとうございます。参考にさせて頂きます。
sehiro

2016/01/28 03:12

ブックの総ページが出力されるようになりました。ありがとうございます。後、総ページ出力時に下記のように表示させたいのですが、ページ数の書式設定について教えて頂けないでしようか。宜しくお願いします。 総ページ数 3ページ
hsk

2016/01/28 08:14 編集

セルに Range.NumberFormat プロパティを指定することで、VBAから書式設定が可能です。 https://msdn.microsoft.com/ja-jp/library/office/ff196401.aspx 手操作でセルに書式設定(ユーザー定義)する方法と同じ書式指定文字列を指定します。 ##0"ページ" のような感じでしょうか。 ちなみに「マクロの記録」機能から、自分が行った実際の操作をVBAのコードに自動生成してくれますので、VBAでどう書けばよいかわからない場合に有用ですよ。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_01_2007.html http://kokodane.com/2010/excel2010macro_05.htm http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_01.html
sehiro

2016/01/28 15:00

ありがとうございます。「マクロの記録」機能を利用して無事に作成できました。
guest

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 ブック

完成形のコードは提示していませんが、がんばってみてください。

投稿2016/01/27 01:44

jawa

総合スコア3013

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

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

sehiro

2016/01/27 02:08

ありがとうございます。参考にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問