gpt4 book ai didi

将大量数据从多个范围移动到列的 Excel VBA 代码

转载 作者:行者123 更新时间:2023-12-02 02:40:05 25 4
gpt4 key购买 nike

我正在研究鸟类迁徙模式,但我无法找出在 Excel 中四处移动数据的最佳和最简单方法。我擅长excel,但我不擅长宏和VBA编码,所以如果我的编码想法看起来完全错误,我提前道歉,并且寻求专家建议没有错。到目前为止,我已经使用数据透视表根据物种数量、位置和日期缩小了鸟类的范围。

pivot table

之后,我将数据从每个物种的日期中移出,并将它们从一个范围堆叠到一个列中。

single column

我确实找到了一个有效的 vba 代码(即使输出实际上是从左向右横向移动数据,它仍然是同一件事“移动 B4:P4、B5:P5、B6:P6 等。 "), 但这一次只是一个范围:

Sub main()
Dim i As Long
Dim cell As Range

For Each cell In Range("B4:P13")
Range("S4").Offset(i).Value = cell.Value
i = i + 1
Next cell
End Sub

我的问题是有 56 个物种和 3 个位置。所以我需要移动数据 168 次,这太荒谬了。在我排列它们之后,我在三个位置中的每个位置对每个物种运行了 56 次单因素分析。如果有人可以提供帮助,那将是非常棒的,并且对科学非常有帮助。

我的想法/希望和梦想:

如果我可以在同一个 VBA 代码模块中重复代码并更改每个物种的范围值和输出位置。所有 3 个位置都具有相同的一般格式和范围位置(加上减去两个额外的日期),或者如果我可以将位置设置到另一张纸。像这样……

Sub main()
Dim i As Long
Dim cell As Range

For Each cell In Range("B4:P13")
Range("S4").Offset(i).Value = cell.Value
i = i + 1
For Each cell In Range("B15:P24")
Range("U4").Offset(i).Value = cell.Value
i = i + 1
For Each cell In Range("B26:P35")
Range("W4").Offset(i).Value = cell.Value
i = i + 1
For Each cell In Range("B37:P46")
Range("Y4").Offset(i).Value = cell.Value
i = i + 1
etc…
Next cell
End Sub

看起来像这样:

single column

或者更可取的是:

more preferably

再次感谢您的帮助和贡献。 :D

最佳答案

乍一看似乎更复杂。我做了一些假设,如果这些假设不成立,可能需要进行一些调整:

  • 起始工作簿每个位置只有一张工作表,即工作表数等于位置数
  • 数据从每张纸的 B4 开始(物种名称在 A3、A14 等)
  • 每个位置表都有相同数量的物种

请为您的实际代码使用更有意义的过程和变量名称。

Sub x()

Dim nSpec As Long, nLoc As Long, i As Long, vSpec(), j As Long, k As Long, wsOut As Worksheet, r As Range

nLoc = Worksheets.Count 'number of locations
Set r = Worksheets(1).Range("A3")
Do Until IsEmpty(r)
i = i + 1
ReDim Preserve vSpec(1 To i)
vSpec(i) = r.Value
Set r = r.Offset(11)
Loop
nSpec = UBound(vSpec) 'number of species

Set wsOut = Worksheets.Add(after:=Worksheets(Worksheets.Count)) 'add results sheet
wsOut.Name = "Results"

For i = 1 To nLoc 'headings for results sheet
With Worksheets(i) 'for each location
For j = 1 To nSpec 'for each species
wsOut.Cells(1, (j - 1) * (nLoc + 1) + 1).Value = vSpec(j) 'species heading
wsOut.Cells(2, (j - 1) * (nLoc + 1) + i).Value = .Name 'location heading
Set r = .Range("B4").Offset((j - 1) * 11).Resize(10) 'assumes B4 is top left cell of data
Do Until IsEmpty(r(1))
wsOut.Cells(Rows.Count, (j - 1) * (nLoc + 1) + i).End(xlUp)(2).Resize(10).Value = r.Value 'transfer data
k = k + 1 'move to next column
Set r = .Range("B4").Offset((j - 1) * 11, k).Resize(10)
Loop
k = 0
Next j
End With
Next i

End Sub

关于将大量数据从多个范围移动到列的 Excel VBA 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60176689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com