アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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
    • good
    • 0

アクティブな範囲が可変でも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個でもいけます。
    • good
    • 0

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

    • good
    • 0

うぃ、


マクロの中で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")等)も少し変わります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!