复制并粘贴特定的单元格值

时间:2015-09-27 03:29:03

标签: excel vba excel-vba

当我运行程序时,没有任何反应。我认为这是因为我没有使用正确的变量类型,或者我没有正确地进行变量和值赋值。

这就是我想要的代码:

对于第80行,第6列第90行,第6列的每个单元格,我希望j是该单元格中指定的INTEGER。对于10到100之间的每一列,如果Cells(i,2)中的DATE与Cells(1,k)中的DATE相同,那么我想将Cells(j, k)设置为Cells(j, 6)中的INTEGER 。

请帮我更正此代码。

    Sub TestSub()

Dim i As Integer, i2 As Integer, i3 As Integer
Dim j As Integer, j2 As Integer, j3 As Integer
Dim k As Integer, k2 As Integer, k3 As Integer

For i = 81 To 95

    j = Cells(i, 6) 'j becomes the row # of the equipment

    For k = 8 To k = 115
        If Cells(i, 2) = Cells(1, k) Then Cells(j, k) = Cells(j, 6) 'Cells(i,2)->NEXT PM DATE Cells(1,k)->CALENDER DATE (MM/1/YY)
    Next k

Next i


For i2 = 97 To 105

    j2 = Cells(i2, 6)

    For k2 = 8 To k2 = 115
        If Cells(i2, 2) = Cells(1, k2) Then Cells(j2 + 1, k2) = Cells(j2 + 1, 6)
    Next k2

Next i2


For i3 = 107 To 121

j3 = Cells(i3, 6)

    For k3 = 8 To k3 = 115
         If Cells(i3, k3) = Cells(j3, 6) Then Cells(j3 + 2, k3) = Cells(j3 + 2, 6)
    Next k3

Next i3

End Sub

3 个答案:

答案 0 :(得分:0)

这是您的代码正在做的事情:

它将范围B80:B90 (第80到90行)中每个单元格的日期与范围J1:CV1 中的单元格日期进行比较(第10列到第100列) ) 如果比较的日期相等,则它取同一行和第6列中的值(F)。然后,此值用于引用行号,并将该行号放在包含相同日期的列中。

该程序正在验证范围B80:B90中的日期,其中日期范围为J1:CV1,对于那些找到相等的日期,正在更新由{{1}范围内的相应值确定的行中的相应单元格}}

让我们看一下以下示例案例,其中单元格F80:F90中的日期等于单元格B80中的日期,单元格J1中的值为F80。 然后程序将在单元格97

中输入单元格F97的值
J97

因此,如果程序看起来什么都没做,并且看不到任何结果,或者是因为比较范围中没有相同的日期,或者因为预期结果会显示在Dim i As Integer, j As Integer, k As Integer For i = 80 To 90 If i = 89 Then Stop j = Cells(i, 6) For k = 10 To 100 'as per the sample case 'i = 80 ; j = 97 and k = 10 'date in cell(B80) = date in cell(J1) 'If Cells(i, 2) = Cells(1, k) Then Cells(j, k) = Cells(j, 6) 'then J97 = F97 'Replaced with: If Cells(i, 2) = Cells(1, k) Then Cells(j, 6) = Cells(i, 6) Next k: Next 范围内,但是范围J80:CV90中的值确定不同的输出范围(即范围F80:F90中的值低于80或高于90.

我要求提供范围F80:F90中的值以验证上述内容。

所以如果目标是:

  

如果日期相等,则它取同一行和第6列(F)中的值并将该值插入单元格(j,6)

然后更换了行

F80:F90

带行

If Cells(i, 2) = Cells(1, k) Then Cells(j, k) = Cells(j, 6) 

If Cells(i, 2) = Cells(1, k) Then Cells(j, 6) = Cells(i, 6) 的值是j中由行确定的值: cell(i,6)

基本上,如果在范围j = Cells(i, 6)中找到了单元格B80中的日期,则将J1:CV1,单元格73F80中的值输入到单元格{{ 1}}或Cell(i,6)

答案 1 :(得分:0)

问题是你感到困惑,因为你使用了单字母变量名,并且在你的代码中犯了一个不易识别的错误。要更正错误,请更改以下行:

If Cells(i, 2) = Cells(1, k) Then Cells(j, k) = Cells(j, 6)

改为:

If Cells(i, 2) = Cells(1, k) Then Cells(j, k) = Cells(i, 6)

请注意,唯一的区别是,不是将其设置为Cells(j, 6),而是需要将其设置为Cells(i, 6)。对于新程序员来说,这是一个常见的错误,并且使用描述性变量名称是一个好习惯的确切原因。它可以防止这样的简单错误。

答案 2 :(得分:0)

当提问者完全改变代码时,必须发布第二个答案:

这些行永远不会起作用

For k = 8 To k = 115

For k2 = 8 To k2 = 115

For k3 = 8 To k3 = 115

更改为正确的格式

For k = 8 To 115

For k2 = 8 To 115

For k3 = 8 To 115

然后尝试