- ベストアンサー
エクセルで勤務期間表の作成について
- 会社の事務でエクセルで勤務期間表を作成していますが、VBA初心者で効率の良い入力方法を知りたい。
- 発令年月日と退職年月日を入力すると、在職期間中の特定の数値を入力するようにしたい。
- 質問画像を添付しており、具体的な方法を教えていただきたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
何だかよく分かりませんが、シート上部の 4 行の行列を入れ替えて、シート下部に転載しようとしているのですか?そして、どういう規則で定まっている値なのか分かりませんが「特定の数値」というのを、該当期間内の日付の行に記入する? 何だかよく分かりませんが、次式では、「15 ×列番号 1、2、…」という値を、「特定の数値」だということにしてみました。違うようであれば、そちらでテキトーに修正してください。 B8 =15*B$7*((count(offset($B$2:$D$2,B$7-1,0))=2)*($A8=median($A8,offset($B$2:$D$2,B$7-1,0)))+(count(offset($E$2:$G$2,B$7-1,0))=2)*($A8=median($A8,offset($E$2:$G$2,B$7-1,0)))+(count(offset($H$2:$J$2,B$7-1,0))=2)*($A8=median($A8,offset($H$2:$J$2,B$7-1,0)))+(count(offset($K$2:$M$2,B$7-1,0))=2)*($A8=median($A8,offset($K$2:$M$2,B$7-1,0)))) B8 セルをコピーし B8:E31 のセル範囲に貼り付け。ゼロが算出されるセルがありますが、セルの書式により非表示にするなど。 今後、「そもそもこういう複雑な表は作らない」ということから覚えていっていただきたいと思いますが、とりあえず何だかよく分からないので、今回は上式を載せておくだけにします。
その他の回答 (3)
- kagakusuki
- ベストアンサー率51% (2610/5101)
>やりたいことは、発令年月日と退職年月日に入力するとA8から始まる2000/4/1から2013/3/39の中から在職期間中のみ特定の数値を入力するようにしたい との事ですが、説明不足が酷過ぎて、必要な情報が不足しているため、このままでは質問者様が欲しておられる方法を回答する事が出来る人間は現れないと思われます。 まず、御質問文や添付された画像の中には、「発令年月日」の日付を入力する欄が存在しておりません。 「発令年月日」なる日付のデータは、一体どこに入力されているのでしょうか? それに、「特定の数値を入力するようにしたい」と言われましても、その「特定の数値」とは一体どの様な数値の事なのかという事に関する説明が一切無いのでは、どの様な数値を入力すれば良いのか、他人である回答者には判る筈も御座いません。 「特定の数値」とは、一体どの様な決まりで求められた数値の事なのでしょうか? ついでに言わせて頂きますと、回答No.1様の御回答に対する質問者様のお礼文の中に、 >やってみたのですが、自分の意図したのとはちょっと違っていました。 とありましたが、どの部分がどの様に「違っていた」のかという事を御説明頂けなければ、「何が違うのか」という事を判断する事が出来ませんので、回答者にはどうすれば良いのか判る筈も御座いません。 ですから、「回答No.1様の方法を試してみられた結果はどの様なものであったのかという事と、それに対して質問者様がやりたかった事はどの様な事であったので、何処がどの様に違っていたのか」という事を御説明頂く様御願い致します。
- bunjii
- ベストアンサー率43% (3589/8249)
>やりたいことは、発令年月日と退職年月日に入力するとA8から始まる2000/4/1から2013/3/39の中から在職期間中のみ特定の数値を入力するようにしたいのですが、いろいろ調べてはみたものの、分からなく質問しました。 やりたいことが分かりません。 「2013/3/39」はタイプミスでしょうが「2013/3/31」ですか? ご提示のシート(添付画像)は解像度が悪く読めません。 また、A9からの日付は分かりますが、B8からE8までの1から4が何の意味か分かりません。 B9からB17とB25以降の値が15で、C18からC24までの値が30であることの説明もありませんので処理の論理が読み取れません。 上司や先輩なら何をしたいかを理解できると思いますので身近な方々と相談されると良いでしょう。 社内で対応できない場合は出入りのソフト関連の業者に有償で依頼するのが筋です。
- shirokuma2014
- ベストアンサー率25% (41/162)
エラー処理など全く入れていませんが、簡単に。 1. 採用年月日・退職年月日の日付のセルを選択してから実行します。 2. A列に日付が見つかったら、入力欄が出てくるので数字を入れてOKを押すと、B列に表示されます。 3. あとはコピペして下さい。 コレ以上は勘弁してくださいw Sub sample() Dim a As Date, b As Range, c As String a = ActiveCell.Value Set b = ActiveSheet.Range("A:A").Find(a) If Not b Is Nothing Then c = Application.InputBox("数値を入力して下さい。") If Not c = "False" And Not c = "" Then b.Offset(0, 1).Value = c End If End If End Sub VBAだと表をちょっと変えるだけで動かなくなります。 つまり、表をきちんと整備した上で作らないといけません。 VBAを組む段階だと、採用年月日・退職年月日だけを入力するシート、日付の羅列されているシートの最低2つ、見やすさを考えるなら両方を表示できる出力シートの計3つを作ります。 今回の場合ですと、何をされたいのかよく見えませんが、関数を使ったほうが柔軟な気がします。 if,vlookup,match,offsetあたりでできそうな気がします。
お礼
回答ありがとうございます。 やってみたのですが、自分の意図したのとはちょっと違っていました。
お礼
回答ありがとうございます。 文章で説明するのが下手で申し訳ありません。 もう一度説明しますと まず、A8(2000/4/1)からA372(2001/3/31)にかけて日付表を作っておきます。 次に、B2に採用年月日(2000/4/1)、D2に退職年月日(2000/4/9)を入力すると 日付表の在職期間中全てに15を入力させる。 休職の場合も考えて、採用年月日1・退職年月日1~採用年月日3・退職年月日3まで 作ろうと思っています。 No.1さんの回答をやってみたのですが、採用年月日にしか入力されませんでした。