• ベストアンサー

Excel: 複数セルの内容を一つに連結するマクロ

複数セルの内容を一つに連結するマクロの書き方を教えてください。例えば、セルの内容が以下で、 A1:apple A2:orange A3:banana A1からA3を選んだ状態でマクロを実行すると、 先頭のセル(ここではA1)に連結された内容が 以下のように代入され、先頭セル以外はクリア されるようにします。 apple<改行> orange<改行> banana<改行> 選択範囲の行(横方向)の大きさは可変 ですが、列(縦方向)は1列のみです。 よろしくお願いします。

  • zuntac
  • お礼率81% (307/377)

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

1列の場合は下に、2列以上選択している場合(A1:C2 等)は A1→B1→C1→A2→B2→C2 のように繋ぎます。 Sub Test() Dim r As Range, s As String  For Each r In Selection   s = s & r.Text & vbLf   r.Clear  Next r  Selection.Cells(1, 1).Value = Left(s, Len(s) - 1) End Sub

zuntac
質問者

補足

回答ありがとうございます。 さっそくやってみたら、うまく行きました。 さらに、不要になったセルを「クリアする」のでは なくて、「そのセルの属する行全体を消す」ように したいと思いました。また、最後には結果のセル ひとつだけが選択された状態にしたいと思います。 以下の様なコードを書いてみたのですが、うまく いきません。正しい書き方を教えていただけないでしょうか。 よろしくお願いします。 Sub comb() Dim r As Range, s As String For Each r In Selection s = s & r.Text & vbLf Next r For Each r In Selection r.EntireRow.Delete Next r Selection.Cells(1, 1).Value = Left(s, Len(s) - 1)  <結果セルのみを選択状態にする> End Sub

その他の回答 (2)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

ヒントはこの行 → Selection.EntireRow.Delete EntireRow.Delete はご自分で補足に書かれたものですし、ヘルプを見るなどして意味を確認しましょう。 VBE画面で EntireRow の中にカーソルを入れて F1キーを押すとExcel VBAヘルプが起動します。 (標準ではVBAヘルプはインストールされないかも。Office のCDから追加インストール可能) あと、行全体を削除する動作と、特定セルだけを削除する動作をマクロ記録して違いを理解しましょう。

zuntac
質問者

補足

回答ありがとうございます。 ヘルプをインストールして、コードを考えてみました。 結局、Selection範囲の最初のセル以外をDeleteする というのが分からず、以下のようなあまり美しくない コードになってしまいました。 とりあえず目的は達しました。いろいろ教えて頂き ありがとうございます。これを機にVBをもっと勉強 したいと思います。 Sub comb() Dim r As Range, s As String, title As String  For Each r In Selection   s = s & r.Text & vbLf  Next r  title = ActiveCell.Offset(0, -1).Value  Selection.EntireRow.Delete  Selection.Cells(1, 1).Value = Left(s, Len(s) - 1)  Selection.Cells(1, 1).Select  ActiveCell.Offset(0, -1).Value = title End Sub

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

こんな感じ? Sub comb() Dim r As Range, s As String  For Each r In Selection    s = s & r.Text & vbLf  Next r  Selection.EntireRow.Delete  Selection.Cells(1, 1).Value = Left(s, Len(s) - 1)  Selection.Cells(1, 1).Select End Sub

zuntac
質問者

補足

再度の回答ありがとうございます。 試してみました。一つだけ問題がありました。 例えば、B1:B3の範囲を選んだ場合に、文字列の 連結結果がB1に入りますが、現在のコードでは A1の内容もDeleteされています。 A1の位置にはB1:B4の内容のタイトルが書かれている ので、A1はそのまま残しておきたいです。 そのようなコードを教えてください。 重ね重ねの質問で申しわけありませんが、 よろしくお願いします。 --------------------------- A1:TITLE B1:apple ---------------------------       B2:orange ---------------------------       B3:banana ---------------------------   ↓マクロ実行 --------------------------- A1:TITLE B1: apple          orange          banana ---------------------------

