excel中的Visual Basic代码

时间:2016-04-03 12:16:27

标签: excel vba excel-vba

这是我的表:

我想从原始表中搜索数据,然后根据选定的m1,m2,m3,issue,wastage,extra,repack字段中的日期和品牌提供数据。 这里的问题是我的桌子没有根据我的需要进行更新。 这里我的代码没有更新品牌的数据' b'所选日期。

这是我的代码:

System.out.print

1 个答案:

答案 0 :(得分:0)

我会选择以下

Option Explicit
Sub FindMatches()

Dim rawRng As Range, newTableDateRng As Range, newTableBrandRng As Range, cell As Range, foundDate As Range, foundBrand As Range

Set rawRng = Worksheets("shet").Range("L3:T100")
Set newTableDateRng = Worksheets("shet").Range("C2:I2")
Set newTableBrandRng = Worksheets("shet").Range("A4:A100")

With rawRng    

    For Each cell In .Columns(1).SpecialCells(xlCellTypeConstants)
        Set foundDate = newTableDateRng.Find(What:=cell, LookIn:=xlValues, LookAt:=xlWhole)
        If Not foundDate Is Nothing Then
            Set foundBrand = FindValue(newTableBrandRng, cell.Offset(, 1))
            If Not foundBrand Is Nothing Then
                cell.Offset(, 2).Resize(, 7).Copy
                Intersect(foundDate.EntireColumn, foundBrand.EntireRow).PasteSpecial xlPasteValues, xlPasteSpecialOperationNone, , True
            End If
        End If
    Next cell

End With

End Sub


Function FindValue(rng As Range, value As String) As Range

On Error Resume Next
Set FindValue = rng.Cells(Application.WorksheetFunction.Match(value, rng, 0))
On Error GoTo 0

End Function

请注意,根据您的屏幕截图示例,所有初始设置都特定于数据“结构”。如果您需要更改它,您必须遵循相同的“模式”(即rawRng从标题下的第一个“原始表”数据行开始,依此类推)。另请注意,7语句中使用的cell.Offset(, 2).Resize(, 7).Copy号来自您发布的数据结构,您需要将值从“m1”复制到“wastage”字段,然后您必须确保“新表”中的每个“品牌”行组必须匹配此模式(即有7行)