• ベストアンサー

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

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

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

同一シート内で、複数の連続したセル範囲の内容を結合して任意の単一セルに出力します。 使用方法は、連続したセル(元のセル)を選択し、結合結果を表示するセル(出力のセル)をCtrlキーを押しながら選択してこのマクロを実行します。 元と出力のセル選択はどちらが先でもかまいません。少しはマクロらしい?  (A9というのは選択したセルの直ぐ下に結合結果を書く意味でした?A9は指定するようにしました) セルの結合は、文字列ばかりなら『&』で結合すればいいのですが、数値の表示機式、通貨、会計、日付・時間の表示形式等は『&』では表示どおり結合できません。下記ではそのセルの表示形式のまま結合するようにしています。 標準モジュールに貼り付けます。 Public Sub KetugoMoji()   Dim srcArea, desRg As Integer 'Areasのインデックス。元のセルと結果出力セル   Dim rg As Range 'セル   With Selection     'セル範囲を2つ選択しているか(誤った選択をしたらエラーメッセージ出力)     If .Areas.Count <> 2 Then MsgBox "セル選択エラー": Exit Sub     '複数セル範囲と単一セル。元のセルと結果出力セルを決める     If .Areas(1).Rows.Count > 1 And .Areas(2).Rows.Count = 1 Then       srcArea = 1: desRg = 2     ElseIf .Areas(2).Rows.Count > 1 And .Areas(1).Rows.Count = 1 Then       srcArea = 2: desRg = 1     Else       MsgBox "セル選択エラー": Exit Sub     End If     .Areas(desRg) = "" '結果出力セルをクリア     For Each rg In .Areas(srcArea)       .Areas(desRg) = .Areas(desRg) & rg.Text     Next   End With End Sub

その他の回答 (3)

回答No.3

アクティブな範囲が可変でもOKなようにしてみました。 Sub Join() Dim Kekka As String Dim c As Range For Each c In Selection Kekka = Kekka & c.Value Next Range("A9").Value = Kekka End Sub 可変なのに結果がA9ってのも不自然なんでB1とかにすれば、セル100個でもいけます。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

エクセルの関数「CONCATENATE」を使って、VBAでA9のセルに数式を設定するか、VBAのモジュールの中で、選択されたセルの値を取得して、先にforループを使って"&"で1つに連結してから、A9に代入すればいいのではないでしょうか。

  • trytrytry
  • ベストアンサー率37% (13/35)
回答No.1

うぃ、 マクロの中でselectを使わなければ、選択セルは変わらないです。 今回の処理は単純なので、一行でも出来ます。 range("A9") = range("A1") & range("A2") & range("A3") & range("A4") & range("A5") & range("A6") & range("A7") & range("A8") これで単純にA1~A8の値を結合できます。 数値とかが含まれる場合はまた違いますし(cstrを使う)、間に区切り文字を入れる場合(range("A1") & "・" & range("A2")等)も少し変わります。

関連するQ&A

専門家に質問してみよう