• ベストアンサー

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行目 いきし のような感じです。 説明不足で申し訳ございません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 特定の文字を連結し、余分なセルは削除したい

    元々1つのセルに入力されているデータを、それぞれの値で集計するためMID関数で 分割していますが、特定の文字だけ左側のセルと連結をし、特定の文字だけ 入力されているセルは削除したいと思っています。 連結は「置換」で何とか出来たのですが、特定のセルを削除し、左にシフトする 何か良い方法はありますでしょうか? 宜しくお願いいたします。

  • エクセルVBA 行を文字列連結している列を連結した

    エクセルシートで行を文字列連結している列を連結したいのですが・・ 行を文字列連結しているセル「AY4」は、 データー入力されていない時は、「0」表示しないとか「””」もしくは指定文字列にしています。 =IF(AT4=0,"連結なし",ConcatenateRangeText(C4:AY4)) もしくは =IF(AT4=0,"",ConcatenateRangeText(C4:AY4)) この「AY4」のセルでデーター入力されたものだけ文字列連結したい 画面上は空白だったり「連結なし」と表示されるのでコピーすれば良いのしょうが、ユーザーフォームのCommandButton11_Click()で処理したいのですが。 又、データー入力のある、行の文字列連結と列の文字列を一緒で出来ても良いのですが

  • Excelの文字列と文字列の連結

    A1のセルにはj50 C1のセルには01(ユーザ定義で00の書式) この二つの数値をCONCATENATE()関数を用いて文字列を 連結するとj501となってしまいます。 C1のセルを文字列の書式にするとうまくj5001と表示されますがそれ以外に方法はないでしょうか?

  • Excelマクロにて文字列連結

    現在Excelのマクロにて文字列の連結を行っているのですが、 繋いだ文字列を改行を付けて連結を行いたいです。 セルとセルの中の文字列を改行を付けて連結するにはどうしたらいいのでしょうか? 例 A1セル「あああ」 B1セル「いいい」 C1セル「あああ       いいい」 Worksheets(sheet1).Range("C1").Value = Worksheets(sheet1).Range("A1").Value + Worksheets(sheet1).Range("B1").Value をすると 「あああいいい」と1行で表示されてしまいます。     ↑ ここに改行を入れるにはどうしたらいいのでしょうか? 以上、宜しくお願いします。

  • Excelで文字列の中から特定の文字の出現回数を数える

    いつもお世話になっています。 また皆さんのお知恵を拝借させて下さい。 Excelで、複数のセルに入力されている文字列の中から特定の文字だけ の個数を数えるにはどのような方法があるでしょうか。 例: A1セル あ A2セル あいう A3セル あう A4セル いう ※セル毎の文字数は一定ではありません。 上記のような場合で、「あ」は3個、「い」は2個、「う」は3個というように 特定の文字の出現回数を数えたいのです。できればVBAやマクロではなく、関数がいいのですが・・・ よろしくお願いします。

  • Excel文字列の連結について教えてください(VBA)

    Excelの文字列の結合について教えてください。 色々調べたのですが、VBA自体がよくわからず困っています。 やりたい事は、(Excel表をご参考) 『セルA1とB1とA2の文字を固定で、セルA3以降の文字以降を  順次連結してcsvに書き出すVBAを作成したい。』 どうしても繰り返す連結マクロがわかりません。 ExcelVBAに詳しい方、教えてください。 よろしくお願いします。 結果例) 20080501A01 20080501A02 20080501B01 20080501C01   ・   ・(300件以上続きます) <Excel表>    A列  B列 1  2008  05 2  01    3  A01 4  A02 5  B01 6  C01 7  ・ 8  ・

  • エクセル:入力規則のリストとセルの関数は同居できますか?

    エクセル:入力規則のリストとセルの関数は同居できますか? 普通にやるとセルの計算式はリストを選んだ時点でリストの文字に上書きされてしまうので困っています。 (例)   A              B         C 1 2008/08/02        =TODAY 2 ▽リスト           OK 3                NG 4 A2のセルにに =IF(A1>B1,"")と書いたとします。 で、さらにA2のセルに入力規則>リストで範囲B2:B4と設定したとします。 要は、A1に記入した日付が未来の場合は、 A2でリストで選択した文字を空白にしたいのです。 が、どうしてもリストの文字に上書きされてしまうので困っています。 やはり、関数を書いてあるセルに文字を書くと上書きされるのと同じですかね? なるべくVBA以外でなんとかしたいのですが、、、。(でもVBAでも可です)

  • エクセルで入力文字のチェック

    エクセルのセルに入力された値がUnicodeで****から****までの範囲内のみの文字で記述されているかのチェックをしたいのですが、 例:B3には電話番号を入力したいので半角数字と()のみで構成されているかをチェックする。 VBAでどのように記述すればよいのでしょうか? もう一つ、 セルB3に文字を入力し終えた時または、B3にあるカーソルを他のセルに動かした時に VBAが走る…と言う記述方法はあるのでしょうか? ボタンを用意し、入力後[CHECK]を押すとVBAが動くと言うのは出来るのですが… 以上よろしくお願いいたします。

  • 特定の列に特定の文字があるとき

    VBAについてです。 たとえば、エクセルのA列に「あいうえお」という文字があったとき その行を削除したいという場合 素人ながらVBAを真似てみたら、A列以外のところに「あいうえお」が 入っている行も削除されてしまいました。 あくまでA列にその文字があったときにだけ削除したいのですが どのようにしたらいいのでしょうか。 InputBoxを使っていたら、どの列に文字が入っていても 削除されてしまい困っています。

  • Excel での範囲指定を引数とした文字列連結

    Excel でA1からA10に何らかの値が入っているとします。 別のどこかのセルにA1からA10の値を連結して出したいのですが、 VBA不使用で範囲指定「A1:A10」を引数にして行う方法を探しています。 &とCONCATではセルを一つ一つ連結する方法でしかできないと思いますが、 他の関数を組み合わせてできないものでしょうか?

専門家に質問してみよう