『計算式の記述方法』(アルタイル)
以下の2つのシートがあります。 Sheet2 のデータを集計したものが Sheet1 になります。 Sheet1: B3,G3 の位置は固定 L3:M6 の範囲を固定 C4:E8,H4:J8 の範囲は固定 L列は Sheet2 で使用されている名前 M列は Sheet1 で表示される短縮名 Sheet2:B2,G2 の位置は固定です。 Sheet2 で、値が入力されているデータを Sheet1 に 値、率の順で表示します。
Sheet2 の作業Aのセル範囲を固定(例えば B3:D7 にする)の範囲でデータを入力します。 作業Bも同様に固定(例えば G3:I7 にする)
この時の C4:E6,H4:J6 のセルの計算式ってどうなりますか?
Sheet1 A B C D E F G H I J K L M ┌─┬───┬───┬─┬─┬─┬───┬───┬─┬─┬─┬────┬───┐ 1│ │ │ │ │ │ │ │ │ │ │ │ │ │ ├─┼───┼───┼─┼─┼─┼───┼───┼─┼─┼─┼────┼───┤ 2│ │ │ │ │ │ │ │ │ │ │ │ │ │ ├─┼───┼───┼─┼─┼─┼───┼───┼─┼─┼─┼────┼───┤ 3│ │作業A│ │値│率│ │作業B│ │値│率│ │田中一郎│鈴木一│ ├─┼───┼───┼─┼─┼─┼───┼───┼─┼─┼─┼────┼───┤ 4│ │ │田中一│02│03│ │ │田中次│02│03│ │田中次郎│田中次│ ├─┼───┼───┼─┼─┼─┼───┼───┼─┼─┼─┼────┼───┤ 5│ │ │山本太│03│01│ │ │山本太│04│01│ │山本太郎│山本 │ ├─┼───┼───┼─┼─┼─┼───┼───┼─┼─┼─┼────┼───┤ 6│ │ │鈴木一│03│01│ │ │ │ │ │ │鈴木一郎│鈴木 │ ├─┼───┼───┼─┼─┼─┼───┼───┼─┼─┼─┼────┼───┤
Sheet2 A B C D E F G H I J ┌─┬────┬─┬─┬─┬─┬────┬─┬─┬─┐ 1│ │ │ │ │ │ │ │ │ │ │ ├─┼────┼─┼─┼─┼─┼────┼─┼─┼─┤ 2│ │作業A │率│値│ │ │作業B │率│値│ │ ├─┼────┼─┼─┼─┼─┼────┼─┼─┼─┤ 3│ │田中一郎│03│02│ │ │田中一郎│03│ │ │ ├─┼────┼─┼─┼─┼─┼────┼─┼─┼─┤ 4│ │田中次郎│02│ │ │ │田中次郎│03│02│ │ ├─┼────┼─┼─┼─┼─┼────┼─┼─┼─┤ 5│ │山本太郎│01│03│ │ │山本太郎│01│04│ │ ├─┼────┼─┼─┼─┼─┼────┼─┼─┼─┤ 6│ │鈴木一郎│01│03│ │ │ │ │ │ │ ├─┼────┼─┼─┼─┼─┼────┼─┼─┼─┤ 7│ │ │ │ │ │ │ │ │ │ │
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
作業Aだけ =XLOOKUP($D$3:$E$3,Sheet2!$C$2:$D$2,XLOOKUP(XLOOKUP(C4,$M$4:$M$7,$L$4:$L$7,,0),Sheet2!$B$2:$B$6,Sheet2!$C$2:$D$6),,0) かな L3:M6の表は、サンプルのままではうまくいきません (´・ω・`) 2026/09/16(水) 10:54:08
こんな書き方があるかと思います。
作業Aについては、C4セルに下記の式を入れます。
=LAMBDA(rng,
LET(
_値ありのみ,FILTER(rng,CHOOSECOLS(rng,3)<>""),
_短縮名,XLOOKUP(CHOOSECOLS(_値ありのみ,1), $L$3:$L$6, $M$3:$M$6, ""),
HSTACK(_短縮名, CHOOSECOLS(_値ありのみ,3,2))
)
)(Sheet2!B3:D7)
LAMBDA関数だけを名前定義(例えば"転記"などの名前で)しておけば、 C4セルは、=転記(Sheet2!B3:D7) H4セルに =転記(Sheet2!G3:I7) と書けば済みます。調べて見て下さい。 (xyz) 2026/09/16(水) 12:18:52
間違いがありましたので、式を修正しました。(発言そのものを修正してあります) 短縮名の変換表は、$L$3:$L$6などと絶対参照にしておくのが安全でした。(名前利用なら必須) 失礼しました。
(xyz) 2026/09/16(水) 20:01:48
応答がないですね。解決したのでしょうか。
提示されている Sheet1 の表に誤りがありますので C5山本太 → 山本 C6鈴木 一 鈴木 M3鈴木 一 田中一としています。
Sheet2
|[B] |[C]|[D]|[E]|[F]|[G] |[H]|[I]
[2]|作業A |率 |値 | | |作業B |率 |値
[3]|田中一郎| 3| 2| | |田中一郎| 3|
[4]|田中次郎| 2| | | |田中次郎| 3| 2
[5]|山本太郎| 1| 3| | |山本太郎| 1| 4
[6]|鈴木一郎| 1| 3| | | | |
Sheet1 「率│値」の位置(列)が Sheet2 と違う。
|[B] |[C] |[D]|[E]|[F]|[G] |[H] |[I] |[J] |[K]|[L] |[M] [3]|作業A| |値 |率 | |作業B| |値 |率 | |田中一郎|田中一 [4]| |田中一| 2| 3| | |田中一| | 3| |田中次郎|田中次 [5]| |田中次| | 2| | |田中次| 2| 3| |山本太郎|山本 [6]| |山本 | 3| 1| | |山本 | 4| 1| |鈴木一郎|鈴木 [7]| |鈴木 | 3| 1| | |鈴木 | || | |
D4=IF(C4="", "", IF(INDEX(Sheet2!$D$3:$D$6, MATCH(C4 & "*", Sheet2!$B$3:$B$6, 0))="", "", INDEX(Sheet2!$D$3:$D$6, MATCH(C4 & "*", Sheet2!$B$3:$B$6, 0)))) E4=IF(C4="", "", IF(INDEX(Sheet2!$C$3:$C$6, MATCH(C4 & "*", Sheet2!$B$3:$B$6, 0))="", "", INDEX(Sheet2!$C$3:$C$6, MATCH(C4 & "*", Sheet2!$B$3:$B$6, 0)))) I4=IF(H4="", "", IF(INDEX(Sheet2!$I$3:$I$6, MATCH(H4 & "*", Sheet2!$G$3:$G$6, 0))="", "", INDEX(Sheet2!$I$3:$I$6, MATCH(H4 & "*", Sheet2!$G$3:$G$6, 0)))) J4=IF(H4="", "", IF(INDEX(Sheet2!$H$3:$H$6, MATCH(H4 & "*", Sheet2!$G$3:$G$6, 0))="", "", INDEX(Sheet2!$H$3:$H$6, MATCH(H4 & "*", Sheet2!$G$3:$G$6, 0)))) それぞれ↓へコピー
列が違うので式もそれに対応するように4つの式になります。
Sheet1 「率│値」の位置(列)が Sheet2 と同じ。
|[B] |[C] |[D]|[E]|[F]|[G] |[H] |[I]|[J]|[K]|[L] |[M]
[3]|作業A| |率 |値 | |作業B| |率 |値 | |田中一郎|田中一
[4]| |田中一| 3| 2| | |田中一| 3| | |田中次郎|田中次
[5]| |田中次| 2| | | |田中次| 3| 2| |山本太郎|山本
[6]| |山本 | 1| 3| | |山本 | 1| 4| |鈴木一郎|鈴木
[7]| |鈴木 | 1| 3| | |鈴木 | | | | |
D4=IFERROR(IF($C4="","",IF(INDEX(Sheet2!$C$3:$D$6,MATCH($C4&"*",Sheet2!$B$3:$B$6,0),COLUMN(A1))="","",INDEX(Sheet2!$C$3:$D$6,MATCH($C4&"*",Sheet2!$B$3:$B$6,0),COLUMN(A1)))),"") I4=IFERROR(IF($H4="","",IF(INDEX(Sheet2!$H$3:$I$6,MATCH($H4&"*",Sheet2!$G$3:$G$6,0),COLUMN(A1))="","",INDEX(Sheet2!$H$3:$I$6,MATCH($H4&"*",Sheet2!$G$3:$G$6,0),COLUMN(A1)))),"") D4(I4)を → ヘコピー、そのまま ↓ ヘコピーする。
式は D4、I4 の二つで済みます。
入力間違いを防ぐために C、D 列は 、M 列を入力規則のリストにしておいて選択できるようにすることを薦めます。
回答されている関数は使用できないので INDEX、MATCH を使用しました。
(関数苦手) 2026/09/30(水) 09:47:23
質問された以上、回答があれば返事をしてください。
Sheet2のデータをもとに、Sheet1のC4:E6,H4:J6に数式を入れて、 以下の条件を満たすように転記したいということですね。(以下、作業Aに限定して言及。作業Bも同様) このくらいの件数ならC4:C6に短縮名を手入力することも簡単かもしれませんが、 リクエストは、一応、C4:C6も計算で求めるものと解釈しました。
転記のポイントは以下。 ・Sheet2の"値"が入っている行データだけを抽出する。 ・氏名は、変換表を使って、"短縮名"に変換する。 ・率、値の順番は値・率の順番に入れ替える。
私は、スピル機能を使って、C4セルに数式を入れれば、 それ以外のセルには自動で値が表示されるようにしています。
この回答自体は、Microsoft365を使用した数式の使い方の例になっているので、 回答としてはそれで良いかも知れない。 しかし、表の作り方をもっと追及するほうが大事なことではないかとも思います。 その意味で、根本のところを指摘された(fuji)さんの指摘は貴重なものかもしれません。
----- 以下、表のフォーマットについて、私見をメモしてみます。
"集計"と書かれていますが、"抽出"と"転記"ですよね、実際は。 ですから、同じような二つのシートで持つことが手間ではないですか。 例えば、こんな形態のシートであれば一つで済みませんか? 作業種類がもっと増えても問題ありません。
作業 担当者 短縮名 値 率 作業A 田中一郎 田中一 10 10% * 田中次郎 田中次 * 山本太郎 山本 30 30% * 鈴木一郎 鈴木 60 60% 作業B 田中一郎 田中一 * 田中次郎 田中次 30 60% * 山本太郎 山本 20 40%
(注) ・* のところは上のセルと同じ値が入っているが、フォントを白にしておきます。(なお、下記注2を参照) ・短縮名は変換表を使ってXLOOKUP関数で作成します。(不要な列は非表示にすることができます) ・また、値が入っていない行を非表示にするのは、オートフィルタを使えば簡単です。
このような標準的な表であれば、その後の色々な加工も可能です。(例えばピボットテーブルの利用)
例: 氏名 作業A 作業B 総計 山本太郎 30 20 50 田中一郎 10 10 田中次郎 30 30 鈴木一郎 60 60 総計 100 50 150
過去からの経緯でそう簡単に変更できないのかもしれませんが、 おおもとを再検討すれば、不要な作業をしなくて済みますし、間違いも入りにくいです。 再検討されたらいかがでしょうか? (注2) オートフィルタを掛けたときに、最初に現れる作業名を除いてフォントを白にするのは ちょっとした手間が必要です。もし必要であればリクエストに応じて示せます。
(xyz) 2026/10/01(木) 12:56:11
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.