dポイントプレゼントキャンペーン実施中!

会社で年に一度(4/1)に社員全員(200人ほど)にワークライフのアンケートをとって、まとめています。
画像のエクセル(サンプル)でずっと管理しているのですが、部署移動した社員を並べ替え、新しい年の行を追加してく作業に一週間ほどかかります。
以下の二点をエクセルに詳しい方に教えて頂きたいです。
・マクロを使って、新しい年の行(日付も自動的に入れたい)を挿入
・部署の並べ替えを効率的にする方法

エクセルマクロは全然不慣れで使いこなせておりませんが、簡単なものを使ったりしております。
なんとなくは分かるので、どうぞ宜しくお願い致します。

「エクセルのマクロ/VBAを教えてください」の質問画像

A 回答 (4件)

エクセルの機能を使うだけでも、けっこういろいろできるものですね。


No.3の回答者さんが書かれているように、機能を組み合わせ、順番に実行するということや、作業用の列を使うこと、作業用のシートを使うことなどを組み合わせると、けっこうすごいことができるのだと思います。
大事なことは、機能を組み合わせことと、その順番を考えることなのだと思います。
その推論や組み合わせることが面白いと感じられれば、エクセルのそこそこの使い手になれると思っています。 ただ作業としてやっていると、変化に対応出来ないし、長い時間同じ作業をしていると疲労するとか、いやになるということもあり得ます。
マクロを利用するのも、同じようなものだと思っています。
やり方を覚え、いろいろやっていると、エクセルの機能をいろいろ順番に組み合わせた作業でも、パパッとやれたり、やり直しなども手間がなくてやれるようになって、面白かったり、楽になったりもします。
エクセルの機能を使うだけの場合でも、マクロも使う場合でも、それをどうやるのかを他人に説明するのは結構むつかしいものです。
特に、自分流に、《とにかく動いて、結果がでれば良い》というやり方をすると、他人には説明が難しいし、自分でも、後になってしまうと、どうなっていたのか、なぜそれでうまくいくのかが分からなくなったり、初期の条件などが変わると、想定外のトラブルを起こすことが、しばしば起きます。
そうしたトラブル発生に備えて、元データを直接に加工処理するのではなくて、別のシートやブックで処理し、問題なくできたことを確認して、結果を移し替えるとか、元データを破棄するとか、そういう2ステップをする方が安全です。

《部署移動した社員を並べ替え》とかでは、部署の並び順や部署内での各人の位置も考慮することになるでしょう。また、等級の変更はどの時点で分かるのかも気になります。退職者や新人や中途入社の者の追加の処理も、どの時点でするのか、社員番号は変わらないのでしょうが結婚等で姓が変更になった場合にどのように表記するのかも気になります。

C列の見出しが「発育年月日」のように見えるのですが、本当はなんと書かれているのでしょうか。2012年、2018年の4/1は日曜ですが、C列にはなんの日付が入っているのでしょう。 「年に一度(4/1)に社員全員(200人ほど)にワークライフのアンケートをとって」となると、人事異動や等級アップはいつあるのでしょう。 ワークライフのアンケートというのはどのような項目でしょう。 3月までと4月からとでは職場が違う、等級も違うという場合、アンケートには、3月までの状況を書かれているのでしょうか、4月からの予想のようなものに基づく回答を集めているのでしょうか。 毎年全従業員から回答を集めるというのは、勤怠勤務や残業休暇などの会社が持っているデータ以外の内容(感性的な意見や希望など)を集め、経年的な傾向や職場や職階、社員等級、勤続年数、職場異動の有無、年齢、性別とクロス分析でもするのでしょうか。そうだとすると、まだ、今後、項目の変化もありそうです。
データ処理というのは、そうした内容を踏まえて、やり方を考えたり、必要な項目や無用というか意味があまりないことはしないというようなことも大事だと思います。

とりあえず、2019/4/1の行を追加して、2018/4/1の部署と等級をそのまま入れておくというだけならば、次のようなコードでも、マクロは動きます。(実行速度を下げる表示更新を停止させるコードは省略しています)

