Vba 复制和粘贴特定的单元格值
当我运行程序时,什么也没发生。我认为这是因为我没有使用正确的变量类型,或者我没有正确地进行变量和值赋值 这就是我希望代码执行的操作: 对于从第80行第6列到第90行第6列的每个单元格,我希望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
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
。
然后程序将在cellJ97
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