0

レコードを含む大きな Excel スプレッドシートがあります。各レコードは 12 行です。それらを列に移動する必要があります。12 行ごとに、一致する同じ列にコピーする必要があります。各行は独自の列になります。ワークブックを開いてタスクを実行し、新しい配置でワークブックを保存するスクリプトが必要です。

スプレッドシートは非常に大きいため、スクリプトがシート全体をループする必要があります。スクリプトの最後で、最初の 12 行を 12 列にまたがる 1 つのレコードにします。これは私がこれまでに持っているものです:

Dim xlApp
Dim xlSheet1
Dim xlBook1

Set xlApp = CreateObject("Excel.Application")
xlApp.Workbooks.Open "C:\users\am2878\desktop\Exchange Audit Log.xls"

Set xlBook1 = xlApp.Workbooks("Exchange Audit Log.xls")
Set xlSheet1 + xlBook1.Worksheet("Exchange Audit Log")

xlApp.Application.Visible = True

xlSheet1.Range("A1:A12").Cut

xlSheet1.Range("A1:L1").Paste

Loop

xlBook1.SaveAs "C:\users\am2878\desktop\Exchange Audit Log.xls", xlNormal, "","",False,False
xlApp.Quit
4

1 に答える 1

1

あなたが探している操作は"transpose"と呼ばれます。Excel では、PasteSpecialメソッドのパラメーターとして実装されます。ただし、切り取ったばかりのセルに貼り付けることはできないため、別の場所に貼り付ける必要があります。

Const xlAll  = -4104
Const xlNone = -4142

...

xlSheet1.Range("A1:A12").Cut
xlBook1.Sheets(2).PasteSpecial xlAll, xlNone, , True

元のシートを変更する必要がある場合は、転置されたデータを元のシートに戻すことができます。

xlBook1.Sheets(2).Range("A1:L1").Cut
xlSheet1.Activate
xlApp.ActiveSheet.Range("A1").Select
xlApp.ActiveSheet.Paste
于 2013-08-06T21:56:17.673 に答える