Home » ExcelVBA Rangeオブジェクト » 選択範囲の左端の列にデータをまとめるマクロ

選択範囲の左端の列にデータをまとめるマクロ

対象:Excel2003, Excel2007, Excel2010

他の人の作成したExcelファイルを扱っていると、いろいろな要望が出てきます。

このデータがなぜ同じセルに入っているのかと思うことがあれば、なぜこれらのデータが別々のセルに入っているのかと思うこともあります。

私が最近、扱わせていただいているExcelでは、別のセルになっているけれども、後の処理を考えると同じセルになっているほうがありがたいデータがあります。

[スポンサードリンク]

そんなデータをまとめるVBA(Visual Basic for Applications)マクロを作成してみました。

▼選択したセル範囲の左端の列にデータをまとめるマクロ

Sub 選択範囲の左端列にデータをまとめる()

 Dim iRow As Long
 Dim iCol As Long
 Dim sData As String

 Application.ScreenUpdating = False

 For iRow = Selection(1).Row To Selection(Selection.Count).Row

  sData = ""

  For iCol = Selection(1).Column To Selection(Selection.Count).Column
   sData = sData & Cells(iRow, iCol).Text & vbLf
  Next iCol

  Cells(iRow, Selection(1).Column).Value = Left(sData, Len(sData) - 1)

 Next iRow

 Application.ScreenUpdating = True

End Sub

例えば、A1:E2セルを選択した状態で上記のマクロを実行すると、A1セルには元のA1:E1セルに入力されていたデータが、A2セルには元のA2:E2セルに入力されていたデータがまとめられます。

「For iRow = Selection(1).Row To Selection(Selection.Count).Row ~ Next iRow」ループが、選択されているセル範囲を行ごとになめていく部分です。

上記のループの中の「For iCol = Selection(1).Column To Selection(Selection.Count).Column ~ Next iCol」ループが、列ごとにセルをなめていく部分です。

2つのループの中では、変数「sData」にセルの文字列を格納して、改行「vbLf」をくっつけています。(sData = sData & Cells(iRow, iCol).Text & vbLf)

中側のループを抜けたところで、変数「sData」の値を、その行の左端のセルに設定しています「Cells(iRow, Selection(1).Column) = ...」。

そのとき、最後に付加された改行「vbLf」が不要なので「Left(sData, Len(sData) - 1)」としています。

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » 選択範囲の左端の列にデータをまとめるマクロ

「ExcelVBA Rangeオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.