関連するQ&A

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

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

  • 完全一致したら複数のセル代入するマクロは?

    エクセルのSheet1のa列にある文字列と、Sheet2にあるa列にある文字列と完全一致したら、前者のセルの右隣から3番目までのセルに、後者のセルの右隣から3番目までの文字列を順に代入するマクロをお教えください。単純にvlookup関数を使えばいいのですが、VBAで行いたいのです。複数のセルに順に代入するのに苦慮しています。よろしくお願い申し上げます。

  • エクセルセル内の文字の連結マクロ

    例えばエクセルシート内のA列の1~8行目までに文字が入力してあるとします。 そこで、例えばA1のセルからA8のセルを選択したまま(アクティブにしたまま)で、マクロを実行して、A9のセルにA1~A8の文字を連結した文字列を書くということはできますか?

  • 複数セルの連結でVALUE!エラー

    セルとセルの連結で空のセルを指定するとVALUE!エラーが出てしまいます。 ですのでmicrosoftのQ&Aに書いてあった通りに TEXT関数でこんな感じにしてみました。 =A1 & TEXT(C1,IF(C1="","","0")) これで上手くいったのですが、本当は A1と、C1からZ1まで複数セルをまとめて連結させるのが目的です。 =A1 & TEXT(C1:Z1,IF(C1:Z1="","","0")) このようにしてみたら、またVALUE!エラーが出てしまいました。 どうやったら上手くA1とC1~Z1を連結できるでしょうか? まとめますと、 A1とC1~Z1のセルを文字列として連結させたい。 C1~Z1のセルには数字のみのセル、文字列のみのセル、空のセルなど混在してあります。 どうかお願いします。

  • セル内の2行をそれぞれ別のセルにコピーするマクロ

    A列にデータが入力されていたとします。 そのデータのうち、複数のセルで改行されて2行になっています。 改行されているセルをサーチし、1行目をB列のセルに、2行目をC列のセルに分割してコピーしたいと思います。 この様な方法は、マクロで可能でしょうか。 適切な関数があれば、ご教授いただきたいと思います。

  • 完全一致したら複数のセルを順に代入するマクロは?

    エクセルのSheet1のA列にある文字列と、Sheet2にあるA列にある文字列と完全一致したら、前者のセルの右右右隣セル(一致したセルから数えて4番目のセル)から3番目までのセルに、後者のセルの右隣セル(一致したセルから数えて2番目のセル)から3番目までの文字列を順に代入するマクロをお教えください。つまり代入開始セルをSheet1のD列にしたいのです。(実は任意の列からにしたのですが…)。単純にvlookup関数を使えばいいのですが、VBAで行いたいのです。 一致したセルの右隣のセルから順に代入するマクロは以下で解決済みです。以下のマクロを編集して実行したいのですが、どこをいじったらよいかわかりません。 なお、代入したいセルを右の任意のセルまで引き延ばしたい場合、以下のコード任意Loop Until Coln1 = 4の右辺の数字を変更すればよいことまではわかっています。どうぞ、よろしくお願い申し上げます。 ---------------- Sub 試験() Dim Row1 As Integer Dim Coln1 As Integer Dim Row2 As Integer Dim Coln2 As Integer Set WS1 = Worksheets("Sheet1") Set WS2 = Worksheets("Sheet2") Coln1 = 1 Coln2 = 1 For Row1 = 1 To WS1.Cells(Rows.Count, 1).End(xlUp).Row For Row2 = 1 To WS2.Cells(Rows.Count, 1).End(xlUp).Row If WS2.Cells(Row2, 1) = WS1.Cells(Row1, 1) Then Do Coln1 = Coln1 + 1 Coln2 = Coln2 + 1 WS1.Cells(Row1, Coln1) = WS2.Cells(Row2, Coln2) Loop Until Coln1 = 4 Coln1 = 1 Coln2 = 1 End If Next Row2 Next Row1 End Sub

  • Excel2000ののマクロでセルを埋めたいのですが

    みなさん、こんにちは。 Excel2000ののマクロを使ってでセルを "*" で埋めたいのですが、どのような 構文にすればよろしいでしょうか? "*" で埋めたい列は "Sheet2" の A , B , C ですが、行数は毎回変わります。 何行埋めるか、の変数は "Sheet1" の A1 に入っています。 繰り返し処理になると思うのですが、よくわかりません。 どうぞ、よろしくお願いします。

  • Excelマクロで複数セルの文字を連結

    Excelで以下のような列が揃わない表があります A列 B列 C列 ------------------------- あああ いいい ううう かかか きき さささ し ------------------------- これを区切り文字を入れ、別の列の一つのセルに纏めたいのですがうまい方法はありませんでしょうか F列 ------------------------- あああ/いいい/ううう かか/きき さ/し -------------------------

  • エクセルマクロでセルの数字を処理

    エクセルのマクロで以下の処理をしたいのですが、少し複雑でうまく出来ません。できればどのようなマクロを用いればよいか教えてください。 A列に数字がならんでいます。 1、A1から順番に下方向にこの数字を調べます。 2、100未満の場合はそのまま下に移動します。 3、セルの数字が100を超えていたら、100を超えていたセルを起点(1番目)として、下方向にセルの数字を調べ、起点となるセルの数字より10%以上多いセルが見つかれば、それと起点のセルとの差を調べ、見つからなければ起点のセルと30番目のセルとの差を調べます。 4、3の処理が終わったら、再び起点となったセルから1つ下に移動してA列の数字を調べ、100以上なら、再び3からの処理を繰り返します。 調べるA列のセルより下のセルが30個より少なければ終了です。 3で調べた数字の総和を求めるのが目的です。 よろしくお願いします。

  • 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  ・

専門家に質問してみよう