Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Home Premium : Excel 2013)
データベース変換処理の件
投稿日時: 18/03/23 18:02:46
投稿者: タカヒロ

お世話になります。
下表のようなデータベース処理を実施したいのですが、上手くいきません。
エクセル関数で作成する方法を教えて下さい。
 
(内容)
・B列、C列、D列はデータ元の情報です。
・Bは情報の組み合わせ情報です。@とAを一組としてIとLの情報を構成します。
⇒I列では連続する@とAの記号を2つずつ間に”、”を加えて並べて標記したいです。
 
・C列は2行ずつ同じ数字を記載しています。2行置きに累積数になっています。
下の例ですと、5行目20、7行目40、9行目80となります。
⇒L行には各@・Aの2行ずつに記載されている数値を累積では無く個別の数値として
 変換して記載。
 ※B列がBの行は無視して飛ばして計算したいです。
 
・C列の15行目で15になっていますが、数字が小さくなった段階で累積数がリセットして
L列に記載したいです。
 
 
 
 
  
 
   B    C D      I   L
 
 
5 @   20 ア     ア、イ     20
6 A  20   イ     ウ、エ     20
7 @ 40   ウ     オ、カ     40
8 A 40   エ     キ、ク     20
9 @ 80   オ     ケ、コ     100  
10 A 80   カ     サ、シ 15
11 @ 100   キ     ス、セ 30
12 A 100   ク     タ、チ 15
13 @ 200   ケ
14 A 200   コ
15 @ 15   サ
16 A 15   シ
17 @ 45   ス
18 A 45   セ
19 B 45   ソ
20 @ 60   タ
21 A 60   チ
 
 
 
 
よろしくお願いいたします。

投稿日時: 18/03/23 18:59:19
投稿者: タカヒロ

先の質問の表に歪みがありましたので、訂正いたします。
 
 
   B   C D      I    L
  
  
5 @   20 ア     ア、イ     20
6 A   20   イ     ウ、エ     20
7 @ 40   ウ     オ、カ     40
8 A 40   エ     キ、ク     20
9 @ 80   オ     ケ、コ     100  
10 A 80   カ     サ、シ 15
11 @ 100   キ     ス、セ 30
12 A 100   ク     タ、チ 15
13 @ 200   ケ
14 A 200   コ
15 @ 15   サ
16 A 15   シ
17 @ 45   ス
18 A 45   セ
19 B 45   ソ
20 @ 60   タ
21 A 60   チ
 

投稿日時: 18/03/23 19:01:00
投稿者: タカヒロ

例の表を 列を揃えて記載したのですが、なぜが歪みが生じます。
表について分かりにくい点がありますが、よろしくお願い致します。

回答
投稿日時: 18/03/23 20:24:23
投稿者: んなっと

右のほうあいているところ(下の例ではM列)に作業列
 
   B  C  D E F G H    I J K  L M
 5 @  20 ア       ア、イ     20 1
 6 A  20 イ       ウ、エ     20 1
 7 @  40 ウ       オ、カ     40 2
 8 A  40 エ       キ、ク     20 2
 9 @  80 オ       ケ、コ    100 3
10 A  80 カ       サ、シ     15 3
11 @ 100 キ       ス、セ     30 4
12 A 100 ク       タ、チ     15 4
13 @ 200 ケ                 5
14 A 200 コ                 5
15 @  15 サ                 6
16 A  15 シ                 6
17 @  45 ス                 7
18 A  45 セ                 7
19 B  45 ソ                 7
20 @  60 タ                 8
21 A  60 チ                 8
 
I5
=IFERROR(INDEX(D:D,MATCH(ROW(1:1),M:M,0))&"、"&INDEX(D:D,MATCH(ROW(1:1),M:M,0)+1),"")
下方向・↓
L5
=IF(I5="","",INDEX(C:C,MATCH(ROW(1:1),M:M,0))-TEXT(N(INDEX(C:C,MATCH(ROW(1:1),M:M,0)-1)),"[>"&INDEX(C:C,MATCH(ROW(1:1),M:M,0))&"]!0;標準"))
下方向・↓
M5
=IF(B5="","",M4+AND(B5="@",B6="A"))
下方向・↓[B列より余裕をもって下まで]

回答
投稿日時: 18/03/23 20:28:30
投稿者: んなっと

メッセージにExcelシートのデータを取り込みましょう!
http://www.moug.net/faq/info_q.html#q5_2

回答
投稿日時: 18/03/23 20:35:14
投稿者: んなっと

下のような作業列を使わない方法は、悪い方法です。
 
I5
=IFERROR(REPLACE(PHONETIC(OFFSET(D$1:D$2,AGGREGATE(15,6,ROW($4:$100)/(PHONETIC(OFFSET(B$1:B$2,ROW($4:$100),))="@A"),ROW(1:1)),)),2,0,"、"),"")

回答
投稿日時: 18/03/24 09:03:59
投稿者: んなっと

@ABと続く場合、ス、セ、ソと3つ連結する必要があるような気がします。
その場合は作業列を追加。
それからこれはおそらく不要でしょうが、「@の下にAがない」ことも考慮。
 
   B  C  D E F G H      I J K  L M  N      O
 5 @  20 ア         ア、イ     20 1  20   ア、イ
 6 A  20 イ         ウ、エ     20 1        イ
 7 @  40 ウ           オ     40 2  20   ウ、エ
 8 A  40 エ           カ     10 2        エ
 9 @  80 オ         キ、ク     10 3  40     オ
10 @  90 カ         ケ、コ    100 4  10     カ
11 @ 100 キ         サ、シ     15 5  10   キ、ク
12 A 100 ク       ス、セ、ソ     30 5        ク
13 @ 200 ケ         タ、チ     15 6 100   ケ、コ
14 A 200 コ                   6        コ
15 @  15 サ                   7  15   サ、シ
16 A  15 シ                   7        シ
17 @  45 ス                   8  30 ス、セ、ソ
18 A  45 セ                   8      セ、ソ
19 B  45 ソ                   8        ソ
20 @  60 タ                   9  15   タ、チ
21 A  60 チ                   9        チ
 
I5
=IFERROR(VLOOKUP(ROW(1:1),M:O,3,FALSE),"")
下方向・↓
L5
=IFERROR(VLOOKUP(ROW(1:1),M:N,2,FALSE),"")
下方向・↓
M5
=IF(B5="","",M4+(B5="@"))
下方向・↓
N5
=IF(B5="@",IF(C5<C4,C5,C5-C4),"")
下方向・↓
O5
=IF(B5="","",D5&IF(OR(B6="@",B6=""),"","、"&O6))
下方向・↓
 

回答
投稿日時: 18/03/24 10:39:35
投稿者: んなっと

3つ連結する必要がなく、最初の例のようにス、セだけでいいなら
  
O5
=IF(B5="","",D5&IF(B6<>"A","","、"&O6))
   
に変更。あとは同じ。

投稿日時: 18/03/25 07:17:58
投稿者: タカヒロ

                                                                
お世話になります。
前回の関数でテストを実施しました。
うまくいきました。
H列の情報をJ列に転記する必要がありましたので、
前回のご回答のC列とL列のエクセル関数を転用しまして上手く情報を移すことができました。
また、M列には別途情報がありましたのでN列にご回答のエクセル関数を書き換えさせてもらいまして
無事、情報処理ができました。
 
I列より右側の列はI列より左の情報を転記及び処理を行っているのですが
膨大な情報量がある為、次第に情報基の特定が難しくなりました。
今更ながら@とAを一組とした処理側の行の左端と情報元の2行とを紐付るシリアルbフようなものが必要であると思いました。
情報処理の一部をランダムに取り出したものの基となった生データがどの行であるのか分かるものが必要であると感じました。
 
 
※下表はシリアルb付けた場合の例として記載した為、前回とI列情報はJ列に移動させております。
左側情報元(I列を含めない左側(A列〜H列)と)から情報処理側(I列を含めて右側以降の列(I列〜右側列))との間で、シリアルbフようなもので情報を紐付。
例えば、下表でいいますとA列にB列の@とAの一組を参考にし、連続する番号を降っていくようにして
I列にそのシリアルを参考に行の情報基がどのシリアルbフ情報を転記しているのかを表したいと考えております。
 
 
 

   A   B  C  D E F G H  I      J K L  M N 
 5  1  @  20 ア        1   ア、イ     20 1 
 6  1  A  20 イ        2   ウ、エ     20 1 
 7  2  @  40 ウ        3   オ、カ     40 2 
 8  2  A  40 エ        4   キ、ク     20 2 
 9  3  @  80 オ        5   ケ、コ    100 3 
