有没有办法根据第三列中的数据将数据从一列复制到另一列

问题描述 投票:0回答:1

我需要查看一个工作表,该工作表的 X 列中的任何值的行数都是可变的。如果 X 列中有一个值,Y 列中应该有一个值。如果 Y 列为空,我需要将 N 列中同一行的值复制到 Y 列中的空白处。然后我需要从 Z 列中的日期减去 Y 列中的日期以获得以月数为单位的术语。我一直在努力解决这个问题的语法,甚至无法接近。非常感谢您的帮助。

Sub Test()


Dim i As Integer
 
NumRows = Range("N2", Range("N2").End(xlDown)).Rows.Count
 
Range("X2").Select
 
For i = 1 To NumRows
 
    If Cells(1 + X, 1) <> "" Then

        Cells(1 + n, 1).Select

                Selection.Copy
 
Range("Y").PasteSpecial Paste:=xlPasteValues
   
    ActiveCell.Offset(1, 0).Select
    
    Next

End If
End Sub

** 我希望将 N 列中的值复制到 Y 列,其中 X 列中有一个值

excel vba if-statement copy-paste
1个回答
1
投票
If Cells(1 + X, 1) <> "" Then

您正在引用一个名为

X
的变量,而不是工作簿中的列。由于您尚未设置
X
,该值只是
0
,因此这本质上是在说
Cells(1, 1)
,即工作表中的
A1

此外,当您使用

For i = 1 To NumRows
创建循环时,您会为循环的每次迭代分配变量
i
来保存
1
NumRows
之间的数字,但您没有在中使用变量
i
你的代码。

此外,你在

If
循环内启动了一个
For
块,这是 100% 的光明正大;但是,您在
If
循环之外结束了
For
块。这没有道理。
For
循环内部的代码一遍又一遍地运行,因此
End If
必须位于导致
Next
循环的
For
行的“内部”(物理上位于上方)。正确缩进代码将有助于在编写代码时揭示这些问题。

最后(虽然这可能不会导致问题,但这是一种代码味道),您正在使用

.Select
物理选择正在运行代码的单元格。人类的
.Select
,但你的代码不需要。如果您有兴趣阅读更多相关内容,请查看 this stackoverflow Q&A

考虑一下:

Sub Test()

    Dim i As Integer
    
    NumRows = Range("N2", Range("N2").End(xlDown)).Rows.Count      

    For i = 1 To NumRows  
        'Using `Range()` object instead of `Cells` so we can refer to the column letter directly      
        If Range("Y" & i) <> "" Then
            #copy the cell from column `N` for this `i` row to column `Y`
            Range("N" & i).Copy        
            Range("Y" & i).PasteSpecial Paste:=xlPasteValues        
        End If
    Next
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.