• ベストアンサー

Excel 特定の文字と連結

右側のリスト内にある文字が対象文字の左側にある場合、 左側の文字と連結し、もともとあったセルは削除したいと思っています。 例)リスト内には「あ」~「そ」までが入力されています。   「あ」の右側にある文字は、「あ」が入力されているセルに連結し削除 出来ればVBA以外でお願いしたいのですが、何か良い方法は あるでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

>ちなみに、サンプルでは結合する文字「c」や「e」はデータの最後になっているのですが、さらにデータが右にある場合(F1やE2など)、左へ詰めることは可能なのでしょうか?  もし、元データを入力する列数や行数を増やしたいのでしたら、「あ」~「そ」等が入力されているリストや、連結してから左詰めにした結果を表示する表を、元データを入力する表とは別のシートにされた方が良いと思います。  例えば、元データがSheet1のA1から始まっていて、その右方向と下方向に表が続いている場合、連結してから左詰めにした結果を表示する表を、Sheet2に表示させる様にして、「あ」~「そ」等が入力されているリストはSheet3のA1~E3に移動させます。  その上で、Sheet4を作業用シートとして使用する様にします。  その場合、各関数を入力するセルと、各関数の参照先が変わりますから、以下の様に操作して下さい。  まず、Sheet4のA1セルに次の関数を入力して下さい。 =IF(OR(Sheet1!A1="",AND(COLUMN(Sheet1!A1)>1,COUNTIF(Sheet3!$A$1:$E$3,INDEX(Sheet1!1:1,COLUMN(Sheet1!A1)-1)))),"",CHAR(9)&COUNTIF(B1:INDEX(1:1,COLUMNS(1:1)),"="&CHAR(9)&"*")&CHAR(9))&Sheet1!A1&IF(COUNTIF(Sheet3!$A$1:$E$3,Sheet1!A1),B1,"")  次に、Sheet4のA1セルをコピーして、Sheet4のA1セルよりも右側にあるセル範囲に(Sheet1の元データの表の列数を上回るのに十分な列数となる様に)貼り付けて下さい。  次に、Sheet4の1行目全体をコピーして、Sheet4の2行目以下に(Sheet1の元データの表の行数を上回るのに十分な行数となる様に)貼り付けて下さい。  次に、A6セルに次の関数を入力して下さい。 =IF(COLUMNS($A:A)>COUNTIF(15:15,CHAR(9)&"*"),"",REPLACE(INDEX(15:15,MATCH(CHAR(9)&COUNTIF(15:15,CHAR(9)&"*")-COLUMNS($A:A)&CHAR(9)&"*",15:15,0)),1,LEN(COUNTIF(15:15,CHAR(9)&"*")-COLUMNS($A:A))+2,))  次に、Sheet2のA1セルに次の関数を入力して下さい。 =IF(COLUMNS($A:A)>COUNTIF(Sheet4!1:1,CHAR(9)&"*"),"",REPLACE(INDEX(Sheet4!1:1,MATCH(CHAR(9)&COUNTIF(Sheet4!1:1,CHAR(9)&"*")-COLUMNS($A:A)&CHAR(9)&"*",Sheet4!1:1,0)),1,LEN(COUNTIF(Sheet4!1:1,CHAR(9)&"*")-COLUMNS($A:A))+2,))  次に、Sheet2のA1セルをコピーして、Sheet2のA1セルよりも右側にあるセル範囲に(Sheet1の元データの表の列数を上回るのに十分な列数となる様に)貼り付けて下さい。  次に、Sheet2の1行目全体をコピーして、Sheet2の2行目以下に(Sheet1の元データの表の行数を上回るのに十分な行数となる様に)貼り付けて下さい。  以上です。

その他の回答 (4)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 回答No.1です。  回答No.1で示した例でやり方を説明致したいのですが、回答No.1で示した例では元データとなる文字が入力されているセルがF列まであるため、「あ」~「そ」のリストの位置を少しずらして、J1~N3の範囲にリストがあるものとします。  又、今仮に、15行目~18行目を作業行として使用するものとします。  まず、A15セルに次の関数を入力して下さい。 =IF(OR(A1="",AND(COLUMN(A1)>1,COUNTIF($J$1:$N$3,INDEX(1:1,COLUMN(A1)-1)))),"",CHAR(9)&COUNTIF(B15:INDEX(15:15,COLUMNS(15:15)),"="&CHAR(9)&"*")&CHAR(9))&A1&IF(COUNTIF($J$1:$N$3,A1),B15,"")  次に、A15セルをコピーして、B15~I15の範囲に貼り付けて下さい。  次に、A15~I15の範囲をコピーして、同じ列の16行目以下に貼り付けて下さい。  次に、A6セルに次の関数を入力して下さい。 =IF(COLUMNS($A:A)>COUNTIF(15:15,CHAR(9)&"*"),"",REPLACE(INDEX(15:15,MATCH(CHAR(9)&COUNTIF(15:15,CHAR(9)&"*")-COLUMNS($A:A)&CHAR(9)&"*",15:15,0)),1,LEN(COUNTIF(15:15,CHAR(9)&"*")-COLUMNS($A:A))+2,))  次に、A6セルをコピーして、A6~I14の範囲に貼り付けて下さい。  以上です。

noname#204879
noname#204879
回答No.3

[No.2補足]へのコメント、 》 ちなみに、…になっているのですが、さらに…場合、…ことは可能なのでしょうか? 最初からそう言いなさい!「ちなみに」の後出しは不愉快です。

iwashigumo33
質問者

お礼

出来ることなら…という思いで「ちなみに」と記述したのですが、不愉快に感じられたということで申し訳ございませんでした。

noname#204879
noname#204879
回答No.2

簡単のために、A列の全セルを空白とします。 添付図参照 G6: =COUNTIF($G$1:$K$3,B1) 此れを右に3列、下に2行ドラッグ&ペースト B6: =IF(B1="","",IF(G6,B1&C1,IF(F6,"",B1))) 此れを右に3列、下に2行ドラッグ&ペースト

iwashigumo33
質問者

補足

ご回答ありがとうございました。 上手くできました。 ちなみに、サンプルでは結合する文字「c」や「e」はデータの最後になっているのですが、さらにデータが右にある場合(F1やE2など)、左へ詰めることは可能なのでしょうか? 教えていただいた方法でやってみたところ、空白になりました。 もし、可能であれば、教えていただきたいです。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 どの様にされたいのか、条件が良く解りませんので、御説明を御願いします。  例えば       A列  B列  C列  D列  E列  F列 1行目   あ    a    g    か    h    j 2行目   き    あ   d    v    m 3行目   a    h    j    さ 4行目   い   き   し 等と並んでいた場合には、どの様に連結させた上で、どのセルを削除すれば良いのでしょうか?  又、削除したセルがあった場所は間を空けて表示をするのか、それとも左詰めに詰めて表示すれば良いのか、どちらになるのでしょうか?  又、右側にある文字は、 あ い う え お か き く け こ さ し す せ そ の様に、縦1列か横1列に並べて頂く訳には参りませんでしょうか?  上記の点に関して、具体的な例を示して御説明願います。

iwashigumo33
質問者

補足

ご回答いただき、ありがとうございます。 1.右側にある文字   縦1列でも横1行でも可能です。 2.削除後   左に詰めて表示したいです。 3.連結方法     A列  B列  C列  D列  E列  F列 1行目 あa   g   かh   j 2行目 きあd  v   m 3行目 a    h   j   さ 4行目 いきし のような感じです。 説明不足で申し訳ございません。