2016-11-24 37 views
0

我有一個(對我來說)在Excel中做一個相當複雜的任務。我想將一系列值(轉置)複製到另一個表中。值範圍從1到99並且總是按升序排列。Excel VBA代碼複製/粘貼(轉置)循環中不同範圍的值到不同的表

該任務將是一個VBA,它允許我用我需要的信息填充此工作表,並在循環中重複它,直到填充所有值爲止。 使用此工具我想將工作表轉換爲close到一百萬行與一個約。 25000行和約。 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)或循環: Sub transferclone() 表(「Tabelle1」)。選擇 範圍(「E2:E100」) 。選擇 Selection.Copy 表( 「Tabelle2」)選擇 Selection.PasteSpecial貼:= xlAll,操作:= xlNone,SkipBlanks:=假_ ,移調:=真 範圍( 「D4」)選擇 。表格(「Tabelle1」)。選擇 範圍(「E101:E199」)。選擇 Application.CutCopyMode = False Selection.Copy 表(「Tabelle2」)。選擇 Selection.PasteSpecial Pa ste:= xlAll,操作:= xlNone, End Sub – Nicholas

回答

1

我幾乎完全一樣的問題,因爲這一次(與礦,我需要來連接的值成單個文本字符串,而不是單個單元格!)

它不像Excel中那麼容易這應該是我想的。我的解決方案如下:)

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行,但我可以「簡單地」重複20遍以獲得我的1000000張訂單,這是一個很小的代價。 :) – Nicholas

+0

沒有概率,我只是對不起,它不適用於你的1000000行!由於循環中的大量行,我假定它的運行時錯誤。 有一篇關於如何潛在地避免此問題的有趣帖子: http://stackoverflow.com/questions/8178161/what-is-the-most-efficient-quickest-way-to-loop-through-rows -in-VBA-Excel中/ 8178335#8178335 – 2016-11-25 12:32:06

相關問題