- 締切済み
EXCELで工場別人数を出したい(VBA使用で)
ファイル2のSHEET1に社員名簿で B2からB1200に社員番号順ですので工場名(16社)がバラバラにあります。B1200は、日々かわります。入社、退社があるためです) ファイル1のSHEET1に集計表で A3からA18までに工場名があります。 B3からB18に、各工場別の人数を表示させたいのです。 ファイル1のSHEET1の例 A B 1 東京工場 345 2 大阪工場 256 3 長崎工場 125 現在は、COUNTIF関数で行なっていますがファイルを立ち上げたときに 自動で処理がしたいのです。 ファイルを呼び出すまでは出来たのですが… 力を貸して下さい。宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- mt2008
- ベストアンサー率52% (885/1701)
「このブックには、ほかのデータソーズへのリンクが含まれています」と言うメッセージを出したくないのならば、メニューの[編集]-[リンクの編集]-[起動時の確認]で『メッセージを表示しないで、リンクの自動更新も行わない』を選択して上書き保存で出なくなります。 で、かんじんの処理ですが…… 現在のCOUNTIFが設定されているブックでやりたいことが出来ているんですからそのまま使いましょう。マクロはファイルを立ち上げ時にリンク元を開くだけにしておいては如何ですか? 1.マクロの記録で、以下の操作を記録します。 1-1.[編集]-[リンクの編集]-[リンク元を開く] 1-2.開かれたリンク元(ファイル2)を閉じる。 2.記録されたマクロをAuto_open() にコピー。 なお、ファイル1を他のユーザが開いている時などのエラー処理は一切入っていませんのでその辺はご自分で考えてみてください。
- imogasi
- ベストアンサー率27% (4737/17069)
>COUNTIF関数で行なっていますがファイルを立ち上げたときに, 自動で処理がしたいのです エクセルの関数こそ、データの変更に対し即座に反映してくれるもの(仕組み)です。だからこれはは認識相違でしょう。 式の組み方が適当でないのではないですか。 データが増えても式を変更しない式はどうしたらよいか、質問したら。#1で式を知りたいと書いておられるのは、そのことを検証しようとされているのかも知れない。 ーー VBAこそ毎回実行しなければなりません。Changeイベントやファイルオープン時というイベント時に実行させることは可能ですが。 勉強したてで、VBAがやりたくてでょうが無いのかな。 ーーー VBAでも関数を使う以外での、多他項目の1回読みでの集計ロジックは、意外に難しいものですよ。アルゴリズムを常時考えている人で無いと難しい。 中間的に、工場名でデータをソートして、区切りまでの件数を数えるのが、ロジックとしては簡単。 そのほか、各(行)レコードで、工場名リストの該当行を調べ、件数を+1する方法などは単純なロジックでしょう。
- kuma56
- ベストアンサー率31% (1423/4528)
>ファイルを呼び出すまでは出来たのですが… VBAでこの後どういう処理をするイメージで考えているのですか? ファイルも開けるし、COUNTIF関数で集計可能なら、ファイルが開いたら、Sheet1のB1、B2、B3セルにそれぞれのCOUNTIF関数を(VBAで)入力する・・・ではだめなのですか?
お礼
Range("B3").Select ActiveCell.FormulaR1C1 = "=COUNTIF([名簿.XLS]Q_SHEET1!R2C2:R1130C2,RC[-1])" これを書き込み対応しました。 ありがとうございました。
補足
1.集計表を開く 2.裏で名簿が開く 3.名簿の工場名を元に、集計表の工場別に人数を表示する これだけのことなんですが… VBAで関数を入力するでも構いません。 COUNTIF関数を集計表に入れたままでは、「このブックには、ほかのデータソーズへのリンクが含まれています」と毎回、表示が出てしまいます。
- higekuman
- ベストアンサー率19% (195/979)
COUNTIF関数で行っている、という数式を提示してみてください。
お礼
ありがとう御座います。 B3のセルの書式です。 =COUNTIF([名簿.XLS]Q_SHEET1!$B$2:$B$1200,A3) こんな感じですが…
お礼
ご回答ありがとう御座います。 単純な方法ではありますが解決しました。 ご指摘、ご指導ありがとうございます。やはり当方の勉強不足ですね。