2016-11-24 6 views
0

Excelで行う作業がかなり複雑です。私は値の範囲(転置)を別のシートにコピーしたいと思います。値の範囲は1〜99で、常に昇順です。Excelループ内のさまざまな値の範囲を別のシートにコピー/貼り付け(転置)する

このタスクには、必要な情報をこのシートに取り込み、すべての値が入力されるまでループで繰り返すVBAがあります。 これでシートを閉じる約1万行におよぶ。 25000行とca. 100列。私がしたいことのスクリーンショットをご覧ください。

最初の画像はデータテーブル(シート1)です。私は列Cの値の範囲をシート2の適切な場所にコピーしたいと思います。名前が変わるたびに(値が再び下端から始まります)、新しい行がシート2で開始されます。

多分私はこの名前がどれくらいの数のサンプルが表示されているか知っているので(1-99)、その範囲はどれくらいの長さか分かりますC2:C6(この名前は5つのサンプルのため)、C7:11(やはり5つのサンプル)など

多分あなたは私を助けることができますか?私はそれだけではできませんでした。

画像1:

enter image description here

画像2:

enter image description here

+0

私たちを表示するにはコードがありますか? – user1

+0

私のマクロ記録はこのように見えますが、範囲(1-99)やループは異なります。 サブ転送クローン シート( "Tabelle1")選択 範囲( "E2:E100") .Select Selection.Copy シート( "Tabelle2") Selection.PasteSpecial貼り付け]を選択します。= xlAll、操作:= xlNone、SkipBlanks:= Falseの_ 、トランスポーズ:= Trueの レンジ( "D4") を選択シート( "Tabelle1") 範囲選択します。( "E101:E199")を選択し Application.CutCopyMode = Falseの Selection.Copy シート( "Tabelle2")を選択し Selection.PasteSpecialペンシルバニア。 ste:= xlAll、操作:= xlNone、 End Sub – Nicholas

答えて

1

これは一度(私と、私はに値を連結するために、必要に応じて、私はほぼ正確に同じ問題を抱えていました個々のセルとは対照的に単一の文字列!)

これほど簡単ではありません。それは私が考えるべきである。私の解決策は以下の通りです:)

Sub TransP() 

Dim LastRow As Integer 
Dim LastCol As Integer 

LastRow = Worksheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Row 
LastCol = Worksheets("Sheet1").Cells(1, Columns.Count).End(xlToLeft).Column 

'Clear cells from sheet2 

Worksheets("Sheet2").Select 

Cells.Select 
Selection.ClearContents 

'Copy full range from sheet 1 

Worksheets("Sheet1").Select 

Worksheets("Sheet1").Range(Cells(1, 1), Cells(LastRow, LastCol)).Select 
Selection.Copy 

'Paste into sheet 2 

Worksheets("Sheet2").Select 
ActiveSheet.Paste 

LastRow = Worksheets("Sheet2").Cells(Rows.Count, 2).End(xlUp).Row 

'Iteration to transpose and collate data together 

For i = 2 To LastRow 

    If Cells(i, 2).Value = Cells(i + 1, 2).Value Then 

     LastCol = Worksheets("Sheet2").Cells(i, Columns.Count).End(xlToLeft).Column 

     Cells(i, LastCol + 1).Value = Cells(i + 1, 3).Value 

     Rows(i + 1 & ":" & i + 1).Select 

     Selection.Delete Shift:=xlUp 

     i = i - 1 

    End If 

'Exit sub when it reaches the end (blank cell) 

    If Cells(i, 2).Value = "" Or Cells(i + 1, 2).Value = "" Then 

     Exit Sub 

    End If 

Next 

End Sub 
+0

ありがとう、これはうまくいきます。 <25000行までしか動作しませんが、私は1000000シートを順番に取得するために「単純に」20回繰り返すことができます。 :) – Nicholas

+0

いいえ、私はちょうどあなたの1000000行まで動作しませんごめんなさい!私はそのループの行の大きなサンプルのため、実行時エラーが発生すると仮定します。 ここで問題を回避する方法についての興味深い投稿があります: http://stackoverflow.com/questions/8178161/what-is-the-most-efficient-quickest-way-to-loop-through-rows -in-vba-excel/8178335#8178335 –

関連する問題