データリストをExcelにインポートすると、列Aに大量のデータが表示されることは珍しくありません。実際、他の列に何も表示されないことも珍しくありません。 (もちろん、これはすべて、インポートするデータの性質によって異なります。)Excelでデータを操作する一環として、データを「再編成」して、列Aだけでなくより多くの列にプルアップすることもできます。 。

例として、データをインポートし、最終的に列Aの行1から212を占めると想像してください。本当に必要なのは、データが列AからFを占めることですが、データを保持するには多くの行が必要です。したがって、A2をB1、A3からC1、A4、D1、A5からE1、A6からF1に移動し、次にA7からA2、A8からB2などに移動する必要があります。

この方法でデータを再編成するには、次のマクロを使用できます。

再編成するデータを選択して、マクロを実行します。再編成されたデータに必要な列数を尋ねられたら、データシフトが始まります。

Sub CompressData()

Dim rSource As Range     Dim rTarget As Range     Dim iWriteRow As Integer     Dim iWriteCol As Integer     Dim iColCount As Integer     Dim iTargetCols As Integer     Dim J As Integer

iTargetCols = Val(InputBox("How many columns?"))

If iTargetCols > 1 Then         Set rSource = ActiveSheet.Range(ActiveWindow.Selection.Address)

If rSource.Columns.Count > 1 Then Exit Sub

iWriteRow = rSource.Row + (rSource.Cells.Count / iTargetCols)

iWriteCol = rSource.Column + iTargetCols - 1         Set rTarget = Range(Cells(rSource.Row, rSource.Column), _           Cells(iWriteRow, iWriteCol))



For J = 1 To rSource.Cells.Count             rTarget.Cells(J) = rSource.Cells(J)

If J > (rSource.Cells.Count / iTargetCols) Then _               rSource.Cells(J).Clear         Next J     End If End Sub

マクロは、マクロの実行時に選択したソース範囲と、必要な列数に基づいて計算されたサイズによって定義されたターゲット範囲の2つの範囲を定義することによって情報を転送します。ソース範囲はrSource変数オブジェクトで表され、ターゲット範囲はrTargetで表されます。 For …​ Nextループは、実際に値を転送するために使用されます。

注:

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

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

このヒント(2301)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。