excel - 在不连续的范围内向下移动行
问题描述
我正在使用由多个区域组成的范围,例如,
Dim rng As Range
Set rng = Application.Union(Range("A1:C5"),Range("A11:C15"))
该范围将在顶部有一些非空行,在底部有一些空行,我希望能够将非空行向下移动 1 以允许第一行中的新条目。编辑:移位应该跨越区域中的“中断”,即第一个区域的最后一行应该向下移动到第二个区域的第一行。
如果我有一个连续的范围,那么我可以这样做:
Dim rng1 As Range
Set rng1 = Range("A1:C10")
Dim j as Integer
[Some code to set j equal to the index of the last non-empty row]
With rng1
.Parent.Range(.Cells(2,1), .Cells(j+1,3)).Value2 = .Parent.Range(.Cells(1,1), .Cells(j,3)).Value2
.Parent.Range(.Cells(1,1), .Cells(1,3)).ClearContents
End With
但是,当范围分为两个区域时,我很难弄清楚如何干净地做到这一点。我的一个想法是rowindex(1 To 10)
用rowindex(1)=1
,..., rowindex(5)=5
, rowindex(6)=11
,... 定义一个数组,rowindex(10)=15
然后rowindex(j)
用j
. 这不允许我像上面那样一步一步地向下移动所有内容,但我可以逐行进行:
Dim i as Integer
With rng
For i = j To 1 Step -1
.Parent.Range(.Cells(rowindex(i+1),1), .Cells(rowindex(i+1),3).Value2 = _
.Parent.Range(.Cells(rowindex(i),1), .Cells(rowindex(i),3)).Value2
Next i
.Parent.Range(.Cells(rowindex(1),1), .Cells(rowindex(1),1)).ClearContents
End With
我的问题是:
- 有没有办法一步完成转变(即移除
For i =
循环)? - 有没有比我的
rowindex
数组“更好”的解决方案(即运行速度更快、代码更少、可读性更强等)?我的解决方案的一个缺点是我对 的值进行硬编码,rowindex
而不是从rng
. 我认为这可以通过执行以下操作来解决:
Dim k As Integer
k = 1
For Each row In rng.Rows
rowindex(k) = row.Cells.Row
k = k + 1
Next
解决方案
您可以使用对象的Areas
属性,该属性Range
列出了 a 的每个组件Range
。
此代码提供了一个示例多范围。
Dim myRange As Range
Cells.Clear
Range("a1:c3") = 1
Range("e5:f6") = 2
Set myRange = Union(Range("a1:c3"), Range("e5:f6"))
myRange = 5
Areas
之后,我们使用集合一次一个地遍历每个区域,并使用您的代码单独移动每个区域Area
。
For Each a In myRange.Areas
With a
j = a.Rows(1).Row + a.Rows.Count - 1
.Parent.Range(.Cells(2, 1), .Cells(j + 1, 3)).Value2 = .Parent.Range(.Cells(1, 1), .Cells(j, 3)).Value2
.Parent.Range(.Cells(1, 1), .Cells(1, 3)).ClearContents
End With
Next a
该j
变量存储子范围中的最后一行索引(第一行索引 + 行数 - 1)。
推荐阅读
- glsl - 来自深度图的 SSAO 采样导致像素闪烁问题
- github - Hot to make copilot 使用单引号
- git - 我做了 git stash drop 并且我失去了未分级的更改
- react-native - 使用 FlatList 或 UI 的加载状态 React Native 2D 网格滚动
- json - Api 调用:调用列表的键和值,然后在另一个 API 调用中循环获取值
- javascript - 默认打开手风琴
- monaco-editor - 加载外部打字稿库定义
- typescript - 下拉列表角 11 的预输入功能
- unit-testing - 使用 client-go 假客户端模拟错误
- corda - 跟踪 Corda 中的状态变化