Vba 复制和粘贴特定的单元格值

Vba 复制和粘贴特定的单元格值,vba,excel,Vba,Excel,当我运行程序时,什么也没发生。我认为这是因为我没有使用正确的变量类型,或者我没有正确地进行变量和值赋值 这就是我希望代码执行的操作: 对于从第80行第6列到第90行第6列的每个单元格,我希望j为该单元格中指定的整数。对于从10到100的每一列,如果单元格(i,2)中的日期与单元格(1,k)中的日期相同,那么我想将单元格(j,k)设置为单元格(j,6)中的整数 请帮我更正这个代码 Sub TestSub() Dim i As Integer, i2 As Integer, i3 As I

当我运行程序时,什么也没发生。我认为这是因为我没有使用正确的变量类型,或者我没有正确地进行变量和值赋值

这就是我希望代码执行的操作:

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

请帮我更正这个代码

    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

这就是您的代码所做的:

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

程序正在验证范围
B80:B90
中的日期与范围
J1:CV1
中的日期,对于发现相等的日期,正在更新由范围
F80:F90
中的相应值确定的行中的相应单元格

让我们看看下面的示例案例,其中单元格
B80
中的日期等于单元格
J1
中的日期,单元格
F80
中的值为
97
。 然后程序将在cell
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
中的值确定了不同的输出范围(即范围
F80:F90
中的值低于80或高于90

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

因此,如果目标是:

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

然后换线

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
的值是
单元格(i,6)
中的值,由以下行确定:
j=单元(i,6)


基本上,如果单元格
B80
中的日期在范围
J1:CV1
中,则输入
73
,单元格
F80
单元格(i,6)
中的值,然后输入单元格
F73
单元格(j,6)

问题在于,由于使用了单字母变量名,并且代码中出现了不易识别的错误,您感到困惑。要更正错误,请更改此行:

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)

请注意,唯一的区别是,它需要设置为
单元格(i,6),而不是设置为
单元格(j,6)
。这是新程序员的一个常见错误,也是使用描述性变量名是一种良好做法的确切原因。它可以防止类似这样的简单错误。

必须发布第二个答案,因为询问者完全更改了代码:

这些线路永远行不通

k=8至k=115的

对于k2=8到k2=115的情况,

k3=8至k3=115的

更改为正确的格式

k=8到115时的

k2=8至115的

k3=8至115的


然后试试看

好的,我改变了它,但它并没有解决我的问题,那么我提到的其他可能的问题呢?
单元格(1,k)
是有意的吗?你在叙述中指的是
单元格(I,k)
。是的,我只是指单元格(I,k)在我讲述我对单元格的理解时,您的描述与您的代码不符。您似乎混淆了i和j索引。您为一个单元格分配了一个值,该单元格的地址由
单元格的内容决定(i,6)
-???我重新编辑了描述,以进一步澄清我希望代码做什么,有人知道我运行此代码时为什么什么都没有发生吗?这不是问题,这是我非常困惑的所有意图“然后,该值用于引用行号,并将该行号放在包含相同日期的列中。”和“对于发现相等的行,则更新由F80:F90范围内的相应值确定的行中的相应单元格。”。“我想让程序做的是:如果日期相等,那么它将取同一行和第6(F)列中的值,并将该值插入单元格(j,6)我确信问题不在于在比较的范围内没有相同的日期。我只是告诉你你的程序正在做什么,现在你终于提到了你希望程序做什么,那么我将更新我的答案,告诉你如何做到这一点。嘿,嗯,我真的很感谢你试图帮助我!我也很抱歉我打错了d我希望我的程序在上面的注释中做什么。我希望程序这样做:如果日期相等,那么它将取单元格(j,6)中的值并设置单元格(j,k)等于该值。我确信逻辑是正确的。我编辑了我的问题,以包括我的整个子例程,希望这能澄清一切。我仍然不知道宏在执行时为什么什么都不做……您现在已经更改了所有内容,随着现在发布的更改,您正在引入新的错误,如以下k=8到k=1的行
15
对于k2=8到k2=115
对于k3=8到k3=115
这些将永远不会起作用;正确的形式是:
对于k=8到115
对于k2=8到115
对于k3=8到115
,但你也改变了范围,在80到90和10到100之前,现在是81到95和8到115。请把你的问题改成原来的d