いつでも医師に相談、gooドクター

Excelについてアドバイスをお願いします。
在籍者が28名だとしてその月の有給取得者は「C26」からの枠に氏名と取得日数を書き込みしていきます。
手動で入力すると手間なので「M26~」に氏名、「N26~」にはドロップダウンリストで数字を入力できるようにしました。
そこで「C26~I29」のセルを結合して式を作ってみました。【IF】を使ってみました。
これだと有給を取得していない人は表示されなくなり枠内に自動的に有給取得者が入力できるようにしました。
※この式についてもっと簡単?にできる方法があればアドバイスお願いします。
さて本題ですがセルを結合してのやり方だと7人目の佐藤さんがこのように表記されて見映えが悪いです。

そこで枠内「C26~I29」のセルの結合を解除し理想としてはやはり1つのセルに1人づつ枠内の左上から順に表示されるようにできる方法はありますか?
例 有給取得者1人目の「C26」に山田さん、二人目の「D26」に鈴木さんなど‥
ちなみに山田さんが有給取得が0であれば表示されないので鈴木さんが「C26」とセルが繰り上がるように出来ますか?よろしくお願いします(^.^)
説明が下手ですいません。
不明な点はおっしゃってください

「Excelについてアドバイスをお願いしま」の質問画像

質問者からの補足コメント

  • fujillinさん、早々に回答頂きありがとうございます。
    会社のパソコンなので最新(2019)だと思います。掲載の写真は再現のためにスマホのExcelアプリを使用したものです。
    やはり【C26:I29】はセルを結合した方が良さそうですかね(^_^;)
    名前が一文字の人もいるので写真の佐藤さんのようにならずに名字の頭文字から改行するできるいい案があればアドバイスお願いします。

      補足日時:2021/01/04 11:20
gooドクター

A 回答 (7件)

作業列を作ってもよいのなら、最新版Excelでなくても可能です。


https://www.yosato.net/?p=2890
O26セルに
 =COUNTIF($N$26:N26,">0")
を入力して列範囲としてO53セルまでオートフィルします。
P26セルに
 =IFNA(MATCH(ROW()-25,$O$26:$O$53,0),"")
を入力して同じようにオートフィルをします。
これで、フィルターの代わりとして利用できます。

Q26セルにM列とN列を結合したものを用意します。
 =IFERROR(INDIRECT("M"&25+P26)&INDIRECT("N"&25+P26),"")
これで、参照することができるデータが用意できたはずです。

もしもFILTER関数が使えるなら、作業列も少なく済みます。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu …

C26~I29の7列4行の範囲に順番に配置するために、
 =INDEX($Q$26:$Q$53,COLUMN()-2+(ROW()-26)*7)
を用意して、範囲にオートフィルします。
「Excelについてアドバイスをお願いしま」の回答画像9
    • good
    • 1
この回答へのお礼

ありがとうございます。FILTER関数で試してみたいと思います。

お礼日時:2021/01/05 09:19

No2です。



>やはり【C26:I29】はセルを結合した方が良さそうですかね(^_^;)
意味不明です。

回答文を、注意深く、きちんと読んでくださいな。
    • good
    • 0
この回答へのお礼

二度も回答頂きありがとうございます。
c26~l29のセルという意味でした。
紛らわしくてすいません。

お礼日時:2021/01/05 09:21

[No.7]の補遺、


式 =IF(N26,M26&N26,"") を入力したセル O26 のフィルハンドルを「エイヤッ!」とダブルクリックしてます。m(_._)m
    • good
    • 0
この回答へのお礼

とてもシンプルで分かりやすかったです!
参考にさせていただきます(^o^)

お礼日時:2021/01/05 09:22

》 山田さんが有給取得が0であれば表示されないので


》 鈴木さんが「C26」とセルが繰り上がるように出来ますか?

添附圖(Excel 2019)が參考に成れば仕合はせかと。
「Excelについてアドバイスをお願いしま」の回答画像7
    • good
    • 0

No.5です。



◆訂正
式の最初に"="が2つ入力されてしまいました。正しくは1つです。
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます(^^)v
参考にさせていただきます(^o^)

お礼日時:2021/01/05 09:22

簡単な関数を使った例として、質問者さんが作られた式をベースに修正しました。


※1 26行目~35行目までの例です。36行目以降を参照させるため、"="を除いたこの式をコピーして式の末尾に貼り付けて、参照範囲を正しく修正してください。
※2 セルC26を選択して、『折り返して全体を表示する』に設定してください。(添付図をみると設定済みと思いますが念のため)

==IF(O26>=1,N26&O26&" ","")&IF(O27>=1,N27&O27&" ","")&IF(O28>=1,N28&O28&" ","")&IF(O29>=1,N29&O29&" ","")&IF(O30>=1,N30&O30&" ","")&CHAR(10)&IF(O31>=1,N31&O31&" ","")&IF(O32>=1,N32&O32&" ","")&IF(O33>=1,N33&O33&" ","")&IF(O34>=1,N34&O34&" ","")&IF(O35>=1,N35&O35&" ","")&CHAR(10) 

解説
① CHAR(10)を式に入れることでセル内改行することができます。
上記の例は5人毎に改行をいれました。ただし有給が0の人がいた場合は5人未満で改行されます。

② 氏名は式に入力するのではなく、有給数と同様にM列の入力内容を参照するようにすることで、有給0の人を表示しないようにできます。
    • good
    • 0

こんばんは



失礼ながら、およそ表計算に向かないレイアウトなので、無駄な計算が増えますし、メンテナンスもし難くなります。

バージョンが不明ですが、CONCAT関数が使える環境(2019)と仮定してよいのなら…
C26セルに
=IFERROR(CONCAT(OFFSET(INDEX($M:$M,AGGREGATE(15,6,ROW($M$26:$M$53)/($N$26:$N$53>0),ROW(A1)*7+COLUMN(A1)-7)),,,,2)),"")
の式を入れて、右方、下方にフィルコピーでできると思います。

※ FILTER関数が使える環境ならば、もっと簡単な式にできるものと思います。
 (私の環境では利用できないので、わかりませんが…)
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング