みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel 2列をを1列へ

Excelで2列にデータが入っているものを1列にまとめる方法をご教授いただきたいです。
また、1列にまとめた後に重複するデータをまとめたいです。
添付画像がやりたいことのイメージになります。

ただし、純粋なExcelではなく、Excelをベースにした別のツールをつかっているため、使用できる関数に制限があります。

ネットで検索するとROW()関数を使用するものが多かったのですが、ROW()関数は使用できません。
使用不可能な関数:ROW()、LEFTB()、RIGHTB()、MIDB()・・・
使用可能な関数:VLOOKUP()、MATCH()、OFFSET()・・・

作業列を使用する方法でも構いません。

ご回答よろしくお願いいたします。

投稿日時 - 2013-04-28 10:09:46

QNo.8063036

すぐに回答ほしいです

質問者が選んだベストアンサー

>他のExcelシートを参照することはできません。

特にセル参照を入力する必要はありませんが、別途 Excel を起動し、そちらで処理するということです。処理後、元のソフトに貼り戻すか、あるいは Excel ファイルの形で保存するかは任意です。コピー(Ctrl+C)とペースト(Ctrl+V)も使えませんか?できる場合は、やはり「重複の削除」がラクです。


>2列を1列に関数でまとめる方法がROW()関数が必要となるようで
 ROW()の代用が難しく悩んでおります。

インターネットでお調べになった数式の中で、入れ子になっている ROW 関数の箇所を、ただのセル参照に書き換えるだけのことです。

例えば C2 セルに「2」という値が入力されているとき、次の 2 式は全く同じ意味になります。

=small(A$1:A$3,row(j2))
=small(A$1:A$3,c2)

「row(j2)」じゃなくても、「row(a2)」でも「row(ab2)」でもどの列を指定しても、上式中の ROW は「2」を返すことになります。


No.4 さんへのお礼文を見ると、COUNTIF、MAX、IF は使ってもいいそうなので、添付図のとおり処理してみました。

D2 =(1=countif(A$2:a2,a2))*(max(D$1:d1)+1)
E1 =max(d:d)
E2 =(1=countif(A$2:A$6,b2)+countif(B$2:b2,b2))*(max(E$1:e1)+1)
F2 =a2
I2~I11 1~10
J2 =if(i2>E$1,vlookup(i2,E$2:G$6,3,),vlookup(i2,D$2:F$6,3,))

D2、E2、F2、J2 セルをコピーし、それぞれ D2:D6、E2:E6、F2:G6、J2:J11 のセル範囲に貼り付け。

もっとスマートな方法もあるかもしれませんが、それは諦めてください。お調べになった数式中に使われている ROW 以外の関数や、その他の多くの関数がそのソフトでも使えるのか使えないのか、未だ情報が提供されないままですので。

投稿日時 - 2013-04-29 19:39:32

お礼

ご回答ありがとうございます。

ROW()部分は、セルの参照でも代用できるのですね。
お教えいただきありがとうございます。


ご教授いただいた内容を自分でもExcelで試してみました。
同様な結果が得られました。

自分一人では思いもつかないやり方でした。
本当に参考になりました。

関数をすべて試していないので、ソフト内で使用できる関数を
すべて把握できていません。
質問する側として大変失礼な対応で申し訳ありません。

ご丁寧にご回答いただきありがとうございます。
助かりました。

投稿日時 - 2013-04-30 21:46:31

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(9)

ANo.9

一連の十分な大きさまである数値が事前にセル群に用意されていれば
私の今回の式の場合ROW構文は不要となります。

=CHAR(SMALL(INDEX(IF(ISERROR(CODE(A2:B6)),1,CODE(A2:B6)),,),ROW(INDIRECT("A1:A"&(COUNTA(A2:B6)+COUNTBLANK(A2:B6))))))

のROWを省いて
=CHAR(SMALL(INDEX(IF(ISERROR(CODE(A2:B6)),1,CODE(A2:B6)),,),INDIRECT("A1:A"&(COUNTA(A2:B6)+COUNTBLANK(A2:B6)))))

数値群を参照するように変えます(Z1以下に1列にあるとします)
=CHAR(SMALL(INDEX(IF(ISERROR(CODE(A2:B6)),1,CODE(A2:B6)),,),INDIRECT("Z1:Z"&(COUNTA(A2:B6)+COUNTBLANK(A2:B6)))))

これでいけると思いますよ

後は本文の指示に従って下さいね。


お役に立てていたならば幸いです。

投稿日時 - 2013-04-29 23:36:52

お礼

ご回答ありがとうございます。

ROW構文が不要ということでご教授いただいた方法を試してみました。

C1セルから順に 1,2,3,4,5・・・とセルに入力し、セル参照をしました。
しかし、うまく表示されません。

D2セル
=CHAR(SMALL(INDEX(IF(ISERROR(CODE(A2:B6)),1,CODE(A2:B6)),,),INDIRECT("C1:C"&(COUNTA(A2:B6)+COUNTBLANK(A2:B6)))))

を入力しました。これだけでは不十分でしょうか。

可能でしたら不備のご指摘お願いいたします。

投稿日時 - 2013-04-30 21:59:30

セルのコピペが可能なら、処理するデータ 2 列をコピーして別途起動した Excel に 1 列に貼り付け、「重複の削除」で削除するなどがラクです。削除後、ご質問のソフトに貼り戻す。

そうではなくて、あくまでご質問のソフト上で処理するなら、

=countif(A$2:A$6,b2)
=match(b2,A$2:A$6,)

といった感じの数式で、削除の対象データに数値によるフラグを立て、フィルタで絞り込んで「行の削除」。

フィルタも使えないという場合は、使える機能を見て、それだけで何ができるのか検討が必要かと。

ROW 関数を混ぜるというのは、1, 2, 3, …とかの、数値の「連続データ」を参照する代わりに用いています。つまり連続データをメニューなり手入力なりで用意できるようなら、ROW を使わなくても、数式で重複を除いたデータのみをいきなり並べて自動表示することも可能そうではあります。ただし使える関数の範囲によっては、数式が難解になる恐れがあります。

投稿日時 - 2013-04-29 02:40:05

お礼

ご回答ありがとうございます。

他のExcelシートを参照することはできません。
ツールも使用できないため、あくまでもソフト内で完結させる必要があります。

>ROW 関数を混ぜるというのは、1, 2, 3, …とかの、
 数値の「連続データ」を参照する代わりに用いています。
 つまり連続データをメニューなり手入力なりで用意できるようなら、
 ROW を使わなくても、数式で重複を除いたデータのみを
 いきなり並べて自動表示することも可能そうではあります。

とありますが、1,2,3,4,5・・・と順位セルに手入力した列は用意できます。
その場合、数式で重複を除きデータ表示可能でしょうか。

2列を1列に関数でまとめる方法がROW()関数が必要となるようで
ROW()の代用が難しく悩んでおります。

何かお考えがあれば教えてください。

よろしくお願いいたします。

投稿日時 - 2013-04-29 16:59:25

ANo.6

おっと!!
row()駄目なのですね (^_^;)

ROW構文がなくても
{1,2,3,4,5,…}
といった連続する数列があれば平気なのですが、
そもそも表計算ソフトですらないのですね…


配列数式すら危うそうですね。
困りましたね。


マクロは使えるのですか?

投稿日時 - 2013-04-29 00:40:25

お礼

ご回答ありがとうございます。

マクロの使用はできません。

ROW構文がなくても {1,2,3,4,5,…}
といった連続する数列があれば平気。
とのことですが、一列上から
1,2,3,4,5・・・
をセルに直接打ち込みその列を使用するのではだめでしょうか。

Nouble様がおっしゃっている意味と違いますかね・・・
お考えになっている方法があれば教えてください。

よろしくお願いいたします。

投稿日時 - 2013-04-29 16:48:06

ANo.5

勿論VBAは動かないでしょうし
他の方同様
関数式そのものでの回答も難しいですね。

ですので
1セル1文字のみの時の
やり方だけ、お教えします。

お示し頂いたデータはこう言うようになりますね、
{"あ","い";"い","う";"う","お";"え","か";"お",0}

ソートする関数は使えますか?
例えばExcelで云うところの
SMALLとかLARGです

これらで2列に入ったデータ範囲の全てを選択し
並び替え
全件出力するような関数を描きます。

Excelで云うとこんな感じ
=CHAR(SMALL(INDEX(IF(ISERROR(CODE(A2:B6)),1,CODE(A2:B6)),,),ROW(INDIRECT("A1:A"&(COUNTA(A2:B6)+COUNTBLANK(A2:B6))))))    ・・・ 式1
値にするとこんな感じ
{"";"あ";"い";"い";"う";"う";"え";"お";"お";"か"}

これを元に
1番目の要素からラスト手前の要素のものと
{"";"あ";"い";"い";"う";"う";"え";"お";"お"} ・・・ 結果1

2番目の要素からラストまでの要素のものまでを
{"あ";"い";"い";"う";"う";"え";"お";"お";"か"} ・・・ 結果2
求めます。

結果1と結果2をもたらす式をANDを掛けてnotをします。
するとこんな感じ
{TRUE;TRUE;FALSE;TRUE;FALSE;TRUE;TRUE;FALSE;TRUE} ・・・ 結果3

結果3のFALSEの部分を
結果2において、"9999999"に変える形で
反映します、
するとこんな感じ
{"あ";"い";"9999999";"う";"9999999";"え";"お";"9999999";"か"} ・・・ 結果4

再度並び替えます
{"あ";"い";"う";"え";"お";"か";"9999999";"9999999";"9999999"} ・・・ 結果4

"9999999"で無いものを数えます
=6

結果4から、1つ目から6つ目まで取り出します。
{"あ";"い";"う";"え";"お";"か"}

完成です。


文字列の扱いは非常に難しいので
四苦八苦しますが、頑張って下さいね。

如何でしょうか?
お役に立てていたならば幸いです。

投稿日時 - 2013-04-29 00:34:52

お礼

ご回答ありがとうございます。

VBAもマクロも使用できません。
関数でも困難なことなのですね・・・。

全件を昇順に表示し、重複分は数値に置き変えていく方法は
思いつきませんでした。

実際は一文字でなく、何文字かの文字列をまとめるため難しい気がします。
しかし、ご教授いただいた内容を参考にさせていただきます。

ありがとうございます。

投稿日時 - 2013-04-29 16:41:17

ANo.4

回答No3です。
作業列をC,D列に用意します。
答えをE列に表示するとします。
A列およびB列のデータは2行目から下方にあるとします。
C2セルには次の式を入力して下方にドラッグコピーします。

=IF(COUNTIF($A$2:$A2,A2)+COUNTIF($B$1:$B1,A2)=1,MAX($C$1:$D1)+1,"")

D2セルには次の式を入力して下方にドラッグコピーします。

=IF(COUNTIF($A$2:$A2,B2)+COUNTIF($B$2:$B2,B2)=1,MAX($C$1:$D1,$C2)+1,"")

E2セルには次の式を入力して下方にドラッグコピーします。

=IF(ROW(A1)>MAX(C:D),"",IF(COUNTIF(C:C,ROW(A1)),INDEX(A:A,MATCH(ROW(A1),C:C,0)),INDEX(B:B,MATCH(ROW(A1),D:D,0))))

投稿日時 - 2013-04-28 16:13:23

お礼

質問へのご回答ありがとうございます。

ご教授いただいた方法の中で、ROW()関数のみ使えないため、
ROW()関数を何かで代用できるか検討してみます。

他のご回答者様からもありましたが、ROW()でなく連続する数式ならば
代用可能かもしれないため、Excelで作業してみます。

大変参考になります。
ありがとうございます。

投稿日時 - 2013-04-29 16:33:29

ANo.3

ROW(A1)などの関数が使えないのでしたら関数を用いた対応はできないでしょう。

投稿日時 - 2013-04-28 11:29:21

お礼

ご回答ありがとうございます。

やはりROW()関数は必要不可欠なのでしょうか。

MACTH()関数で代用しようと思ったのですがうまくできませんでした。

ご経験上、ROW()関数を用いなければ実現できませんか。

もし可能えでしたら、ROW()関数を用いた場合には実現できる方法を
ご教授いただけますか。

参考にさせていただきたいです。
宜しくお願いいたします。

投稿日時 - 2013-04-28 12:47:53

ANo.2

お使いのソフトが不明ですが、
関数で処理するのではなく、
一旦一列にして(下方にコピー)、ソート後重複除去をされては如何でしょう?

libreofficeなら重複除去があるようです。

投稿日時 - 2013-04-28 11:13:39

お礼

ご回答ありがとうございます。

私の記載漏れがあり申し訳ございません。
Excelで通常使えるメニューやツール機能 
・ツール
・挿入
・データ
等のボタンがそもそもない分析ソフトなのです。

日々変化するデータ量を処理えきるよう、関数をセルに埋め込む必要があり
このような質問をさせていただきました。

至らない質問文で申し訳ございません。

貴重なご意見ありがとうございます。

投稿日時 - 2013-04-28 12:39:01

ANo.1

数にもよりますが、私なら手動でやります。それぞれをコピーして1列に貼り付けて、ツールー>重複の削除。

投稿日時 - 2013-04-28 10:28:22

お礼

ご回答ありがとうございます。

私の記載漏れがあり申し訳ございません。
Excelで通常使えるメニューやツール機能 
・ツール
・挿入
・データ
等のボタンがそもそもないソフトなのです。

そのため ツール->重複削除 は行えません。

ただ、お教えいただいた方法を使用したことがないので、
今後通常のExcelで業務を行う際に使わせていただきます。

お忙しい中、お時間いただきありがとうございます。

投稿日時 - 2013-04-28 12:33:57

あなたにオススメの質問