エクセル2002を使っています。
各支店に作業の進捗状況を報告してもらうため、同じフォーマットで記したエクセル表を提出してもらい、ある項目が入力されている個数の数を調べています。(支店毎にBookは別です)
元々は同じフォーマットだったので個数を数えたいのは「E列」と決まっていたのですが、いざ提出されたシートには、列が挿入や削除され、個数を数えたい列はがD列やF列になっているものもあり、当初使用しようと思っていたマクロが使えなくなってしまいました。
よって、フィルタをかけたい項目名は「完了日」と決まっているので、「完了日」と記されたセルを探し、そこでフィルタをかけて「空白以外のセル」を抽出する→抽出された個数を数えるというマクロを作りたいのですが、初心者の私では上手く出来ません。
初歩的な質問で申し訳ありませんが、宜しくお願いします。
ちなみにフィルタをかけたい項目は1行目にあるとは限りません。
個数を数えるのはブック毎に行ないます。
No.2ベストアンサー
- 回答日時:
下記を参考にして列の位置を探してみてはどうでしょうか?
また、カウントは、loopで、数えればOKです。
With Workbooks("Book_A.xls").Worksheets("Sheet1") --- end with
は、対象Book_A.xlsが表に出ていなくても(マクロが入ったブックが
前面に出ている状態)、きちんと動くようにする為です。
「完了日」が1行目にないことに配慮し、カウントの開始は、
「完了日」のある行の次の行からチェックに入ります。
尚、大前提として、1列目は、すべての行に何がしか、データ(日付等)が入っていることとします。空白がきた時点で、点検終了としています。
----------------------------------------------------
Sub findkey_count()
Dim myRange As Range
Set myRange = Workbooks("Book_A.xls").Worksheets("Sheet1").Cells.Find("完了日", , xlValues, xlWhole)
If Not myRange Is Nothing Then
myColumn_A = myRange.Column ' B列なら 2
myRow_A = myRange.Row
End If
count_A = 0
With Workbooks("Book_A.xls").Worksheets("Sheet1")
rowpos = myRow_A + 1
Do While .Cells(rowpos, 1).Value <> ""
If .Cells(rowpos, myColumn_A).Value <> "" Then count_A = count_A + 1
rowpos = rowpos + 1
Loop
End With
MsgBox count_A
End Sub
ご回答ありがとうございました。
早速明日試してみます♪
VBA初心者の私では、今内容を見ただけではわかりませんが、一緒に集計作業をしているVBA記述が出来る者にはとても参考になると思います。(彼女がこの記述方法を知りたがっていたので)
ありがとうございました。
m(__)m
No.1
- 回答日時:
発想の転換など、問題解決のきっかけになればと思い、回答いたします。
支店数はいくつでしょうか?
提出されたデータは今後使用することはないのですか?
と言うのも、フォーマットを再度整えて、用意しておいたマクロを使用するのではダメなのでしょうか?
また、フィルタをかけなくとも、空白でないセルの個数をカウントすればよいのであれば、ただ関数を最終セルに入れることで可能ではないでしょうか?
その結果を集計ブックに集めるというのであれば、マクロも有効かと思いますが。
★支店数は30支店強、1支店に3シートあるので全部で約90シートです。
★ファイルは毎週1回、計4回報告して貰い、報告もらったファイルを毎週集計します。
報告は週1回ですが、支店では日々担当者が各自ファイル入力をして更新しているので、今の段階で再度こちらから提出してもらうファイル整えて、これで提出するようにとは言えない状況です。
★集計時にフォーマットを整えても、次の報告は前回と同じファイルに進捗を書き足して報告してくるので、毎回フォーマットを直さなくてはなりませんし、どこを崩したかを探すのも時間がかかりそうな状態です。
★便宜上空白以外のセルのカウントを質問しましたが、実際は特定の用語や、日付が何日以降のものをカウントしたりするのですが、それらのマクロは当初用意されていたマクロ内に記述があるので、【”●●”と記されたセルを探し、そこでフィルタをかける】というVBAが知りたくて質問した次第です。
当初用意されていたマクロは、自動的に全てのファイルを集計するものだったのですが、実際報告されたファイルは、行例削除、シート名変更、ソートがかかっていたり、・・・etcいろんな種類の変更がなされており使えないので、全てのファイルを自動集計するのは諦めて、ファイルをひとつづつ開いて簡単な部分的に動作するマクロを用いて集計しています。その際、【「●●」と記されたセルを探し、そこでフィルタをかける】記述がわかればもっと楽になるのにと思って質問した次第です。
質問の仕方がまずくてすみませんでした。
問題解決になるよう、発送の転換方法を考えて下さいありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) VBA 最終行まで数式をコピーする 3 2023/01/03 15:44
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) 【マクロ】表への繰り返し転記について 1 2022/11/19 16:30
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- Visual Basic(VBA) エクセルVBAで『A列』に新規で数値を入力し『B列』から右方向の空白セルにその値を貼り付ける方法 4 2022/11/05 08:37
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
色フィルターをかけた状態で、...
-
エクセルオートフィルタで余計...
-
エクセルのフィルタをかけると...
-
オートフィルタで抽出したデー...
-
エクセルで、桁数の異なるデー...
-
=SUBTOTAL に =COUNTIF の機能...
-
Excel関数、何がいけないのかわ...
-
Excelでオートフィルタ時に交互...
-
エクセル:色の付いたデータを...
-
エクセルについて。 ソートで絞...
-
Excel2010 フィルタで抽出できない
-
グーグルスプレッドシート 連番...
-
【Excel】 可視セルへの貼り付...
-
教えて下さい!関数SUBTOTALとC...
-
行番号の文字の色が青色の理由?
-
excelで奇数の行のみ削除したい
-
フィルタ内で指定するエクセル...
-
Excel マクロ オートフ...
-
エクセルでのオートフィルタオ...
-
【Excel2003】フィルタの条件を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルオートフィルタで余計...
-
エクセルで、桁数の異なるデー...
-
色フィルターをかけた状態で、...
-
Excel関数、何がいけないのかわ...
-
エクセルのフィルタをかけると...
-
教えて下さい!関数SUBTOTALとC...
-
オートフィルタで抽出したデー...
-
エクセルの計算表の下向き三角...
-
エクセルで特定の範囲内から小...
-
【Excel】 可視セルへの貼り付...
-
エクセルでのオートフィルタオ...
-
行番号の文字の色が青色の理由?
-
エクセル:色の付いたデータを...
-
Excelでオートフィルタ時に交互...
-
エクセルを使用してデジタルフ...
-
オートフィルタをかけた表に一...
-
=SUBTOTAL に =COUNTIF の機能...
-
excelで奇数の行のみ削除したい
-
Excel2010 フィルタで抽出できない
-
エクセルで作成 混合名簿から...
おすすめ情報