かかかノの家 こおしんのブログ

かかかノの家 こおしんのブログ

PR

Comments

こおしん @ Re[1]:マビノギ 樋口楓のお婆ちゃん(11/17) New! KEIさんへ 有難う御座います(´▽`) お婆…
KEI@ Re:マビノギ 樋口楓のお婆ちゃん(11/17) タイトルのネタが細かい! 。・゚・(ノ∀`)・゚・。 …
こおしん @ Re[1]:チェンソーマン 第184話[走れデンジ] 感想(11/21) 元ROM専さんへ 確かにデンジに重ね合わせ…
元ROM専@ Re:チェンソーマン 第184話[走れデンジ] 感想(11/21) >デンジ以外の人の命なんてそこまで大事…
ケッキュキュヒ@ Re:ワンパンマン 第253話 206撃目[へそ曲がり] 感想(11/16) ブラストのグラサンはヴォイドが人間時代…
こおしん @ Re[1]:マビノギ 秋の夜にフラれない旅程(11/13) 沙羅紗さんへ > ベーダがレイムーンに素…
沙羅紗@ Re:マビノギ 秋の夜にフラれない旅程(11/13) (最後まで読んで・・・) まさかのレイム…
こおしん @ Re[1]:マビノギ 秋の夜にフラれない旅程(11/13) KEIさんへ 実際のイベントでは、ベーダに…
KEI@ Re:マビノギ 秋の夜にフラれない旅程(11/13) まさかの結末・・・!Σ(・ω・ノ)ノ 怪我の功名…

Calendar

Keyword Search

▼キーワード検索

Free Space

