• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数ファイルの1つのシート中の総行数を求めるには)

エラーなしで総行数が求まらない理由

このQ&Aのポイント
  • 複数ファイルの特定シートから行数をカウントしたいが、マクロが反応しない問題を解決したい初心者の方の相談。
  • 所望の出力情報は、ファイル名とシート「カテーログ」のA列の3行目から最終行までの行数である。
  • 実行中のマクロにはエラーはないものの、出力結果が得られない原因を探りたいというリクエスト。

質問者が選んだベストアンサー

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (772/1616)
回答No.2

3行目からという事は 2引けばいいのですね tmp = ws.Cells(ws.Rows.Count, k).End(xlUp).Row - 2 でうまく行くと思います。 For k = 1 To 256 これは、列です 256といえば、IV列です。 A~IV列で、最終行を調べて、最大値を返しています。 IV列以右を使っていない限り、問題ありません。 (本来なら、XFD 列迄調べるべきでしょうが、無駄に時間がかかるので、IV列迄にしてあるのでしょう。又は昔IV列迄しかない時代に作られたものかもしれません) それにしても、このプログラム無駄に長すぎます。ネットにプログラムを上げる人は、どうして無駄に効率の悪いプログラムを上げるのでしょうか。 私なら、フォルダ名、シート名をセルに入れ、変更があってもプログラムの変更なしでできるようにします。こうすれば、貴方がやったようなミスを防げます。 プログラムもこれだけです。 実行速度も上がると思います。 Option Explicit ' Sub Macro1()   Dim Sh As Worksheet   Dim FileName As String   Dim ROut As Long '   Set Sh = ThisWorkbook.ActiveSheet   ROut = 6   FileName = Dir([B1] & "\*.xls*") '   If FileName = "" Then     MsgBox "フォルダ又はファイルがありません", vbCritical   End If   Range("A6:B" & Rows.Count).ClearContents   Application.ScreenUpdating = False '   Do While FileName > ""     Workbooks.Open Sh.[B1] & "\" & FileName, False, True     On Error Resume Next     Sheets(Sh.[B2].Value).Select '     If Err = 0 Then       Sh.Cells(ROut, "A") = FileName       Sh.Cells(ROut, "B") = _         [A1].SpecialCells(xlCellTypeLastCell).Row - Sh.[B3] + 1       ROut = ROut + 1     End If     On Error GoTo 0     Workbooks(FileName).Close False     FileName = Dir   Loop End Sub

nnirosan
質問者

お礼

紹介頂いたコードへ総データ数を入れ込み、表示されたデータもテーブル形式で表示出来るようになりました。ご紹介頂きましたコードは今回もVBAの勉強に大変役に立ちました、心から有難うございました。コマンドボタンを入れ込みマウスで選択して入力データを選択する所まではなんとか行きましたので、次回はより使い易いコードになるようにしていきたいと思います。

nnirosan
質問者

補足

早速、質問への説明ありがとうございました。 良く理解する事が出来ました。 尚、マクロもご紹介下さいまして、誠にありがとうございました。なるほど、無駄のないスッキリしたコードで関心致しました。 効率良く、出力結果も見易くし出力する事が出来ました。 大変お手数がお掛けしますが、可能でしたら下記について教えて頂きたいです。 1)マクロで6行目以降の出力データをテーブル形式で表示させる事は可能でしょうか? 2)件数の総合計も表示させたいのですが可能でしょうか? 3)Excelを知らない素人でも実行出来るよう、このマクロをダブルクリックすると、入力データの在処を入力出来るように修正する事は可能でしょうか?

その他の回答 (2)

noname#258475
noname#258475
回答No.3

オタクな事をしなくても 戻り値の定義のFunctionを '戻り値の定義 Function count_row(ByVal ws As Worksheet) As Long count_row = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row - 2 End Function にするか データ総行数求め()の中の cnt = count_row(wb.Worksheets("カテーログ")) の部分を With wb.Worksheets("カテーログ") cnt = .Cells(.Rows.Count, "A").End(xlUp).Row - 2 End With に変更すればいいだけの話。 Worksheets("カテーログ").Range("A3").Value は意味がない。

nnirosan
質問者

お礼

ご教示を頂きまして、ありがとうございました。参考になりました。

Powered by GRATICA
  • SI299792
  • ベストアンサー率47% (772/1616)
回答No.1

動作確認はしていないのですが、ぱっと見気になったのは、 fpath = "C:\Users\Owner\Documents\連結作業\202304-202309\)" の「)」 です。 これをfname と結合すると、 C:\Users\Owner\Documents\連結作業\202304-202309\)*.xlsx になるので、 )*.xlsx を探しに行きます。 「)」 で始まるファイルが無ければ、ファイルが無いので何もしません。 とりあえず直してやってみて下さい。それで問題があれば、補足に書いて下さい。

nnirosan
質問者

補足

ご教示ありがとうございました。単純な記載ミスをしておりました。『)』を削除して、マクロは動作しました。 ネットに掲載されていたマクロのコードをそのまま引用している為、総行数は1行目~最終行の数となってしまっています。 自分がやりたいことは、A列の3行目から最終行までの総行数を求める事です。このコードの何処をどのように修正したら3行目から最終行までをカウント出来るようになるのか、大変お手数ですが、ご教示頂けないでしょうか。 それから、このマクロの右記コード『For k = 1 To 256』の意味が分からずつかっております。総行数を求めるファイル数は100個程度なのですが、問題ないでしょうか?

関連するQ&A