- ベストアンサー
再・エクセルでシフト表を作りたいのですが。
QNo.2355214 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2355214 現在、エクセルでシフト表をつくっています。縦罫に登録者 横罫に日にち 各マスには休もしくは出勤形態 朝・昼・夜 を入れています。その表を作ると同時に、 ○月×日 朝 多手委素 地戸氏歯 昼 津差祖非 過名丹男 夜 貴区間之 休 小未藻音 という表と申しますか集計ができたらいいなと考えています。 何か良い方法があったら教えてください。フリーソフトなどを考えた方がよいのでしょうか。よろしくお願いいたします。 試してみたのですが、 COUNTIFで、人数を数えることはできますが、名前が出せません。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2355470 似たような疑問だと思うのですが、よくわかりません。 素人なので、最も簡単だと思われる方法を詳しく教えてください。よろしくお願いいたします。 また、もしその表を逆に使えるようであれば、 ○月×日の朝の欄に 小未藻音 とすると、元の表の 小未藻音の欄に朝と表示させたい。 いかがでしょうか。よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#02です。度々すみません B16の式を以下にすればB17、B18にコピーしてもOKです。余計複雑になりますが、個人的にはすっきり^^; =IF(SMALL(IF(OFFSET($A$1,1,MATCH($A$15,$1:$1,0)-1,COUNTA($A$2:$A$10),1)=$A16,ROW(OFFSET($A$1,1,MATCH($A$15,$1:$1,0)-1,COUNTA($A$2:$A$10),1)),9999),COLUMN()-1)<9999,INDEX($A$1:$A$10,SMALL(IF(OFFSET($A$1,1,MATCH($A$15,$1:$1,0)-1,COUNTA($A$2:$A$10),1)=$A16,ROW(OFFSET($A$1,1,MATCH($A$15,$1:$1,0)-1,COUNTA($A$2:$A$10),1)),9999),COLUMN()-1)),"")
その他の回答 (3)
- zap35
- ベストアンサー率44% (1383/3079)
#02です >A16の式は これは「B16の式は」の誤りでした。この箇所以降のA17,A18,A19はB列に読み替えて下さい。
- zap35
- ベストアンサー率44% (1383/3079)
複雑になるのですが関数でやってみました このような配置表があるとして、 A B C D E F 1行目 8/20 8/21 8/22 8/23 8/24 2行目 あ 朝 昼 夜 朝 休 3行目 い 昼 朝 朝 昼 朝 4行目 う 朝 昼 昼 朝 朝 5行目 え 休 休 朝 夜 昼 6行目 お 夜 昼 休 昼 朝 7行目 か 朝 朝 朝 休 夜 8行目 き 朝 夜 昼 夜 昼 9行目 く 朝 昼 朝 昼 朝 10行目 け 昼 夜 朝 朝 朝 以下のように並べ替える場合、 A列 B C D 15行目 8/23 16行目 朝 あ う け 17行目 昼 い お く 18行目 夜 え き 19行目 休 か A16の式は =IF(SMALL(IF(OFFSET($A$1,1,MATCH($A$15,$1:$1,0)-1,COUNTA($A$2:$A$10),1)=$A16,ROW(2:10),9999),COLUMN()-1)<9999,INDEX($A$1:$A$10,SMALL(IF(OFFSET($A$1,1,MATCH($A$15,$1:$1,0)-1,COUNTA($A$2:$A$10),1)=$A16,ROW(2:10),9999),COLUMN()-1)),"") をペーストして、Shift+Ctrl+Enterで確定します。 A16を横方向(B,C…)にコピーすれば朝勤務のメンバー表ができます 次に縦方向へはA16をコピーしてから、式の一部を修正する必要があります。A16をA17にコピーすると A16の ROW(2:10) はA17では ROW(3:11) に変わっていると思います。これを ROW(2:10)に手で修正します。そして横方向にはオートフィルでコピーします。 A18(夜),A19(休)も同じ要領です。 上に掲載した並べ替え結果は、実際にこの式を実行した結果ですので、一応動作は検証済みです。でも果たして実用性があるかどうか?。実際のシートでは配置が違うと思いますが、修正も困難かも…
補足
とりあえずN04の方法で 23 あうけ まででました。 16の欄が縦に間延びし20の欄まで使えなくなりました。 20の欄で COUNTA($A$2:$A$10),1)=$A20,ROW(OFFSET($A$1,1,MATCH($A$15,$1:$1,0)-1, としてみました。ダメでした。 どうしたらよいでしょうか。 オートフィルターでそれっぽいことができるよといわれましたが。 どうかよろしくお願いいたします。
- CaveatEmptor
- ベストアンサー率26% (126/470)
はじめまして。回答がでないようですね。 関数で処理するのは難しいと思います。 マクロなら簡単なので作ってみました。 回答がないよりはマシということで。 1行目に登録者、A列に日にちが入っているとします。B2より右と下に朝、昼などが入っているとします。 見つけたい日にちをA11に書き込みます。 A21~A24に朝、昼、夜、休と書き込んでおいてください。 以下のマクロを[ALT]+[F11]→挿入→標準モジュールとして、そこに貼ってみてください。実行は[ALT]+[F8]でできます。 Sub work() '登録者の人数を指定します ninzu = 4 '日付のあるセル(A列の20行目)を指定します Mydate = Cells(20, 1) '朝、昼、夜、休を書き込む行を指定します 朝行 = 21 昼行 = 22 夜行 = 23 休行 = 24 '書き込むセルをクリアします Range(Cells(朝行, 2), Cells(休行, 256)).ClearContents '検索&書き込みを開始します。 For i = 2 To 256 If Cells(1, i) = Mydate Then For j = 2 To 2 + ninzu - 1 '朝のシフトの人を検索&書き込み If Cells(j, i) = "朝" Then For k = 2 To 256 If Cells(朝行, k) = "" Then Cells(朝行, k) = Cells(j, 1) Exit For End If Next End If '昼のシフトの人を検索&書き込み If Cells(j, i) = "昼" Then For k = 2 To 256 If Cells(昼行, k) = "" Then Cells(昼行, k) = Cells(j, 1) Exit For End If Next End If '夜のシフトの人を検索&書き込み If Cells(j, i) = "夜" Then For k = 2 To 256 If Cells(夜行, k) = "" Then Cells(夜行, k) = Cells(j, 1) Exit For End If Next End If '休のシフトの人を検索&書き込み If Cells(j, i) = "休" Then For k = 2 To 256 If Cells(休行, k) = "" Then Cells(休行, k) = Cells(j, 1) Exit For End If Next End If Next End If Next End Sub なるべくわかりやすくしたつもりですが、マクロはなれないと難しいと思いますので、何かありましたらまた質問してください。 追伸 マクロを実行するにはツール→マクロ→セキュリティを中以下にしておいてください。
お礼
ありがとうございます。申し訳ないですが、マクロわからないです。すぐには手がつけられませんが、是非チャレンジしたいと思います。 回答がないのですか。それもよくわからないのです。申し訳ないです。
お礼
やってみます。自信ないです。私もすっきりできるでしょうか。がんばります。