使用日期

时间:2018-02-02 10:48:05

标签: vba excel-vba excel

我是VBA Excel的新手。我试图制作一个并不困难的宏,但我是如此缺乏经验。

我的sheet1包含日期列(整月),每个日期都有不同的值。因此,列A充满了日期,列B充满了值(与日期有关)。 Sheet2 / A列也是按日期(整月)创建的。

我想创建一个宏,它复制sheet1 / b列中的值,并根据日期将其传递给sheet2 / b列。换句话说,宏应该找到某个日期(在sheet2 / A列中)并将特定值传递给sheet2 / b列。

2 个答案:

答案 0 :(得分:0)

试试这个,您可能需要更改一些值以匹配您的工作簿 就像for循环中的工作表名称和起始行一样。

Sub sheetValues()

    'collect information in sheet one into an array
    With Sheets("Sheet1")
        'check last filled in cell in column / last date
        Set last = .Range("A:A").Find("*", .Cells(1, 1), searchdirection:=xlPrevious)
        'new array with range information
        sheetOneInfo = .Range(.Cells(1, 1), .Cells(last.Row, 2)).Value
    End With

    With Sheets("Sheet2")
        'check last filled in cell in column / last date
        Set last = .Range("A:A").Find("*", .Cells(1, 1), searchdirection:=xlPrevious)

        'for each cell in range
        For n = 1 To last.Row
            'if value in sheet two is in array
            If InArray(.Cells(n, 1).Value, sheetOneInfo) > 0 Then
                'put collected value in appropriate cell
                .Cells(n, 2).Value = sheetOneInfo(InArray(.Cells(n, 1).Value, sheetOneInfo), 2)
            End If
        Next
    End With
End Sub

Function InArray(val As String, arr As Variant) As Double

    InArray = 0
    'for each value in array
    For n = 1 To UBound(arr)
        'if date in array matches cell date
        If arr(n, 1) = val Then
            'return date position
            InArray = n
            Exit Function
        End If
    Next
End Function

答案 1 :(得分:0)

您可以尝试以下代码。您可以根据您拥有的数据量更改数字100,或者如果更改了数据,您可以计算数据。

For i = 1 To 100
  For j = 1 To 100
    If Sheets(2).Cells(j, 1) = Sheets(1).Cells(i, 1) Then
      Sheets(2).Cells(j, 2) = Sheets(1).Cells(i, 2)
    End If
  Next j
Next i