Jamesは、一連の行に含まれるワークシートにいくつかのデータを持っています。データの列の1つには、セルごとに複数の行があるセルが含まれています。 (セル内のデータは、アイテム間でAlt + Enterを押すことによって行に分割されました。)Jamesは、このデータを複数の行に分割したいと考えています。たとえば、行の1つのセルに3行のデータがある場合、そのセルのデータは3つの行に分割する必要があります。

Excelは、Text toColumnsツールを使用してデータを個別の列に分割する便利な方法を提供します。これを使用して、Alt + Enterを押したときにExcelが挿入するASCII10文字の存在に基づいてデータを分割できます。問題は、これによりデータが別々の列に正常に分割される一方で、Jamesが要求したように、データが別々の行に分割されないことです。

つまり、この問題の解決策にはマクロの使用が含まれている必要があります。 1つのアプローチを次のコードに示します。この例では、マクロは、ワークシート内のすべてを「展開」すること、およびワークシート内のデータが行1から始まることを前提としています。

Sub CellSplitter()

Dim Temp As Variant     Dim CText As String     Dim J As Integer     Dim K As Integer     Dim L As Integer     Dim iColumn As Integer     Dim lNumCols As Long     Dim lNumRows As Long

iColumn = 4

Set wksSource = ActiveSheet     Set wksNew = Worksheets.Add

iTargetRow = 0     With wksSource         lNumCols = Cells(1,Columns.Count).End(xlToLeft).Column         lNumRows = Cells(Rows.Count,1).End(xlUp).Row         For J = 1 To lNumRows             CText = .Cells(J, iColumn).Value             Temp = Split(CText, Chr(10))

For K = 0 To UBound(Temp)

iTargetRow = iTargetRow + 1                 For L = 1 to lNumCols                     If L <> iColumn Then                         wksNew.Cells(iTargetRow, L) _                           = .Cells(J, L)

Else                         wksNew.Cells(iTargetRow, L) _                           = Temp(K)

End If                 Next L             Next K         Next J     End With End Sub

マクロを実行するには、iColumn変数を使用して、分割するセルを含む列を指定する必要があることに注意してください。

ここに書かれているように、マクロは4番目の列の情報を分割します。さらに、セルの分割バージョンは新しいワークシートに保存されるため、元のワークシートはまったく影響を受けません。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(9396)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。