- ベストアンサー
エクセルでの検索と抽出
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは! A列は文字列で、月末の31日までの行とします。 画像の配置の場合、 D2セルに =IF(COUNTIF($B$1:$B$32,D$1)<ROW(A1),"",INDEX($A$1:$A$32,SMALL(IF($B$1:$B$32=D$1,ROW($A$1:$A$32)),ROW(A1)))) これは配列数式になってしまいますので、Shift+Ctrl+Enterキーで確定! この画面からコピー&ペーストする場合は D2セルに貼り付け後、数式バー内で一度クリック! 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 このD2セルを隣のC2セルまでオートフィルでコピー! F2セルに =IF(COUNTBLANK(D2:E2),"",SUBSTITUTE(E2,"日","")-SUBSTITUTE(D2,"日","")) (配列数式ではありません) 最後にB2~D2セルを範囲指定 → D2セルのフィルハンドルで下へコピーしてみてください。 参考になりますかね?m(_ _)m
その他の回答 (2)
- KURUMITO
- ベストアンサー率42% (1835/4283)
初めに1日、2日などの日にちの付く数字については数値のみを入力してセルの表示形式で日が表示されるようにします。 例えばA2セルからA32セルまでを範囲として選択したのちにCtrlキーを押しながらD2セルからE15までのセルを範囲として追加します。その後に右クリックをして「セルの書式設定」をクリックしたのちに「表示形式」を選択します。 分類で「ユーザー定義」を選択し、種類の窓には 0"日" と入力してOKします。これでセルに数値が入力されれば日がついて表示されます。F2セルからF15セルの範囲についてもユーザー定義で 0"日間" のようにすればよいでしょう。 このような措置をすることで計算の式も簡略化することができますね。 ところでご質問の件ですがD1セルには入室の文字がありE1セルには退室の文字が入力されているとします。 D2セルには次の式を入力し、式を確定する段階でCtrlキーとShiftキーを押しながらEnterキーを押します。式の両側には{ }が表示されます。 =IF(ROW(A1)>COUNTIF($B$1:$B$32,D$1),"",INDEX($A$1:$A$32,SMALL(IF($B$1:$B$32=D$1,ROW($B$1:$B$32)),ROW(A1)))) その式をE2セルまでドラッグコピーしたのちに下方にもドラッグコピーします。 次にF2セルには次の式を入力して下方にドラッグコピーします。 =IF(COUNT(D2:E2)<>2,"",E2-D2+1) 日数をどのように数えるかで上の式のように+1にするかどうかが違ってきますね。
お礼
回答ありがとうございました! 数式で処理ができる方法をご提案いただいて 感謝しております。 ぜひ、参考にさせていただきます。
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
作業列を作れば、それほど難しくありません。ただし、関数のみでは足りないので、いくつかの要素を組み立てた数式を書きます。 (1) B列の右隣に2列挿入し、これを作業列とする。従って、D:Fの列範囲はF:Hとなる。 (2) 各セルに文字列や数式を次のとおり入力する。 C1 入室 D1 退室 C2 =($B2=C$1)*countif($B$2:$B2,C$1) F2 =index($A:$D,match(row()-1,c:c,),1) H2 =(substitute(g2,"日",)-substitute(f2,"日",))&"日間" (3) C2セルをコピーしてC2:D32の範囲に貼り付ける。F2をコピーしてF2:G11に貼り付ける。H2をコピーしてH2:H11に貼り付ける。
お礼
回答、ご提案ありがとうございました。 そういった方法もあるんですね!参考になります。 ただ、今回は数式のみで処理がしたかったのでまた別の 方法を探してみます!
お礼
目・・・・目から鱗ですっ!!! 本当に数式を使って処理できるなんて、感動しました! ありがとうございます。 なんとなく知っている関数が、こんな風に組み合わせることで うまくいくとは・・・。 数式だけで処理の解答をしてくださったので、 ベストアンサーにさせていただきます。 本当にありがとうございました。