【发布时间】:2016-11-10 03:15:06
【问题描述】:
尊敬的 StackOverflow 社区,
我通过 Excel 进行财务管理只是为了跟踪我的财务状况。我正在使用来自我的银行网站的原始数据,并有一个宏来对数据进行更少的排序,并准备好进行复制粘贴。但是我创建的宏并没有真正让我满意,我正在考虑如何在 Visual Basic for Application 中执行以下操作:
我想:
-
从工作表中选择每第三个单元格(在我的情况下为 B3)(完成)
Dim rRange As Range Dim rEveryNth As Range Dim lRow As Long With Tabelle5 Set rRange = .Range("B3", .Cells(.Rows.Count, "B").End(xlUp)) End With For lRow = 1 To rRange.Rows.Count Step 3 If lRow = 1 Then Set rEveryNth = rRange(lRow, 1) Else Set rEveryNth = Union(rRange(lRow, 1), rEveryNth) End If Next lRow Application.Goto rEveryNth -
在这些单元格之后放置一个空格(就像在每个单元格之后按空格键一样)(完成)
Dim c As Range For Each c In Selection If c.Value <> "" Then c.Value = c.Value & " " Next -
从同一张表中选择每个第三个单元格,但从另一个偏移量 (B4)(完成)
With Tabelle5 Set rRange = .Range("B4", .Cells(.Rows.Count, "B").End(xlUp)) End With For lRow = 1 To rRange.Rows.Count Step 3 If lRow = 1 Then Set rEveryNth = rRange(lRow, 1) Else Set rEveryNth = Union(rRange(lRow, 1), rEveryNth) End If Next lRow Application.Goto rEveryNth 复制这些单元格的文本,然后将它们粘贴到从 B3 开始的每 3 个单元格中,而不从单元格中删除原始文本(此处需要帮助)
从 B4 开始每隔 3 行删除一次(也需要帮助)
从B2开始每隔2行删除一次(同上
准备好复制(只是通常的复制命令,也完成了)
因此,正如您所见,我需要一个技巧来以某种方式复制单个单元格并将它们粘贴到其上方的单元格中而不覆盖它(因此 B4 中的文本被复制并粘贴到 B3 中,从 B7 到 B6 等也是如此)
我尝试使用以下命令:
With Tabelle5
Set rRange = .Range("B3", .Cells(.Rows.Count, "B").End(xlUp))
End With
For lRow = 1 To rRange.Rows.Count Step 3
If lRow = 1 Then
Set rEveryNth = rRange(lRow, 1)
Else
Set rEveryNth = Union(rRange(lRow, 1), rEveryNth)
End If
Next lRow
Application.Goto rEveryNth
For Each c In Selection
If c.Value <> "" Then c.Value = c.Value & rEveryNth
Next
唯一的问题是它只粘贴我拥有的最后一个单元格中的文本并将文本粘贴到所有其他单元格中,这不是我想要的。
是否有任何重复命令可以选择一个单元格,复制文本,将其粘贴到上面的单元格而不覆盖它?如果是,我该怎么做? (我必须总共做 20 次才能正确复制和粘贴文本)
对于第二部分:关于选择每个第 2/3 行而不是每列中的每个第 2/3 个单元格有什么帮助吗?
到目前为止,我所经历的(感谢您的建议)如下:
Dim rRange As Range
Dim rEveryNth As Range
Dim lRow As Long
With Tabelle5
Set rRange = .Range("B4", .Cells(.Rows.Count, "B").End(xlUp))
End With
For lRow = 1 To rRange.Rows.Count Step 3
If lRow = 1 Then
Set rEveryNth = rRange(lRow, 1)
Else
Set rEveryNth = Union(rRange(lRow, 1), rEveryNth)
End If
Next lRow
Application.Goto rEveryNth
Range(rEveryNth.Address).Offset(-1, 0).Value = rEveryNth.Value
End Sub
但它仍然会复制最后一个单元格并将其粘贴到其他每个单元格中...
【问题讨论】:
-
“将其粘贴到上面的单元格而不覆盖它”应该发生什么而不是覆盖现有内容?不清楚你想在这里发生什么。
-
我的目标是复制选定的单元格(从 B4 开始的每个第 3 个单元格,其中包含通常直到 B61 的文本)并将这些选定单元格的内容粘贴到上面的单元格中(所以来自 B4 的文本粘贴到 B3 中,从 B7 到 B6 等)而不覆盖它们
-
如果您将一个单元格复制并粘贴到另一个单元格中,那么目标单元格的内容将被覆盖 - 应该发生什么?我认为用您正在寻找的具体示例更新您的问题会很有帮助。
-
这就是我认为这样可以方便地将一些信息粘贴到单元格中而不覆盖它们
Dim c As Range For Each c In Selection If c.Value <> "" Then c.Value = c.Value & " " Next