Sub 全員行追加()
' 1行目は見出し行、2行目から空白行なしで300人程度の実際のデータが詰まっている
' おおよそ20行×300人で データは 6000行以下と想定している
' 各人の最終行の後に1行を追加し、C列に日付データを入れる
shin = "2019/4/1" ' 各人の追加行のC列に入れるデータをここで指定
migi = "P" ' 各人のデータのありうる最右端の列の記号 P列場合はPと指定
migi = ":" & migi ' コードを短く書く都合で、最右端の列記号の前に":"を加えておく
m = Cells(7000, 3).End(xlUp).Row ' 最下行の行位置を取得
' 処理の都合で、下方から上方に順番に処理していく
Cells(m + 1, 3) = shin
Range(Cells(m + 1, 4), Cells(m + 1, 5)).Value = Range(Cells(m, 4), Cells(m, 5)).Value

Do '  同じ人物の2行目以降のA列、B列は空白であることを利用して、個人境界位置を把握
If Cells(m - 1, 2) = "" Then
m = Cells(m - 1, 2).End(xlUp).Row
Else
m = m - 1
End If
If m > 2 Then ' 個人境界が3行目以降なら前に別人がいるので、その人物用の行を追加
Rows(m & ":" & m).Insert Shift:=xlDown
Range("A" & m & migi & m).Borders(xlEdgeTop).LineStyle = xlNone
Cells(m, 3) = shin
Range(Cells(m, 4), Cells(m, 5)).Value = Range(Cells(m - 1, 4), Cells(m - 1, 5)).Value
End If
Loop While m > 2
End Sub
    • good
    • 0
この回答へのお礼

yoreyore様
私のために回答いただき、心から感謝致します。
本当にありがとうございます。

まだちゃんと読み込めていないのですが、じっくり時間を掛けて読み込ませていただきます!
確かに、エクセルを使って色んな事ができると作業が楽しいものになる気がします。以前はエクセルをあまり使わない部署におりまして、2年前に、少し使う部署に来ました(人事総務です)。エクセルを覚えると、仕事がこんなに効率的になるのだと感動しました。

マクロの式、大変参考になります。
マクロにするには、情報もきちんと考慮しなくてはいけないですね。
色々情報が足らずで失礼致しました。
以下、質問に回答させていただきます。

【部署移動に関して】
部署移動は4/1に発令され、発表されます。土日祝であっても関係なく、4/1に発令されたことになるようです。
ワークライフのアンケートを社員全員が出すのは12月になります。質問の内容を誤記しておりました。。。申し訳ありません。このアンケートを人事の上が参考にして人事異動を検討するので、この表が更新されるのは1月~2月くらいになります。
C列の見出しは(発令年月日)となっております。
等級の変更もその時に発表になるので、順番は4/1に決まります。
結婚して名前が変わっても、旧姓のまま記載されます。(管理側が分かればいいからとの事です)
社員番号は変わることはありません。中途の方は次の年の4/1に名前を追加します。新入社員は入社した年から追加になります。
(例)中途:2017/6/1に入社したら、2018/4/1の時点から追加します。
私の頭では考えられず、新入社員や中途社員は、手作業で入力しようと考えておりました。。。

【アンケート内容に関して】
アンケートの内容を使ってクロス分析はしておりません。
アンケートの内容は部署移動の希望はあるか、今後どうなっていきたいか、キャリアビジョン、などです。
アンケートと評価を参考に部署移動を検討しております。

今より効率的に作業がしたい、と思って質問させいただきましたが、
色々考える機会を頂き、大変ありがたいと思いました。
まだまだ未熟者ですが、勉強してもっと使いこなせるよう精進したいと思います。

こんなにお時間を割いてくれたことに、感謝しかありません。
本当にありがとうございます!!!

お礼日時:2018/12/25 11:25

マクロはいらないと思いますよ。

手順的には、こんな感じです。
どうしてもVBA!!というのであれば、読み捨てて下さい。

