使用VBA的方式在EXCEL中的sheet1和sheet2表格内容一样,将sheet2单元格的数值移动到sheet1相应的单元格中

sheet1和sheet2 A列是名称;B1、C1、D1、E1、F1、G1.......是日期依此类推,B2、C2、D2、E2、F2、G2.........是数值依此类推。如何将sheet2单元格中有数值的单元格移动到sheet1相应的单元格内?谢谢!如

Sub Test()
    Dim sht1 As Worksheet, sht2 As Worksheet
    Dim myCell As Range, rng As Range
    Set sht1 = Worksheets(1)
    Set sht2 = Worksheets(2)
    With sht2.Cells(1, 1).CurrentRegion
        Set rng = sht2.Cells(2, 2).Resize(.Rows.Count - 1, .Columns.Count - 1)
    End With
    For Each myCell In rng.SpecialCells(xlCellTypeConstants)
        With myCell
            sht1.Cells(.Row, .Column) = .Value
        End With
    Next myCell
End Sub

详见附件。

追问

您好!刚刚运行了一下下是能实现了,但是当SHEET2表中的A列名称顺序没有按照SHEET1的顺序排列的时候,SHEET2单元格的数值不能安照A列名称对号入座哦!谢谢!

追答

等下哦,是可以解决的。

Sub Test()
    Dim sht1 As Worksheet, sht2 As Worksheet
    Dim myCell As Range, rng As Range
    Dim i As Integer, m As Integer
    Dim j As Integer, n As Integer
    Dim k As Integer
    
    Set sht1 = Worksheets(1)
    Set sht2 = Worksheets(2)
    With sht1
        m = .Cells(1, 1).CurrentRegion.Rows.Count
        Set rng = .Range("A1:A" & m)
    End With
    With sht2.Cells(1, 1).CurrentRegion
        m = .Rows.Count
        n = .Columns.Count
    End With
    
    For i = 2 To m
        On Error Resume Next
        k = WorksheetFunction.Match(sht2.Cells(i, 1), rng, 0)
        If Err.Number = 0 Then
            On Error GoTo 0
            For j = 2 To n
                Set myCell = sht2.Cells(i, j)
                If myCell <> "" Then
                    sht1.Cells(k, j) = myCell
                End If
            Next j
        Else
            Err.Clear
            On Error GoTo 0
        End If
    Next i
End Sub


追问

您好!是可以实现了,可否除了一定要按照A列名称为参照外,还要以日期行为参照进行引用数值的呢?谢谢您,麻烦您了!

追答

考虑日期排序不同,再按日期查找,见附件。

追问

您的帮忙实在太完美了,但是还有一个小小的问题需要您帮忙,如果SHEET2中的B、C、D、E、F列不是日期而是其它内容,从G列开始后面才是日期的话,而且SHEET1也只引用SHEET2单元格日期下的数值的话,那样的话,又应该要怎么实现呢?谢谢您!麻烦您了!

追答

只需将for j=2 to n 修改为 for j=7  to n即可,见附件。


温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-15
确实不明白你的问题追问

我怎么样才能上传EXCEL文档呢?

追答

上传到百度网盘就可以了,要不发我邮箱258347442

第2个回答  2015-05-15
你得上传附件,看看情况 这样描述很模糊的追问

名称
4月1日
4月2日
4月3日
4月4日
4月5日

A

1000
1000
1000
10

B
100
100
1000

C

100

1000
10

D
100

1000

E
100
100
1000
1000
10

追答

Sub DDD()

Dim str As Variant

With ThisWorkbook

For i = 2 To 256

For j = 1 To 65536

.Worksheets("Sheet2").Activate

If .Worksheets("Sheet2").Cells(i, j) "" Then

str = .Worksheets("Sheet2").Cells(i, j).Value

End If

.Worksheets("Sheet1").Activate

.Worksheets("Sheet1").Cells(i, j) = str

str = ""

Next i
Next j

End With
END SUB

追问

您好!如果我要以名称A列为参照引用SHEET2的数值,应该如果编写代码?谢谢!

相似回答