[[20230417150547]] 『改行データに対応するコードを受動で入力したい。』(さまよえるたましい。) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『改行データに対応するコードを受動で入力したい。』(さまよえるたましい。)

☆☆やりたいこと☆☆
D列(イベントコード)を手動から自動入力にしたい。

☆☆前提条件☆☆
A列、B列は1セル1データで日付と曜日が入力済。
C列(イベント名)は、日によって1セルにイベント名が"改行"で入力されている。
(例)
4/3(月)は4つのイベントがC列の1セルに"改行"で4つ入力されている。

D列(イベントコード)はイベントコードを1セルに"改行"で手動入力している。
D列(イベントコード)はイベントによってイベントコードがない場合もある。

C列のイベントは月ごとに発生日が変わる。
C列、D列は、記載以外のイベント名やイベントコードは発生しない

☆☆やりたいこと☆☆
D列(イベントコード)を手動から自動入力にしたい。
関数のみでできるでしょうか。
いろいろ悩んでいますが、いいアイデアが思い浮かびません。

A列(日) B列(曜日) C列(イベント名)  D列(イベントコード)
1 土
2 日
3 月       データ抽出10日分    A0100
         データ送信        A0200
         通知作成 
         再データ抽出
4 火
5 水  
6 木       データ後処理       B0100
7 金
8 土
9 日
10 月       引落
11 火       データ後処理        B0200
12 水
13 木
14 金       会員用データ抽出      C0100
15 土  
16 日
17 月
18 火       データ抽出25日分       A0101
         データ送信          A0201
19 水
20 木
21 金
22 土
23 日
24 月
25 火       引落   
26 水       データ後処理        B0201
27 木
28 金       会員用データ抽出      C0200
29 土
30 日

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 例えばイベント名・データ送信に対してコードがA0200、A0201と二つあるがこれはコード自体はA020でそのあとに順番が
 付加されるということだろうか?
 もしそうだとするとコード・A010に対応するイベント名がデータ抽出10日分、データ抽出25日分と2種類あることになるが
 ここら辺の説明をお願いできないだろうか?
(ねむねむ) 2023/04/17(月) 16:46:55

>1セルにイベント名が"改行"
なぜそのような入力にするのですか。

(?) 2023/04/17(月) 17:01:03


>C列(イベント名)は、日によって1セルにイベント名が"改行"で入力されている。
そのことが処理しにくくしている元凶だと思います。
1セルに1イベントにはできないのですか?
そうすれば、単純にVLOOKUPとかで対応できると思いますが。
作業用のシートであれば、できるだけ作業しやすいものにするほうがよいと思います。

# 完全に内容が衝突しました。

(xyz) 2023/04/17(月) 17:14:44


ねむねむ様
分かりずらくすいません。
表示の仕方を考えて投稿すべきでした。

1回目のデータ送信が  A0200
2回目のデータ送信が  A0201

となります。

1回目データ後処理       B0100
2回目データ後処理        B0200
3回目データ後処理        B0201

となります。
こちらで答えになってますでしょうか?
(さまよえるたましい。) 2023/04/17(月) 17:26:11


(?)様
(xyz)様

そうですよね。
1セル1データにしてほしいのですが、こちらのイベント名のデータは他チームから頂いているデータです。
イベントコードが必要なのは自分のチームなのです。

うーん、おっしゃる通りこちらでまずは、1セル1データに直してからイベントコード入力について考えた方がいいかもですね。

(さまよえるたましい。) 2023/04/17(月) 17:31:30


1回目データ後処理 B0100 なのに 2回目は B0200 から始める理由は何ですか。
さらに指摘されていますけどこれも処理しにくくしている要因にもなりますね。
(?) 2023/04/17(月) 18:09:26

 >1回目のデータ送信が A0200
 >2回目のデータ送信が A0201
 >となります。
 >1回目データ後処理  B0100
 >2回目データ後処理  B0200
 >3回目データ後処理  B0201
 >となります。

 なんか、B000のルールに統一性がない様に見えるんですが、ホントですか?

 常識的に考えると
 1回目データ後処理  B0100
 2回目データ後処理  B0101
 3回目データ後処理  B0102

 または
 1回目データ後処理  B0100
 2回目データ後処理  B0200
 3回目データ後処理  B0300

 が相場だと思うんですがねぇ。。

(半平太) 2023/04/17(月) 19:45:11


>(?)さま
>半平太さま

私も今年度から引き継いだ業務なので理由はよく分かりません。
おっしゃる通り分かりずらいですよね。

うーん、元データがわかりずらいとの評判(?)なので、元データを改行しないで1セル1データにいじれないか、やり方を模索してみます。

また分からないことが出てきそうなので、また相談させてください。

(さまよえるたましい。) 2023/04/18(火) 09:16:57


 正しいならそれでいいですが、
 その後はどうなるんですか?

 B0202、B0203、・・・、ですか?

 それとも、その後は絶無(つまり最多で3つまで)なんですか?

(半平太) 2023/04/18(火) 09:25:54


 >データ抽出10日分 A0100
 >データ抽出25日分 A0101
 こちらの説明は?