マビノギ・攻略ブログ PVアクセスランキング にほんブログ村
▼リンク(マビノギ)▼
  • 雪見家っ
    ルエリ マリー サーバーのゆきみちゃ様のブログ
  • The Beginning
    ルエリサーバーのえあ様のブログ
  • 例えば蒼石
    ルエリサーバーのせしあ様のブログ
  • 摩訶不思議なステキワールド♪
    ルエリサーバーのフラニィー様のブログ
  • まびのぐ(゜ー゜)。・・ポワァァン
    ルエリサーバーの柴谷阿笶子様のブログ
  • みどりこさんのMML
    ルエリ トリアナ サーバーのみどりこ様のMML公開ブログ
  • 彩り雲を見上げて・・・
    ルエリ トリアナ サーバーのノワキ様のブログ
  • ふぁんたじーらいふはっかーず
    ルエリ トリアナ サーバーのメルサリア様のブログ
  • ネギってる!?
    ルエリ トリアナ サーバーのニルウェヌス様のブログ
  • ホワイトゴーレムハンティング
    ルエリ トリアナ サーバーのcoron様のブログ
  • KEIの部屋
    ルエリ トリアナ サーバーのKEI様のブログ
  • 百合杏マビノギ日記
    ルエリ トリアナ サーバーの百合杏様のブログ
  • 麻雪の好き勝手
    ルエリ トリアナ サーバーの麻雪様のブログ
  • まったりいきます
    ルエリ トリアナ サーバーのテッツ様のブログ
  • そらを飛ぶ燕を想う
    ルエリ トリアナ サーバーの飛燕想様のブログ
  • トリアナ在住の蒼い人
    ルエリ トリアナ サーバーのラニル様のブログ
  • brkr♪
    ルエリ トリアナ サーバーのにゃみにゃみ様のブログ
  • 丸っちの暇神ブログ
    ルエリ トリアナ サーバーの丸っち様のブログ
  • とことんのほほん
    ルエリサーバーの秋璃様のブログ
  • 小鳥の巣ごもり
    ルエリサーバーの茜色の小鳥様のブログ
  • ひとりごと
    ルエリサーバーの黒鳥白鈴様のブログ
  • 花が熟して実が開く
    ルエリサーバーのフィカス様のブログ
  • タマネギいためニンニクマシマシ
    ルエリサーバーのムジョルダ様のブログ
  • マビノギ草子vol.2
    ルエリサーバーのxiona様のブログ
  • 悠久の楽園
    ルエリサーバーのギルド『悠久の楽園』のブログ
  • ドリラジ練習とマビノギ初心者
    ルエリサーバーのヒラリー男爵様のブログ
  • セルフィアの独り言雑記。
    ルエリ マリー サーバーのセルフィア様のブログ
  • Gauge -99.
    ルエリ タルラークキホール サーバーのタカハ様のブログ
  • あいいろ的マビ生活
    ルエリサーバーのあいいろ様のブログ
  • あうとおぶでーと
    ルエリサーバーの紫光院霞様のブログ
  • マビSS
    ルエリサーバーのシラファ様のブログ
  • 無種族-ターバン-
    ルエリサーバーのSakura様のブログ
  • エリン最後のゴーレム使い
    ルエリサーバーの秋山みかん様のブログ
  • MMORPG初心者による手探り日記
    ルエリサーバーの檀油様のブログ

  • マナビノギ
    タルラークサーバーのあすきん様のブログ
  • 蛍的あらまき生活
    タルラークサーバーの蛍様のブログ
  • だって初心者だもん
    タルラークサーバーのメイハー様のブログ
  • 金曜日はクリームソーダ
    タルラークサーバーのシーナ様のブログ
  • 中の人は男のプレイ日記・改
    タルラークサーバーの中の人は男様のブログ
  • パティの小部屋
    タルラークサーバーのパティ様のブログ
  • 床ぺろ(^ω^)えるふのりょったん
    タルラークサーバーのりょった様のブログ
  • Tone
    タルラークサーバーのneiro様のブログ
  • 200m先のコンビニに行く途中で職質された
    タルラークサーバーの紅凰華様のブログ
  • マビ喫茶晴レル屋CB
    タルラーク キホール サーバーの碧のシービー様のブログ
  • アシモフ&マリンナーサのMabinogi放浪記
    タルラーク キホール サーバーのマリンナーサ様達のブログ
  • うさぎにっき
    タルラーク キホール サーバーの仔ウサギ様のブログ
  • へっぽこぷぅのしうまい大作戦
    タルラーク キホール サーバーののるまん様のイラストブログ
  • マビノギ飲んだ暮れ日記
    タルラーク キホール サーバーのモンテ様のブログ
  • もたまび
    タルラーク キホール サーバーのもたま様のブログ
  • ゴウちゃんのマビ日記
    タルラーク キホール サーバーのゴウ様のブログ
  • 赤き龍のソロなマビ日記
    タルラーク キホール サーバーの赤龍桜乃様のブログ
  • 可愛さあまって可愛さ∞
    タルラークサーバーの遠見けい様のブログ
  • ある日のちまり 2nd
    タルラークサーバーのちまり様のブログ
  • まったりDays
    タルラークサーバーの亜綺良様のブログ
  • クマネコハイツ
    タルラークサーバーの春杏様のブログ
  • うりぼんぬのマビ日記
    タルラークサーバーのヒアリュロン様のブログ
  • Kitchen 我流 since2012
    タルラークサーバーのGarurune様のブログ
  • 銀猫の緑色
    タルラークサーバーのミード様のブログ
  • みる猫熊ぶろぐ
    タルラークサーバーのみる茶様のブログ
  • マビノギMMLなど
    タルラークサーバーのSevenheavens様のブログ
  • 「マビノギ」蜂蜜プリンの金策術(=゚ω゚)ノ
    タルラークサーバーの蜂蜜プリン様のブログ
  • エリブログ | Written by eriValentine
    タルラークサーバーのエリーヴァ様のブログ
  • 狐の婿入り
    タルラークサーバーの墓森キツネ様のブログ
  • まびびっ
    タルラークサーバーのにゃあ様のブログ
  • とあるエルフの雑記帳
    タルラークサーバーのフィロメナ様のブログ
  • マビろう 妖狐の里 | マビノギブログ
    タルラークサーバーの沙羅紗様のブログ

  • ハロ~♪ マビってる?
    マリーサーバーのオルヴィエ様の愛と感動のネタブログ
  • げき日記
    マリーサーバーのげきを様のブログ
  • 現実逃避@全力走行
    マリーサーバーのアリティ様のブログ
  • おやつの時間
    マリーサーバーのおやつ様のブログ
  • fami☆mabi
    マリーサーバーのfamilia様のブログ
  • 中の人などいませんっ!
    マリー モリアン サーバーの季節様のブログ
  • ジャイアントの繁栄
    マリー モリアン サーバーのリリィ様のブログ
  • ぱんだちゃんのおへや
    マリー モリアン サーバーのぱんだちゃんのブログ
  • 青い長耳種の日記帳
    マリーサーバーのレアリオン様のブログ
  • まったりといこうよ
    マリーサーバーのきのっぴー様のブログ
  • フューラナのマビノギ日記
    マリーサーバーのフューラナ様のブログ
  • Be Always Dresser
    マリーサーバーのアルエンヌ様のブログ
  • あっち!こっち!あした!
    マリーサーバーのロウレイ様のブログ
  • 黒の奏鳴曲 -くろのソナタ-
    マリーサーバーのヘイゼンリッテ様のブログ
  • そかろぐ
    マリーサーバーのそか様のブログ
  • 双月下のメロディ~Mimu Log~
    マリーサーバーの魅夢様のブログ
  • じゃいじゃいじゃい。
    マリーサーバーのelena様のブログ
  • 花ちんのマビ紀行記
    マリーサーバーの花命羅様のブログ
  • えり太のお散歩
    マリーサーバーのえり太様のブログ
  • ジョイアの日々徒然と。
    マリーサーバーのジョイア様のブログ
  • mabinokinon
    マリーサーバーのオキノ様のブログ
  • 草の根備忘録
    マリーサーバーのtambo様のブログ

  • ぽえっとの葉っぱたち
    全サーバーで活動のぽえってぃ様のユーザイベント情報ブログ
  • 7歳から始めたゲーム人生プレイ!
    全サーバーで活動のムッチー様のブログ

  • マビさーち
    マビノギブログ検索エンジン
  • マビアンテナ
    マビノギブログリンクサイト

  • ▼リンク(作品感想)▼
  • RUNNER'S HIGH
    侍改様の漫画・アニメ・小説・プラモデル・フィギュアの感想・レビューブログ
  • なんだかおもしろい
    だい様の漫画・アニメの感想・まとめ記事ブログ
  • 裏サンデーファン -Ura Sunday Fan-
    hayashirazan様のWeb漫画感想ブログ
  • ワンパンマンは君さ。+モブサイコ100
    ONE先生作品ファンブログ

  • ▼リンク(その他)▼
  • 奥原世詩絵-Cecie Okuhara
    奥原世詩絵様のイラスト紹介ホームページ

  • ▼当ブログのRSSアドレス▼
    http://api.plaza.rakuten.ne.jp/kakakano/rss/

    Profile

    こおしん

    こおしん

    2023/10/17
    XML
    カテゴリ: ソフト紹介
    表の中から条件に一致する特定の値を参照したい とき、
    VLOOKUP関数
    HLOOKUP関数
    INDEX関数+MATCH関数
    XLOOKUP関数(2020年以降なら)
    などを使う方法がある。

    これらの関数を駆使すれば、表の中から条件に一致する特定の値を持ってきたいとき大抵の場合上手くいくのだが、この間仕事で詰まったことがある。

    その時やりたかったことが、
    ・IDが一致する
    ・日付が「~以上」である
    ・日付が「~以下」である

    という3つの条件に一致する行の値を抽出したいというもの。

    上で挙げた関数たちは、基本的にただ条件に一致するものを持ってくるのは得意なのだが、
    「~以上」とか「~以外」とかの条件 を指定しようとするとちょっとテクニックが必要となる。

    しかも今回はそれを 「~以上」 「~以下」 複数条件 ・・・
    複数条件となると、私の知っているちょっとしたテクニックでもうまくいかない・・・


    参照元の表に計算用の列をいくつも用意すればそれも実現できるのだが、保守性の面でそれはやりたくなかった。
    そういうとき使える方法をその時頑張ってネットで検索したのだが、いい方法が見つからず・・・
    結局自分なりにやり方を見つけたので、忘れないようここに残しておく。




    概要

    例として上記のような表が存在するとする。
    各クラスの月ごとの日直担当を管理している表


    この日直管理表から、↑の結果表のK4セルのように
    ・クラス:2-1
    ・日付:2023/2/1
    ・性別:女
    の日直の名前を抽出したい場合、以下のような計算式となる。

    {=INDEX($F$9:$F$33,MATCH(1,($B$9:$B$33=$H4)*($C$9:$C$33<=$I4)*($D$9:$D$33>=$I4)*($E$9:$E$33=$J4),0),1)}


    計算式を要約するとこんな感じ。

    {=INDEX( 日直名列 ,MATCH(1,( クラス列 = "2-1" )*( 開始日列 <= "2023/2/1" )* (終了日列 >= "2023/2/1" )*( 性別列 = "女" ),0),1)}


    最初と後ろに {} がついているのは、 配列数式 という方法を使っているため。
    (配列数式がわからない人は、他のサイトで先に調べたほうがいいかもしれません。)

    ◆注意
    配列数式を使っているため、この計算式をセルに入力後は、
    必ず Ctrl+Shift+Enterキー で確定する必要があります。
    ※:ただしExcel2019以降のバージョンなら、このキーで確定する必要はなし

    このExcel計算式は、大きく3つに分けられる。
    ①:
    ($B$9:$B$33=$H4)*($C$9:$C$33<=$I4)*($D$9:$D$33>=$I4)*($E$9:$E$33=$J4)
    ②:
    MATCH(1,【①の結果】,0)
    ③:
    =INDEX($F$9:$F$33,【②の結果】,1)

    ①の計算式は、表内を検索するときの条件
    ②の計算式は、①と③の計算式を繋ぐためのもの
    ③の計算式は、最終的にセルに表示したい値の範囲を設定する


    ちなみに

    =INDEX( $F:$F ,MATCH(1,( $B:$B =$H4)*( $C:$C <=$I4)*( $D:$D >=$I4)*( $E:$E =$J4),0),1)

    のように列ごと範囲を指定しても、(このエクセルの場合)結果は同じとなる。

    逆に

    =INDEX( $F$9 : $F$33 ,MATCH(1,( $B$10 : $B$33 =$H4)*( $C$9 : $C$32 <=$I4)*( $D$9 : $D$33 >=$I4)*( $E$9 : $E$33 =$J4),0),1)

    ↑の 赤字の箇所 のように、各箇所で指定している範囲の高さが異なると、結果がおかしくなるため注意。


    列ごと範囲を指定してもなぜうまくいくのか、
    各箇所で範囲の高さが異なるとなぜおかしくなるのかは、この後の説明を見ればわかる・・・はず!




    ①の計算式

    ($B$9:$B$33=$H4)*($C$9:$C$33<=$I4)*($D$9:$D$33>=$I4)*($E$9:$E$33=$J4)
    ↓要約
    ( クラス列 = "2-1" )*( 開始日列 <= "2023/2/1" )* (終了日列 >= "2023/2/1" )*( 性別列 = "女" )


    この計算式はさらに
    ①-A: $B$9:$B$33=$H4
      (B9:B33の範囲内の値が、H4セルの値に一致するか)
    ①-B: $C$9:$C$33<=$I4
      (C9:C33の範囲内の値が、I4セルの値以下か)
    ①-C: $D$9:$D$33>=$I4
      (D9:D33の範囲内の値が、I4セルの値以上か)
    ①-D: $E$9:$E$33=$J4
      (E9:E33の範囲内の値が、J4セルの値に一致するか)
    の4つの条件に分けられる。
    (抽出したい条件を変えたい場合、これが3つになったり6つになったりする。)

    今回の例では、一致/以上/以下のパターンのみ扱っているが、当然
    ①-X: $B$9:$B$33<>$H4
    という 不等号(<>) を使った計算式にすれば、
      (B9:B33の範囲内の値が、H4セルの値と 不一致 か)
    という条件になる。


    この計算式をそれぞれ()で囲んで、それぞれを乗算(*)すると、
    指定した全ての条件に一致する場合1を返す
    という計算式になる。

    なぜ乗算するのか?
    乗算するとどうなるのか?

    については、
    ・Excelでは「A=B」のような条件式を書いた場合、
     条件が一致していれば「TRUE」、
     条件が不一致であれば「FALSE」を返す
    ・Excelでは計算するとき、
     「TRUE」は「1」として、
     「FALSE」は「0」として扱われる

    という2つのルールをわかっていれば、何をしたいのか見えてくる。


    ①の計算過程を表で説明すると以下のような感じ。

    ①の計算結果:{0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0}




    ②の計算式

    MATCH(1,【①の結果】,0)


    MATCH関数は、
    第2引数で指定した範囲内から、第1引数に一致するセルの相対的な位置を返す。

    今回の計算式の場合、
    第1引数が1
    第2引数が【①の結果】
    のため、
    配列数式で返ってきた ①の計算結果内 から、
    1に一致するセルが何番目なのか を返してくれる。

    ちなみに1に一致するセルが複数ある場合、一番最初に見つかったセルを返す。

    ②の計算過程を表で説明すると以下のような感じ。

    ②の計算結果:16



    ③の計算式

    =INDEX($F$9:$F$33,【②の結果】,1)
    ↓要約
    =INDEX(日直名列,【②の結果】,1)


    INDEX関数は、
    第1引数で指定した範囲内から、[第2引数で指定した値]行目のセルの結果を返す。
    (第3引数は何列目かを指定するが、今回は1行だけの範囲を指定しているため1固定)

    今回の場合、第1引数の範囲が F9:F33 なので、
    第2引数が1ならF9の値
    第2引数が2ならF10の値
    第2引数が3ならF11の値
    ~~~
    第2引数が24ならF32の値
    第2引数が25ならF33の値
    って感じで返してくれる。

    今回の例の場合、【②の結果】が16のため、以下のように 上から16番目のF24の値 を返す。

    ③の計算結果:"花子16代目"




    応用編:OR検索したい場合
    ここまでは全てAND条件の検索だったが、
    ここでさらに OR検索をしたい 場合、以下のような計算式になる。

    =INDEX($G$9:$G$33,MATCH(1,IF(
    (($B$9:$B$33=$I7)*($C$9:$C$33<=$J7)*($D$9:$D$33>=$J7)*($E$9:$E$33=$K7))
    +
    (($B$9:$B$33=$I7)*($C$9:$C$33<=$J7)*($D$9:$D$33>=$J7)*($F$9:$F$33=$L7)),1),0),1)

    ※長いので改行してます


    実際の検索例でいうと以下のような感じ。


    先に説明したANDだけの検索計算式と異なるのは、

    =INDEX($G$9:$G$33,MATCH(1, IF(
    (($B$9:$B$33=$I7)*($C$9:$C$33<=$J7)*($D$9:$D$33>=$J7)*($E$9:$E$33=$K7))
    +
    (($B$9:$B$33=$I7)*($C$9:$C$33<=$J7)*($D$9:$D$33>=$J7)*($F$9:$F$33=$L7)) ,1)
    ,0),1)

    太字の部分

    上の
    赤い条件式を【条件A】
    青い条件式を【条件B】

    だとすると、
    【条件A】 or 【条件B】
    といった条件になる。

    条件同士を()で囲んで+してあげればor条件での検索は完璧!
    と言いたいところなのだが・・・
    見ての通りこの計算式では2つの条件式の結果を足しているので、
    両方の結果がTRUEになる場合、結果が2となってしまい、そのままMATCH関数に渡すとうまく動かない。

    なので、
    【条件A】 【条件B】

    IF( 【条件A】 【条件B】 ,1)

    のようにIF文で囲ってあげると、
    条件の結果を加算した結果が1以上の場合1を返してくれる ようになる。

    これはorにしたい条件が増えて

    IF( 【条件A】 + 【条件B】 + 【条件C】 ,1)

    となった場合も同様である。

    ただ当然のごとく、条件を増やせば増やす程どんどん重くなるので取扱い注意!




    デメリット
    VLOOKUP関数
    HLOOKUP関数
    INDEX関数+MATCH関数
    XLOOKUP関数(2020年以降なら)

    この方法が上記の方法より明確に劣っている部分を説明する。



    デメリット①
    「~を含む文字」といったワイルドカード検索ができない

    MATCH関数やLOOKUP関数を使った条件指定なら、
    「花子*」 って感じで条件を指定してあげれば、 「花子」から始まる文字列 を検索してくれるが、今回の方法ではそれが使えない。

    もし
    名前が「花子」から始まって、
    2020/1/1 ~ 2020/1/31の期間で日直を担当した人

    て感じで調べたい場合は、
    諦めて計算用の列を別に用意するか、
    VBAマクロを使って集計したほうが良いかと思います。



    デメリット②
    重い 遅い

    とりあえずこれが1番のデメリット。
    データ量が大したことなければサクサク動くが、
    この計算式が大量に使われているExcelを開くと重くなるし、計算にも時間がかかる。
    もちろんそれは他の計算式にも言えることですが、、、やはりVLOOKUPなどの標準のExcel関数に比べれば重い。

    まず今回使っている 配列数式 という仕組みそのものが重い。
    今回説明したこれ以外にもいくつか配列数式を使う方法は考えたが、他はさらに重かった。

    データ量の多い表に対してこの計算式を使うなら、Excelの自動計算の設定をOFFにするのが賢明でしょう。
    もしくはやっぱり、デメリット①と同じくVBAマクロを使うかですね。



    この方法は自己流の方法で、正直全然自信が無いため、
    「もっといい方法があるよ」
    「ここがどういう意味かわからない」
    「こういうときに役に立ったよ」
    という方がいらっしゃったら是非是非コメント頂けると有り難いですm(_ _)m





    お気に入りの記事を「いいね!」で応援しよう

    Last updated  2024/05/18 05:58:45 AM
    コメント(0) | コメントを書く


    【毎日開催】
    15記事にいいね!で1ポイント
    10秒滞在
    いいね! -- / --
    おめでとうございます!
    ミッションを達成しました。
    ※「ポイントを獲得する」ボタンを押すと広告が表示されます。
    x
    X

    © Rakuten Group, Inc.
    X
    Design a Mobile Site
    スマートフォン版を閲覧 | PC版を閲覧
    Share by: