![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?a65a0e2)
エクセルで一覧表を作っています。
以下のようなことができるか、教えてください。
(例)
Sheet1(シート名:い)
A列 B列 C列 D列 E列 F列
1 田中 2017/3/1
2 鈴木 2017/3/1
3 佐藤 2017/3/5
4 鈴木 2017/3/8
5 佐藤 2017/3/11
6 山本 2017/3/19
7 田中 2017/3/22
8 田中 2017/3/28
Sheet2(シート名:ろ)
A列 B列 C列 D列 E列 F列
1 高橋 2017/3/4
2 山本 2017/3/9
3 高橋 2017/3/12
4 鈴木 2017/3/15
5 高橋 2017/3/17
6 高橋 2017/3/23
7 佐藤 2017/3/26
Sheet3(シート名:は)
A列 B列 C列 D列 E列 F列
1 田中 2017/3/15
2 山本 2017/3/23
例として上記のような表があります。
・シートが3つあり、それぞれ「い」・「ろ」・「は」という名前が付いています。
・A列には通し番号が入ります。
・B列には人の名前が入り、同じ人が何度も登場します。
・C列には時系列で日付が入ります。
「名前+日付」の組み合わせで重複するものはありません。
・表はこれからも、下にどんどん増えていきます。
この表に、同じ人が時系列で何回目に登場しているのかを
一目で分かるようにしたいのです。
また、前回は“どのシート”の“通し番号何番”だったのかも
併せて分かるようにしたいです。
(例)
Sheet1(シート名:い)
A列 B列 C列 D列 E列 F列
1 田中 2017/3/1 1 - -
2 鈴木 2017/3/1 1 - -
3 佐藤 2017/3/5 1 - -
4 鈴木 2017/3/8 2 い 2
5 佐藤 2017/3/11 2 い 3
6 山本 2017/3/19 2 ろ 2
7 田中 2017/3/22 3 は 1
8 田中 2017/3/28 4 い 7
Sheet2(シート名:ろ)
A列 B列 C列 D列 E列 F列
1 高橋 2017/3/4 1 - -
2 山本 2017/3/9 1 - -
3 高橋 2017/3/12 2 ろ 1
4 鈴木 2017/3/15 3 い 4
5 高橋 2017/3/17 3 ろ 3
6 高橋 2017/3/23 4 ろ 5
7 佐藤 2017/3/26 3 い 5
Sheet3(シート名:は)
A列 B列 C列 D列 E列 F列
1 田中 2017/3/15 2 い 1
2 山本 2017/3/23 3 い 6
上記のように、D列には同じ人の中で何回目の登場かを、
E列には同じ人の前回のデータ行があるシート名を、
F列には同じ人の前回のデータ行にある通し番号を、
該当なしにはハイフンが入るようにしたいのですが、
関数だけでこういうことが出来るでしょうか?
よろしくお願いいたします。
No.8ベストアンサー
- 回答日時:
Ⅱ-2がエラーでないのは良かったです。
INDIRECTの中身が範囲指定なので、試してもらう内容としては失敗でした。(汗)
="作業用の日付!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&":"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)
と、中身だけを試してもらうべきでした。
しかし、エラーとなっていないのであれば中身も問題ないかと思います。
それよりもⅡ-1が問題ですね。ⅡはⅡ-1を含んでいるので、Ⅱ-1がエラーのせいでエラーなのだと思います。
=INDIRECT("作業用の日付順!"&MATCH(C5,LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1),FALSE)&D5)
がエラーということですが、
Ⅰによって
=LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)は「H」と表示されているということなので、
=INDIRECT("作業用の日付順!"&MATCH(C5,"H",FALSE)&D5)
あぁ…これは明らかにミスってますね。すみません。
ここのMATCHは不要で、
=INDIRECT("作業用の日付順!"&"H"&D5)
となれば問題ないはずなので、
E5=IF(D5=1,"-",LEFT(INDIRECT("作業用のセル位置!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&MATCH(INDIRECT("作業用の日付順!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&D5),INDIRECT("作業用の日付!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&":"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)),FALSE)),1))
ではどうでしょうか?
上手くいったのであれば、F5も
F5=IF(D5=1,"-",RIGHT(INDIRECT("作業用のセル位置!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&MATCH(INDIRECT("作業用の日付順!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&D5),INDIRECT("作業用の日付!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&":"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)),FALSE)),LEN(INDIRECT("作業用のセル位置!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&MATCH(INDIRECT("作業用の日付順!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&D5),INDIRECT("作業用の日付!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&":"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)),FALSE)))-3))
としてみてください。
E5がおかしければ、こちらもおかしいので試さなくていいです。
ありがとうございます! できました!!
本当に出来るものなんですね!
ただ、F列が補足画像のように1多い状態ですので、
式の最後に-1を足しておけば完成でしょうか?
実はもう一つ出来ればいいなと思っていることがあります。
先日「同じ名前の中でランク付けをする方法」という質問をしたのですが、
それに今回の「3つのシートに散在しているデータを時系列で」を
組み合わせたいのです。実はこれが本命でして…。
シートをまたいで日付順にどうこうするということが
実際に出来るとは思っていませんでしたもので。
しかし、今回でそれも実現可能だろうということが分かりましたので
また機会を改めて質問したいと思います。
お忙しい所、長々とお付き合いくださりありがとうございました。
No.7
- 回答日時:
E,FはDと別にエラーが出てたわけですね。
※とりあえず先にほぼ下端の方にある☆マークで区切っている行を先に確認してください。
色々書いた後で気付いたので、それが原因なら前半読む意味なしです。
先程同様かと思いましたが、こちらは()の数は合ってるようですね。
内容を順に検証します。
E2=IF(①D2=1,"-",LEFT(②INDIRECT(③"作業用-セル位置!"&LEFT(④ADDRESS(⑤1,MATCH(⑥B2,$1:$1,FALSE❻),4❺),LEN(⑤ADDRESS(⑥1,MATCH(⑦B2,$1:$1,FALSE❼),4❻)❺)-1❹)&MATCH(④INDIRECT(⑤"作業用-日付順!"&MATCH(⑥C2,LEFT(⑦ADDRESS(⑧1,MATCH(➈B2,$1:$1,FALSE❾),4❽),LEN(⑧ADDRESS(➈1,MATCH(⑩B2,$1:$1,FALSE❿),4❾)❽)-1❼),FALSE❻)&D2❺),INDIRCT(⑤"作業用-日付!"&LEFT(⑥ADDRESS(⑦1,MATCH(⑧B2,$1:$1,FALSE❽),4❼),LEN(⑦ADDRESS(⑧1,MATCH(➈B2,$1:$1,FALSE❾),4❽)❼)-1❻)&":"&LEFT(⑥ADDRESS(⑦1,MATCH(⑧B2,$1:$1,FALSE❽),4❼),LEN(⑦ADDRESS(⑧1,MATCH(➈B2,$1:$1,FALSE❾),4❽)❼)-1❻)❺),FALSE❹)❸),1❷)❶)
①D2=1の時"-"を、違っている場合は
②次のデータの左から1文字を抽出する。
③セル位置シートの
④~⑦B2と一致する列の列名と
④~⑩「日付順シートの「B2と一致する列の列名&D2」というセルのデータ」に一致する、
⑤~➈日付シートの「B2と一致する列」にあるデータの行番号
今回はE2をE5の例で考え、
B5=鈴木=H列
よってセル位置シートのH&
「「日付順シートのH2=鈴木の1番目のデータの日付=2017/3/1」に一致する、
日付シートのH列のデータ=セル位置シートによって表示されたセルのデータ」の行番号なので、
結局「セル位置シートのH3=い!C5」の左1文字で「い」となる。
と思ったのですが…
どこでエラーとなっているか、個別に確かめましょう。(E5の式を想定してやります)
あ、シート名も「-」を「の」に変えておきますね
元の式
E5=IF(D5=1,"-",LEFT(INDIRECT("作業用のセル位置!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&MATCH(INDIRECT("作業用の日付順!"&MATCH(C5,LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1),FALSE)&D5),INDIRCT("作業用の日付!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&":"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)),FALSE)),1))
Ⅰ
=LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)
これは「H」になるはず
Ⅱ
=MATCH(INDIRECT("作業用の日付順!"&MATCH(C5,LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1),FALSE)&D5),INDIRCT("作業用の日付!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&":"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)),FALSE)
これは「3」になるはず
Ⅰは短いですし、まず合ってると思いますので、Ⅱが原因であるとしてもう少し分解。
Ⅱがきちんと3になっていれば、以下の検証は不要です。
Ⅱ-1
=INDIRECT("作業用の日付順!"&MATCH(C5,LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1),FALSE)&D5)
Ⅱ-2
=INDIRCT("作業用の日付!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&":"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1))
ん…ここ、INDIRCTになってる…INDIRECTのミスですね。さてはこれが原因かも…
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
E5=IF(D5=1,"-",LEFT(INDIRECT("作業用のセル位置!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&MATCH(INDIRECT("作業用の日付順!"&MATCH(C5,LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1),FALSE)&D5),INDIRECT("作業用の日付!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&":"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)),FALSE)),1))
E5がこれで直れば、F5も↓のように直して下さい。
直らなければ、↑のⅠ及びⅡ-1がどのように表示されるか試してください。
F5=IF(D5=1,"-",RIGHT(INDIRECT("作業用のセル位置!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&MATCH(INDIRECT("作業用の日付順!"&MATCH(C5,LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1),FALSE)&D5),INDIRECT("作業用の日付!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&":"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)),FALSE)),LEN(INDIRECT("作業用のセル位置!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&MATCH(INDIRECT("作業用の日付順!"&MATCH(C5,LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1),FALSE)&D5),INDIRECT("作業用の日付!"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)&":"&LEFT(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B5,$1:$1,FALSE),4))-1)),FALSE)))-3))
ありがとうございます。早速試してみました。
Ⅰは「H」になりました。
Ⅱは「#VALUE」です。
Ⅱ-1も「#VALUE」です。
Ⅱ-2はDIRECTにした所、ブランクになりました。
No.6
- 回答日時:
>後ろのほうの「)」と黒丸数字の数が合っていないような?
合ってない事を確認するために数字を入れたわけです。
なので、 →「)」が多いですね。… となったわけです。
>D列・E列・F列、全て#REF!と表示されます。
というのは、①とかを入れた式の話ですかね?であれば、エラーが出て当然なわけですが…
分かり辛い書き方をしてしまい申し訳ないです。
その次の段落で書いている式の方は日付表示になった時の式から余分な「)」を2つ減らした式なわけですが、そちらがエラーになったのでしょうか?
申し訳ございません。タッチの差で補足記事を投稿したところでした。
D列の式は合っています。
ありがとうございます。
残るは、E列とF列の#VALUE!です。
No.5
- 回答日時:
それは表示形式が日付になっているだけで、中の値は1ですね。
=LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1))
がGなら…ん??
=MATCH(①C2,INDIRECT(②"作業用-日付順!"&LEFT(③ADDRESS(④1,MATCH(⑤B2,$1:$1,FALSE❺),4❹),LEN(④ADDRESS(⑤1,MATCH(⑥B2,$1:$1,FALSE❻),4❺)❹)-1❸)❷)&":"&LEFT(②ADDRESS(③1,MATCH(④B2,$1:$1,FALSE❹),4❸),LEN(③ADDRESS(④1,MATCH(⑤B2,$1:$1,FALSE❺),4❹)❸)-1❷)❶)),FALSE)-1
すいません。「)」が多いですね。間違えたままコピーして更に増えたようです。
=MATCH(C2,INDIRECT("作業用-日付順!"&LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1)&":"&LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1)),FALSE)-1
これでどうでしょう?
式を自動修正する必要がなくなったので表示はでなくなるかな?
エラーメッセージは出ませんでしたが、
D列・E列・F列、全て#REF!と表示されます。
=MATCH(①C2,INDIRECT(②"作業用-日付順!"&LEFT(③ADDRESS(④1,MATCH(⑤B2,$1:$1,FALSE❺),4❹),LEN(④ADDRESS(⑤1,MATCH(⑥B2,$1:$1,FALSE❻),4❺)❹)-1❸)❷)&":"&LEFT(②ADDRESS(③1,MATCH(④B2,$1:$1,FALSE❹),4❸),LEN(③ADDRESS(④1,MATCH(⑤B2,$1:$1,FALSE❺),4❹)❸)-1❷)❶)),FALSE)-1
後ろのほうの「)」と黒丸数字の数が合っていないような?
No.4
- 回答日時:
「い」のD2は
=MATCH(C2,INDIRECT("作業用-日付順!"&LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1))&":"&LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1))),FALSE)-1
でしたか。
C2の日付に一致する「日付順のシートの田中さんの列にあるデータ」の行番号-1を表示させる式ですね。
文字式から数字を抽出して計算に用いているのですが、設定によって注意が出たのかもしれません。
エラーチェックか何かの設定を変えれば消える気がします。
それよりも、内容が=1+1で2となっている事が気になります。
2行目がヒットして2が返って来るので、2-1=1が表示されるはずなのですが…
=MATCH(C2,INDIRECT("作業用-日付順!"&"G"&":"&"G"),FALSE)-1
としたらどうなりますか?
No.3
- 回答日時:
昨晩は仕事だった為返事が遅くなり申し訳ないです。
セル位置の
G2=IF(ROW()-1>MAX(は!G:G),"",IF(ROW()-1<MIN(ろ!G:G),"い!C"&MATCH(ROW()-1,い!G:G,FALSE),IF(ROW()-1>MAX(ろ!G:G),"は!C"&MATCH(ROW()-1,は!G:G,FALSE),"ろ!C"&MATCH(ROW()-1,ろ!G:G,FALSE))))
の式で該当セルの無いシートが含まれている人にエラーが出るのですね。
G2=「は」のG列最大値(4)が1より大きければ空白(今回は違う)、「ろ」のG列最小値(0)が1より大きければ…(今回は違う)、「ろ」のG列最大値(0←☆該当が無いため0となっているのが問題☆)が…
同様に最初の「は」のG列最大値も、該当ない場合は0となってしまっている。
この2箇所を、該当が無い場合はそれより前のシートを参照して最大値を比較できるようにしましょう。
G2=IF(ROW()-1>IF(MAX(は!G:G)>0,MAX(は!G:G),IF(MAX(ろ!G:G)>0,MAX(ろ!G:G),MAX(い!G:G))),"",IF(ROW()-1<MIN(ろ!G:G),"い!C"&MATCH(ROW()-1,い!G:G,FALSE),IF(ROW()-1>IF(MAX(ろ!G:G)>0,MAX(ろ!G:G),MAX(い!G:G)),"は!C"&MATCH(ROW()-1,は!G:G,FALSE),"ろ!C"&MATCH(ROW()-1,ろ!G:G,FALSE))))
これでどうでしょう?
「は」の最大値のところを、「は」の最大値が0より大きい(つまり該当がある)場合にはそのまま、
該当が無い場合は「ろ」の最大値で同様に比較し、該当があればそれを、
無い場合は「い」の最大値を、比較対象とした。
「ろ」の最大値のところは、これの後半と同じ。
「は」のG2も同様の理由で間違えてたようですね。ご自分で訂正されたようで、ありがとうございます。
お忙しい所、申し訳ございません。お答えくださりありがとうございます。
実の所、先の補足記事を投稿してからも自分なりに試行錯誤いたしまして
日付順に並べる所まではできるようになりました。
ちなみにシートの名前ですが、”-”が付いていると色々面倒ですので
「作業用の~」と変更しています。
シート:作業用のセル位置
G2=IF(MAX(は!G:G)=0,IF(MAX(ろ!G:G)=0,IF(ROW()-1>MAX(い!G:G),"","い!C"&MATCH(ROW()-1,い!G:G,FALSE)),IF(ROW()-1>MAX(ろ!G:G),"",IF(ROW()-1<MIN(ろ!G:G),"い!C"&MATCH(ROW()-1,い!G:G,FALSE),"ろ!C"&MATCH(ROW()-1,ろ!G:G,FALSE)))),IF(MAX(ろ!G:G)=0,IF(ROW()-1>MAX(は!G:G),"",IF(ROW()-1<MIN(は!G:G),"い!C"&MATCH(ROW()-1,い!G:G,FALSE),"は!C"&MATCH(ROW()-1,は!G:G,FALSE))),IF(ROW()-1>MAX(は!G:G),"",IF(ROW()-1<MIN(ろ!G:G),"い!C"&MATCH(ROW()-1,い!G:G,FALSE),IF(ROW()-1>MAX(ろ!G:G),"は!C"&MATCH(ROW()-1,は!G:G,FALSE),"ろ!C"&MATCH(ROW()-1,ろ!G:G,FALSE))))))
yuji3690さんのご提示くださった式と比べて、異常に長くて不細工ですね。
それはそれとして、本題です。
「い」のシートのD2、E2、F2にご提示くださった式を入力しますと
補足画像のようなエラーメッセージが出たり、#VALUE!の嵐になります。
シート名を変更してもエラーメッセージが出ます。
ちなみに、D9に入っている「1」は手入力したものです。ハイフンが反映されます。
しかし「2」と入力すると、E列・F列共に#VALUE!になります。
No.2
- 回答日時:
あぁ…早速失敗してましたね(汗
MAXを加えるのはIFの中でした。
G2=IF($B2=G$1,COUNTIF($B$2:$B2,$B2)+MAX(い!G:G),"")
G2=IF($B2=G$1,COUNTIF($B$2:$B2,$B2)+MAX(ろ!G:G),"")
ですね。
名前を自動抽出させる方法ですね。
「作業用ー名前抽出」とでもしてシートを作ってみましょう。
まずは3つのシート全ての名前を1列に羅列させ、
その名前が初めて出てきた場合にIDを振るようにすれば、
IDにヒットしたものを抽出することで自動化が可能と思います。
ただこの場合、「い」→「ろ」→「は」の順で羅列することになるので、
今の例だと1:田中、2:鈴木、3:佐藤、4:山本、(次から「ろ」)5:高橋…となりますが、
「い」の9に新しくAさんが加わった場合、5:A、6:高橋…
と、間に差し込まれる形になります。
問題ないとは思いますが念のため。
B2=INDIRECT(IF(ROW()-1>MAX(い!A:A),IF(RO()-1>MAX(い!A:A)+MAX(ろ!A:A),"は!B"&MAX(い!A:A)+MAX(ろ!A:A),"ろ!B"&ROW()-MAX(い!A:A)),"い!B"&ROW()))
「い」「ろ」「は」にあるデータの数だけコピーしてください。
事前に入れておきたい場合は、
B2=IF(ROW()-1>MAX(い!A:A)+MAX(ろ!A:A)+MAX(は!A:A),"",式)
とし、式の部分には先ほどのINDIRECT(~)を入れてください。
これで、3つのシートのデータ数を超えた場合は空白となるので、事前に入れておいても問題はありません。ただし、データが追加されていった時点で、事前に入れておいた数を超えた場合に気付けない可能性があります。それを避けるには、明らかに超えないように大量に設定しておくか、越えた時点でエラーが表示されるような設定を組み込む必要があります。
これによりB列には人の名前が「い」→「ろ」→「は」の順で羅列されました。
次はA列に名前のIDを振り分けていきましょう。
A2=IF(B2="","",IF(COUNTIF(B$2:B2,B2)=1,MAX(A$1:A1)+1,""))
これにより、B列のデータがB列の2行目からその行までに1個しかない(つまり初めて出てきた)場合に、A列の1行目からそのセルの上までで一番大きな数字に1加えて表示する(つまりID番号を振る)ことができます。A1は空白にしておいてくださいね。
そして同様に必要なデータの数だけコピーしましょう。B列が空白なら空白としているので、事前に入力しておいても問題ありません。
これでIDが振り終わったので、あとはVLOOKUPでそのIDの名前を抽出するだけです。
「い」のG1=IF(COLUMN()-COLUMN($F1)>MAX(作業用-名前抽出!$A:$A),"",VLOOKUP(COLUMN()-COLUMN($F1),作業用-名前抽出!$A:$B,2,FALSE))
これはG列を1番目としているので、COLUMN()-COLUMN($F1)によってF列より右に何列目であるかを計算し、その数字にヒットするIDを持った名前をVLOOKUPで抽出しています。
これを必要なだけ右にコピーしてください。
COLUMN()-COLUMN($F1)がMAX(作業用-名前抽出!$A:$A)を越えれば空白となるので、
空白になるまで貼り付けできてれば問題ありません。
データが新しく増えた場合は先ほど同様に式の数が足りているかチェックする必要があります。
No.1
- 回答日時:
シートは3つでよいのですね?
(簡易化で3つと言っているだけで、実際は10も20もシートがあるなら面倒だと思うので)
「い」・「ろ」・「は」のシートの1行目に行を挿入します。
(A列の通し番号は行番号とはずれてしまいますが、あくまで通し番号としての表示を重視で)
G列以降は空いているとして、
G1~に人の名前を入れます。
例:G1=田中、H1=鈴木、I1=佐藤…
(当然「ろ」のG1=い!G1としてコピーする方が、全部手入力より早く、ミスもないので良いです)
そして「い」の各列の2行目~データの最終行には、
G2=IF($B2=G$1,COUNTIF($B$2:$B2,$B2),"")
これを人の名前の数だけ横に、データの数だけ下に、コピーしてください。
これで、その列の1行目に書かれた人の名前とB列のデータが一致すれば、その人がこのシートの2行目からその行までに何回出てきたかを表示するようになります。
「ろ」には
G2=IF($B2=G$1,COUNTIF($B$2:$B2,$B2),"")+MAX(い!G:G)
「は」には
G2=IF($B2=G$1,COUNTIF($B$2:$B2,$B2),"")+MAX(ろ!G:G)
とりあえずこれで人毎に番号は振れました。(順番はまだです)
「作業用-セル位置」というシートを作ってください。(シート名は自由に変更してかまいません)
G1~には同様に人の名前を入れてください。(特に使いませんが、見て分かるように)
G2=IF(ROW()-1>MAX(は!G:G),"",IF(ROW()-1<MIN(ろ!G:G),"い!C"&MATCH(ROW()-1,い!G:G,FALSE),IF(ROW()-1>MAX(ろ!G:G),"は!C"&MATCH(ROW()-1,は!G:G,FALSE),"ろ!C"&MATCH(ROW()-1,ろ!G:G,FALSE))))
G2を人の名前の数*データの数コピーしてください。
これでさきほど表示させた番号によって、そのセルの「行番号-1」がどのシートにあるか判別し、その行のC列(つまりそのデータの日付)のセル番地を表示します。
例の場合、G1が田中さんなので、G2には田中さんの(2-1=)1番目。つまり「い」の2行目(1行目は新しく挿入したので、該当するデータは2行目にある)であるから、「い!C2」と表示されているハズです。
「作業用-日付」というシートを作ってください。(同)
G1~には同様に人の名前を入れてください。(同)
G2=IF(作業用-セル位置!G2="","",INDIRECT(作業用-セル位置!G2))
G2を同様にコピーしてください。
これにより、先ほど表示させたセル位置に入っているデータ(つまり日付)を表示します。
「作業用-日付順」というシートを作ってください。(同)
G1~には同様に人の名前を入れてください。(同)
G2=IF(作業用-日付!G2="","",SMALL(作業用-日付!G:G,ROW()-1))
同様にコピーしてください。
これにより、先ほど表示させた日付を、小さい順に並び替えて表示します。
では、やっと「い」「ろ」「は」に戻って、D列から。
D2=MATCH(C2,INDIRECT("作業用-日付順!"&LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1))&":"&LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1))),FALSE)-1
3つのシートそれぞれで必要な行数分コピーしてください。
これにより、「先ほどの日付順のシートの「B列のデータと一致する名前の列(田中ならG)」で、C列のデータと一致する日付が何行目にあるか」から1引いたもの、つまり古い方から何番目か、を表示します。
続いてE列です。
E2=IF(D2=1,"-",LEFT(INDIRECT("作業用-セル位置!"&LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1)&MATCH(INDIRECT("作業用-日付順!"&MATCH(C2,LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1),FALSE)&D2),INDIRCT("作業用-日付!"&LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1)&":"&LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1)),FALSE)),1))
これを同様にコピーしてください。
D2が1なら-を、他の場合は、1つ前の日付を「作業用-日付順」から取得し、それに一致する行番号を「作業用-日付」から取得し、「作業用-セル位置」のその位置にあるデータから、該当するシートを表示させているはずです。
(シート名が実際は違っている場合、1文字しか抜き出さない事になっているので要修正)
F2=IF(D2=1,"-",RIGHT(INDIRECT("作業用-セル位置!"&LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1)&MATCH(INDIRECT("作業用-日付順!"&MATCH(C2,LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1),FALSE)&D2),INDIRCT("作業用-日付!"&LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1)&":"&LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1)),FALSE)),LEN(INDIRECT("作業用-セル位置!"&LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1)&MATCH(INDIRECT("作業用-日付順!"&MATCH(C2,LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1),FALSE)&D2),INDIRCT("作業用-日付!"&LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1)&":"&LEFT(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4),LEN(ADDRESS(1,MATCH(B2,$1:$1,FALSE),4))-1)),FALSE)))-3))
同様にコピー
E2とほぼ同じなのですが、シート名は左から1文字取ればよかったです。
行番号を取るには、右から?文字取らなければなりません。
?=そのセルの文字数-3(シート名1文字、!で1文字、Cで1文字、の3文字引いてます)です。
そのセルの文字数というのはLEN(セル番地)でできるのですが、その番地を再度関数で求める為、ほぼ倍の長さになってます。
書いてる間に眠くなってきたので結構間違えてるかも…
試してないので、動かなければ、どこまで正常に動いたかと、どんなエラーになったかを合わせて教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- 計算機科学 Excel ある行と列が交わったところにマークを付けるには 7 2023/01/24 08:46
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Excel(エクセル) エクセルシートのデータを1列飛ばしで別ブックのシートに貼り付けるマクロが知りたい 2 2023/06/05 22:37
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- その他(Microsoft Office) エクセルマクロ オートフィルターでで選択コピー 2 2022/04/18 11:05
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
このQ&Aを見た人はこんなQ&Aも見ています
-
今年はじめたいことは?
今年はこれをはじめたい!ということを教えてください!
-
何回やってもうまくいかないことは?
みなさんには、何回やってもうまくいかないことはありますか?
-
あなたの「プチ贅沢」はなんですか?
お仕事や勉強などを頑張った自分へのご褒美としてやっている「プチ贅沢」があったら教えてください。
-
テレビやラジオに出たことがある人、いますか?
テレビやラジオに取材されたり、ゲスト出演したことある方いますか?
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
【Excel関数】別シートに日付順でデータを抽出する方法
Visual Basic(VBA)
-
複数のシートの日付データを、別のシートで並び替え
その他(Microsoft Office)
-
Excel複数シートから日付と文字を取り出して日付順に並べたいです
Excel(エクセル)
-
-
4
Excelで2つの表を1つにまとめるには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】1回目の実行後、2...
-
エクセル内に読み込んが画像の...
-
Excelのメニューについて
-
Excelで作成した出欠表から日付...
-
Excel 偶数月の15日(土日祝...
-
Excelの数式について教えてくだ...
-
勤務外時間を出す表が作りたい
-
VLOOKUP FALSEのこと
-
エクセルの数式について教えて...
-
【マクロ】参照渡しについて。...
-
Excel 日付の表示が直せません...
-
Excelの条件付書式について教え...
-
マクロを実行すると、セル範囲...
-
【マクロ】参照渡しとモジュー...
-
【マクロ】シート追加時に同じ...
-
Excelファイルを開くと私だけVA...
-
Excelのデーターバーについて
-
エクセルの設定、特定の列以降...
-
別のシートの指定列の最終行を...
-
エクセル 同じ行の隣り合う数字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】重複する同じ行を、...
-
Excelの条件付き書式のコピーと...
-
vba 印刷設定でのカラー印刷と...
-
VBA の単語の意味を教えて下さい。
-
Excel 日付の表示が直せません...
-
エクセル 同じ行の隣り合う数字...
-
エクセル条件付き書式について。
-
エクセルの数式につきまして
-
ファイル名の変更
-
エクセル 数字のみ抽出につて
-
Excelの開始ブックを固定したい...
-
エクセルの数式について教えて...
-
エクセルのセルをクリックする...
-
=INDIRECT(RIGHT(CELL("filenam...
-
エクスプローラーで見ることは...
-
Excelの関数で質問です
-
至急お願いいたします 屋上の備...
-
エクセルでセルに入力する前は...
-
関数を教えて下さい
-
Excel 関数での質問です
おすすめ情報
早速お答えくださり、ありがとうございます。
試してみましたところ、最初の「同シート内で何回目か」の所から躓いています。
「い」のシートではうまくいったのですが、続く「ろ」と「は」では
#VALUE!の嵐状態になってしまいます。
どうもIF条件で””=ブランクの結果になると、そこにMAXの数値を足すことができないみたいです。
もしかしたら、別シートを作成してIF条件とMAXの数値を足すようにすればいいのかもしれません。
それから書き忘れていましたが、シートの数は3つでよいのですが、
名前欄に登場する人は、重複を除いても現時点で1000人を超え、これからも増える予定です。
例示では端的に分かりやすくするために5人しか登場させてません。
今現在は新しくデータを追加する際に、手動で前回分の通し番号等を入力しています。
見落とし等のミスが怖いので自動入力化したいのですが、できるでしょうか?
ありがとうございます。早速試してみました。
「い」の分はうまくいきました。
IDもきっちりふれますし、データの増加分も反映されます。
しかし、「ろ」の分から#NAME?となってしまいます…。
どうしたらよいのでしょうか?
自分なりに考えたり調べたりして、名前の抽出は何とかできるようになりました。
シート名:作業用-名前抽出
B2=IF(INDIRECT(IF(ROW()-1>MAX(い!A:A),IF(ROW()-1>MAX(い!A:A)+MAX(ろ!A:A),"は!B"&ROW()-MAX(い!A:A)-MAX(ろ!A:A),"ろ!B"&ROW()-MAX(い!A:A)),"い!B"&ROW()))=0,"",INDIRECT(IF(ROW()-1>MAX(い!A:A),IF(ROW()-1>MAX(い!A:A)+MAX(ろ!A:A),"は!B"&ROW()-MAX(い!A:A)-MAX(ろ!A:A),"ろ!B"&ROW()-MAX(い!A:A)),"い!B"&ROW())))
これで「名前抽出&該当なしには空白」にできました。
もう少しスマートな式でもできるかもしれません。
「ろ」
G2=IF($B2=G$1,COUNTIF($B$2:$B2,$B2)+MAX(い!G:G),"")
「は」
G2=IF($B2=G$1,COUNTIF($B$2:$B2,$B2)+IF(MAX(ろ!G:G)>0,MAX(ろ!G:G),MAX(い!G:G)),"")
これで同じ人毎の番号振りまでは、なんとか出来るようになりました。
しかしそこから先、セル位置表示がうまくできません。
画像のように「い・ろ・は」シート全てに数字がある人しか表示されません。
「ろ」か「は」のシートで全行空白だと、うまく拾えないようです。
ここをクリアできれば、最後までうまく出来そうな気がするのですが…。
あまり詳しくないのでお手上げ状態です。
「この数式には問題があります。」とメッセージが出ます。
こうなりました。1900年??
失礼いたいたしました。
表示方法を変更したら、こうなりました。
すみません。こちらの勘違いでした。
これでD列はうまくいきました。
あと残るのは、E列とF列の#VALUE!表示を解決することです。
お世話になりっぱなしで、申し訳ございません。
F列は式の最後に-1を足せば完成