(ねむねむ) 2023/04/18(火) 09:28:56

>半平太様
C列、D列は、記載以外のイベント名やイベントコードは発生しませんので、そちらで終了です。
(☆☆前提条件☆☆ のところに記載しておりますが説明下手で申し訳ないです)

>ねむねむ様

 >データ抽出10日分 A0100
 >データ抽出25日分 A0101
こちらも毎月同じイベント名・イベントコードが発生します。
発生日付は月によって変動しますが、イベント名やイベントコードに変更ありません。

こちらの返答で答えになってますかね...??

(さまよえるたましい。) 2023/04/18(火) 09:55:51


なっていないです。
>こちらも毎月同じイベント名・イベントコードが発生します
同じイベントがある場合コードを連番にするのですかということ。
(?) 2023/04/18(火) 10:21:59

 アイデアだけ。

 1セル1イベントだとして。

 データ抽出10日分!1    A0100
 データ抽出25日分!1    A0101
 データ送信!1          A0200
 データ送信!2          A0201
 データ後処理!1        B0100
 データ後処理!2        B0200
 データ後処理!3        B0201
 会員用データ抽出!1    C0100
 会員用データ抽出!2    C0200
 という
 イベント名!出力回数   イベントコード
 という変換表を作成する。
 対応するコードがないものは表に入れない。

 そしてこの変換表に対して
 =IFERROR(VLOOKUP(C1&COUNTIF(C$1:C1,C1),変換表,2,FALSE),"")
 としてはどうだろうか?
(ねむねむ) 2023/04/18(火) 10:45:55

 すまない、
 >=IFERROR(VLOOKUP(C1&COUNTIF(C$1:C1,C1),変換表,2,FALSE),"") 
 は
 =IFERROR(VLOOKUP(C1&"!"&COUNTIF(C$1:C1,C1),変換表,2,FALSE),"")
 と修正してくれ。
(ねむねむ) 2023/04/18(火) 10:49:29

 決め打ちでいいと言うことなので・・

 D1セル =SUBSTITUTE(TRIM(REPT(" A0100",COUNTIF(C1,"*0*"))&REPT(" A0101",COUNTIF(C1,"*5*"))&CHOOSE(COUNTIF(C$1:C1,"*信*")*COUNTIF(C1,"*信*")+1,""," A0200"," A0201")&CHOOSE(COUNTIF(C$1:C1,"*後*")*COUNTIF(C1,"*後*")+1,""," B0100"," B0200"," B0201")&CHOOSE(COUNTIF(C$1:C1,"*用*")*COUNTIF(C1,"*用*")+1,""," C0100"," C0200"))," ",CHAR(10))

 下にコピー

(半平太) 2023/04/18(火) 11:05:31


>ねむねむ様
アイデアありがとうございます!
やっぱり1セル1イベントで表示するのがいちばんですよね。
現状でどうにもならなければご提案の方法を検討いたします。

(さまよえるたましい。) 2023/04/18(火) 16:32:15


>半平太さま

あなたはOFFICE TANAKAですか?
CHOOSE関数とか初めて知ったんですけど。

>CHOOSE(COUNTIF(C$1:C3,"*後*")*COUNTIF(C3,"*後*")+1,""," B0100"," B0200"," B0201")
指定の語が含まれているセルの個数が引数となり、コードを返す。
このあたりのね、応用力が半端ないですよね。

最初 " A0100" のとこ、なんで先頭に空白入れてるんだろって思ってましたが
SUBSTITUTE(TRIM〜" ",CHAR(10))のとこで改行入れるためでしたか。

>REPT(" A0100",COUNTIF(C3,"*0*")のとこなんですけど、
これIF分で記載するのがよく見るパターンですよね。
REPTも初めて見ました。
なんでIFじゃないのかと思いましたが、IF使わないのは可読性のためですか?

(さまよえるたましい。) 2023/04/18(火) 16:44:40


 >なんでIFじゃないのかと思いましたが、IF使わないのは可読性のためですか?

 IF関数の方がいいでしょうね。

 今回同じようなIF文が続くので、Falseのケースに「""」を書き連ねるのがちょっとやだなーと思ったので。。
 単なる個人的な好みの問題とさせてください。

 あと、初っ端から =IF(C1="","",・・) と書き始めればセルが空白の時、計算量がぐっと減らせるのですが、
 上と同じような感覚で省略しました。

 作式は、最良形を目指すこともありますし、その時の気分で遊んだり、色々です。
 そもそも、回答した数式を分析して追加質問する質問者もそんなにいないので、
 緊張感を持たずに回答しております。暇つぶしなので m(__)m 

(半平太) 2023/04/18(火) 17:14:06


>半平太さま

なるほど、行数が多かったらIFのが計算量減らせるってことですね。

>回答した数式を分析して追加質問する質問者もそんなにいないので
人様の成果物をなぞるだけでは、自分で出力できるようにならないとは思いますが、
せめて分析して落とし込まないと身につかんなと思い、質問させていただきました。

いやいや大変勉強になりました。
ありがとうございました。
(さまよえるたましい。) 2023/04/19(水) 10:35:50


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.