①名前、社員番号の空白部分を埋める。
これは、教えて!Gooの過去の質問を検索すればできると思います(マクロにする程のものでもないので)。出来上がった時点で空白である必要があるのであれば、条件付き書式で文字色「白」にでもしてください。

②新年度分の行を追加する。
異動年月日でソートすれば、今年の分が一塊になります。それをコピーして異動年月日を新年度に変更し、退職者の削除、異動者の部署変更、および、新人の追加をしてから、社員番号・異動年月日でソートして元の並びに戻します。

③部署別の並べ替え。
右端の空いているセルを作業列として、数式で「新年度の部署」を表示させ、列選択でコピー→値張り付けして定数化します。その後、新年度の部署・社員番号・異動年月日でソートすれば出来上がり。
ちなみに、「新年度の部署」を表示する数式は、こんな感じです。
=IF(B2=B3,AA3,D2) ※作業列AAの場合の例です。値張り付けを忘れずに!!

②の異動の作業を除けば、10分もかからないと思います。ワタシ的には、これを1週間かけてやれる職場がうらやましい。それを捨てる覚悟のあきぴさんも素晴らしい。
    • good
    • 0
この回答へのお礼

ママチャリ様

お忙しい中、ご回答ありがとうございます!

マクロを使わなくても出来る方法があるのですね!
私の頭では思いつきませんでした。。。
ちまちまやっていた作業が、ものの10分で終わる、、、と思うといかに無駄な時間を使っていたのかと笑ってしまいます(笑)
エクセルマスターはすごいです!

確かに私の職場はのんびり仕事が出来ちゃう職場ですね(笑)でも、すぐ終わる作業をこんなに時間かけてたんだと思うと会社に申し訳なく思います。。。
参考に、頑張ってやってみます!
ありがとうございます♡

お礼日時:2018/12/23 16:18

>・マクロを使って、新しい年の行(日付も自動的に入れたい)を挿入



一人分の最終行に1行追加×人数分 ということでしょうか?

>・部署の並べ替えを効率的にする方法

各個人の最終行に書かれている部署で並べ替え?
それとも新しく追加した行に書かれている部署で並べ替え?


エクセルで効率的に作業するためには、少なくとも同じ人のデータすべてに名前と社員番号を入れておくのがよいです。サンプルのA列、B列にある空白部分のことです。(見栄えは悪くなりますが)
これもマクロを使えば簡単にできるでしょう。
    • good
    • 0
この回答へのお礼

googoo900様

お忙しい中、ご回答いただきありがとうございます!
>一人分の最終行に1行追加×人数分 ということでしょうか?

その通りです!エクセルが得意ではないため、今まで手作業で入力しておりました(笑)

>各個人の最終行に書かれている部署で並べ替え?
それとも新しく追加した行に書かれている部署で並べ替え?

各個人の最終行に書かれている部署ごとに並べ替えです。
並べ替えする順番のリストは別にあるので、それに従って並べ替えをしております。

確かに空白に社員番号と名前を入れておくと効率的ですよね!
ありがとうございます!ぜひ参考にさせていただきます!!

お礼日時:2018/12/23 16:13

>・部署の並べ替えを効率的にする方法



『効率的』の定義がわかりませんが並べ替える順番が決められているなら、Sortメソッド等で任意の順序を作れば宜しいのでは?
ちなみにうちのExcelにはその機能はない(古~)ので参考コードは書けません。
参考?:
https://excelwork.info/excel/customlistsort/

ところで200人分は1つのシートに纏められているのでしょうか?
異動を考えると社員ナンバー毎にシートを分けるとかされているのですか?
    • good
    • 0
この回答へのお礼

めぐみん_様
お忙しい中、回答いただきありがとうございます!

200人分は1つのシートに纏まっています。
例に添付した画像は画質が悪いのですが、200人分が下まで続いております。
社員ナンバー毎にシートは分かれていないのです。
私が入社する前から使われている形式のまま使っているのですが、使いやすいように作り直そうかな、と考えた次第です。
sortメソッドですね!
ぜひ参考にさせていただきます!
ありがとうございます!!!

お礼日時:2018/12/23 16:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!