Excel VBA 代码 copy/paste(转置)循环中不同范围的值到不同的 sheet
Excel VBA code to copy/paste(transpose) a varying range of values in a loop into a different sheet
我在 excel 有一项(对我来说)相当复杂的任务要做。我想将一系列值(转置)复制到另一个 sheet。值范围从 1 到 99,并且始终按升序排列。
任务是有一个 VBA,它允许我用我需要的信息填充这个 sheet 并循环重复它直到所有值都被填充。
有了这个,我想将具有近一百万行的 sheet 转换为具有 ca 的行。 25000 行和 ca。 100 列。请看我想做的截图。
第一张图是数据table(sheet1)。我想将 C 列中的值范围复制到 sheet 中的适当位置 2. 每次更改名称(并且值再次从低端开始)时,都会在 [=37= 中开始一个新行] 2.
也许这有助于我始终知道范围有多长,因为我知道这个名称出现在多少个样本中 (1-99),所以我知道范围将是例如C2:C6(因为这个名字在 5 个样本中),然后 C7:11(又是 5 个样本)等等
也许你可以帮我解决这个问题?我一个人做不到。
图片 1:
图 2:
我遇到过与这一次几乎完全相同的问题(对于我的问题,我需要将值连接成单个文本字符串,而不是单个单元格!)
在 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
我在 excel 有一项(对我来说)相当复杂的任务要做。我想将一系列值(转置)复制到另一个 sheet。值范围从 1 到 99,并且始终按升序排列。
任务是有一个 VBA,它允许我用我需要的信息填充这个 sheet 并循环重复它直到所有值都被填充。 有了这个,我想将具有近一百万行的 sheet 转换为具有 ca 的行。 25000 行和 ca。 100 列。请看我想做的截图。
第一张图是数据table(sheet1)。我想将 C 列中的值范围复制到 sheet 中的适当位置 2. 每次更改名称(并且值再次从低端开始)时,都会在 [=37= 中开始一个新行] 2.
也许这有助于我始终知道范围有多长,因为我知道这个名称出现在多少个样本中 (1-99),所以我知道范围将是例如C2:C6(因为这个名字在 5 个样本中),然后 C7:11(又是 5 个样本)等等
也许你可以帮我解决这个问题?我一个人做不到。
图片 1:
图 2:
我遇到过与这一次几乎完全相同的问题(对于我的问题,我需要将值连接成单个文本字符串,而不是单个单元格!)
在 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