OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 困ってます
  • 質問No.116819
  • 閲覧数1879
  • ありがとう数1
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 13% (21/151)

例えばエクセルシート内のA列の1~8行目までに文字が入力してあるとします。
そこで、例えばA1のセルからA8のセルを選択したまま(アクティブにしたまま)で、マクロを実行して、A9のセルにA1~A8の文字を連結した文字列を書くということはできますか?
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル13

ベストアンサー率 68% (791/1163)

同一シート内で、複数の連続したセル範囲の内容を結合して任意の単一セルに出力します。
使用方法は、連続したセル(元のセル)を選択し、結合結果を表示するセル(出力のセル)を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
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル8

ベストアンサー率 37% (13/35)

うぃ、 マクロの中でselectを使わなければ、選択セルは変わらないです。 今回の処理は単純なので、一行でも出来ます。 range("A9") = range("A1") & range("A2") & range("A3") & range("A4") & ran ...続きを読む
うぃ、
マクロの中で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")等)も少し変わります。


  • 回答No.2
レベル14

ベストアンサー率 51% (1179/2272)

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

ベストアンサー率 38% (54/141)

アクティブな範囲が可変でも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 Su ...続きを読む
アクティブな範囲が可変でも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個でもいけます。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