2

次の Excel マクロ要件にアプローチする方法について、誰かが何らかの洞察を持っていることを期待していました。

開始条件: 列 A の可変数のテキスト値。

提案された解決策: 列 A で可変数の連続するセルを選択し、テキストを連結し、コンマと で区切って、列 B の一番上のセルに隣接する単一の列にできるようにしたいと考えています。

例: A2-A4 がシートで選択されます。マクロを実行した後、B2 (選択範囲の上に直接隣接) のコンテンツには、「A2、A3、A4」の形式のテキストが含まれます。

A5-A10 を選択: マクロを実行した後、B5 (選択範囲の上に直接隣接) の内容には、「A5、A6、A7、A8、A9、A10」という形式のテキストが含まれます。

私を殺しているのは、複数選択の可変性を利用する方法であり、さらに、Excel マクロでループを処理する方法が明確ではありません。私は CS の学位を持っていますが、インフラストラクチャで働くことになったので、少しさびています。誰かが助けてくれますか?これで毎日の時間を大幅に節約できます。返信ありがとうございます。

4

1 に答える 1

2

次のコードは、あなたが求めていることを行います。どの程度のコメントが適切なのかわからないため、多くのコメントを追加していません。たとえば、CS の学位で推測できる場合は、各ステートメントの目的を説明したくありません。また、あなたの質問には明らかなこと以上のものがあると思います。たとえば、これをワークシートと行番号をパラメーターとして渡す関数にする必要があります。質問があれば戻ってきてください。必要に応じて回答を改善します。

Option Explicit
Sub JoinCells()

  Dim ColFirst As Long
  Dim ColLast As Long
  Dim JoinedValue As String
  Dim RowCrnt As Long
  Dim RowFirst As Long
  Dim RowLast As Long

  RowFirst = Selection.Row     ' First row of selection
  ' Selection.Rows.Count returns the number of rows in the selection.
  ' Warning! You can fool this code by making multiple selections.
  RowLast = RowFirst + Selection.Rows.Count - 1

  ColFirst = Selection.Column
  ColLast = ColFirst + Selection.Columns.Count - 1

  If ColFirst <> 1 Or ColLast <> 1 Then
    Call MsgBox("Please select a range within column ""A""", vbOKOnly)
    Exit Sub
  End If

  With Worksheets("xxxxxxx")      ' Worksheet of your choice.

    JoinedValue = .Cells(RowFirst, "A").Value
    For RowCrnt = RowFirst + 1 To RowLast
      JoinedValue = JoinedValue & "," & .Cells(RowCrnt, "A").Value
    Next
    .Cells(RowFirst, "B").Value = JoinedValue

  End With

End Sub
于 2012-04-04T15:47:30.987 に答える