10  3  A  80 カ         6  サ、シ     15 3 
11  4  @ 100 キ        7   ス、セ     30 4 
12  4  A 100 ク        8   タ、チ     15 4 
13  5  @ 200 ケ                   5 
14  5  A 200 コ                   5 
15  6  @  15 サ                   6 
16  6  A  15 シ                   6 
17  7  @  45 ス                   7 
18  7  A  45 セ                   7 
19  7  B  45 ソ                   7 
20  8  @  60 タ                   8 
21  8  A  60 チ                   8 				
												   B  C  D E F G H      I J K  L M  N      O 
 5 @  20 ア         ア、イ     20 1  20   ア、イ 
 6 A  20 イ         ウ、エ     20 1        イ 
 7 @  40 ウ           オ     40 2  20   ウ、エ 
 8 A  40 エ           カ     10 2        エ 
 9 @  80 オ         キ、ク     10 3  40     オ 
10 @  90 カ         ケ、コ    100 4  10     カ 
11 @ 100 キ         サ、シ     15 5  10   キ、ク 
12 A 100 ク       ス、セ、ソ     30 5        ク 
13 @ 200 ケ         タ、チ     15 6 100   ケ、コ 
14 A 200 コ                   6        コ 
15 @  15 サ                   7  15   サ、シ 
16 A  15 シ                   7        シ 
17 @  45 ス                   8  30 ス、セ、ソ 
18 A  45 セ                   8      セ、ソ 
19 B  45 ソ                   8        ソ 
20 @  60 タ                   9  15   タ、チ 
21 A  60 チ                   9        チ 	
            
                                                
上表の情報処理のご検討ありがとうございます。
あえて加える事でエクセル関数が難しくなると考えておりましたので、行が3行で1組で表せるので
あれば、より情報処理がわかりやすくなると思います。
当該情報の確認には少し時間をいただきたく
 
よろしくお願い致します。
                
                                                                
                                                                
                                                                
                                                                

投稿日時: 18/03/26 14:51:54
投稿者: タカヒロ

お世話になります。
やはりG列とJ列の転記が上手くいきませんでした。
G列の数の@側の行をJ列に転記したいのですが、教えていただけませんでしょうか。
 
 
 

   B  C  D E F G H    I  J K  L M 
 5 @  20 ア       1      ア、イ 1    20 1 
 6 A  20 イ       1      ウ、エ 5    20 1 
 7 @  40 ウ       5      オ、カ 8    40 2 
 8 A  40 エ        5     キ、ク 1    20 2 
 9 @  80 オ       8      ケ、コ 5   100 3 
10 A  80 カ       8      サ、シ 3    15 3 
11 @ 100 キ        1     ス、セ 1    30 4 
12 A 100 ク        1     タ、チ 3    15 4 
13 @ 200 ケ       5             5 
14 A 200 コ       5             5 
15 @  15 サ       3             6 
16 A  15 シ       3             6 
17 @  45 ス       1             7 
18 A  45 セ       1             7 
19 B  45 ソ       1             7 
20 @  60 タ       3             8 
21 A  60 チ       3             8 

投稿日時: 18/03/26 15:00:19
投稿者: タカヒロ

お世話になります。
なんども、すみません。
下表内の数値についてですが、
G列の@行の転記をK列に行いたいのですが、上手くいきません。
『J列の2つの記号を示すB列が@である行のG列の数値を同行のK列行に記載したい』
のですが、この点についても教えていただけませんでしょうか。
 
 
 

      
   A   B  C  D E F G  H  I      J K L   M N 
 5  1  @  20 ア    5    1   ア、イ 5    20 1 
 6  1  A  20 イ    5    2   ウ、エ 8    20 1 
 7  2  @  40 ウ    8    3   オ、カ 1    40 2 
 8  2  A  40 エ    8    4   キ、ク 5    20 2 
 9  3  @  80 オ    1    5   ケ、コ 6   100 3 
10  3  A  80 カ    1     6  サ、シ 8    15 3 
11  4  @ 100 キ    5    7   ス、セ 1    30 4 
12  4  A 100 ク    5    8   タ、チ 3    15 4 
13  5  @ 200 ケ    6                5 
14  5  A 200 コ    6                5 
15  6  @  15 サ    8                6 
16  6  A  15 シ    8                6 
17  7  @  45 ス    1                7 
18  7  A  45 セ    1                7 
19  7  B  45 ソ    1                7 
20  8  @  60 タ    3                8 
21  8  A  60 チ    3                8

回答
投稿日時: 18/03/26 15:32:16
投稿者: んなっと

K5
=IF(J5="","",INDEX(G:G,MATCH(ROW(1:1),N:N,0))) 

投稿日時: 18/04/04 08:07:25
投稿者: タカヒロ

んなっと様
 
お世話になります。
教えていただきましたエクセル関数で無事対応ができました。
大変勉強になりました。
私も仕事に関する面で、もう少しパソコンについて勉強をしたいと
感じました。
今回は、大変お世話になりました。
ありがとうございました。