-1

我正在处理一个结合问题的 excel 工作表,我是 VBA 上的一个完全新手。

因此,要添加的工作表可能有不同数量的列(标题),但我要使用的关键是城市、街道名称和街道编号,即地址。

如果要添加的有新地址,则将整行添加到现有地址。

如果要添加的地址已存在,请检查该行是否存在不存在的列,如果是,则将该列添加到现有的。

两张纸的列数和行数可能不同,但它们都至少有地址列。

谁能告诉我如何用宏来做到这一点?还是我应该用其他方法挖掘?

提前致谢。

    Sub combine()
    Dim inName, inNum, inCity As String
    Dim IncNum As Integer
    Dim temp As Range
    Dim lrow As Long
    Dim counter As Integer


For Each cell In Sheets("Sheet2").UsedRange.Columns(1).Cells

If cell <> "" And cell.Row <> 1 Then
    inCity = cell.Value
    inName = Sheets("Sheet2").Cells(cell.Row, 2)
    inNum = Sheets("Sheet2").Cells(cell.Row, 3)

    Set temp = Sheets("Sheet1").Columns(1).Find(what:=inCity)

    If temp Is Nothing Then
    'find the last row of the existing sheet
        lrow = Sheets("Sheet1").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        IncNum = Sheets("Sheet2").UsedRange.Columns.Count
        For counter = 1 To IncNum
            Sheets("Sheet1").Cells(lrow + 1, counter).Value = Sheets("Sheet2").Cells(lrow + 1, counter).Value
        Next counter

    End If

End If
Next
End Sub
4

1 回答 1

0

您需要稍微澄清一下您的问题。您是否只想将三列(城市、街道名称、街道号码)添加到现有工作表中?

如果是这样,您需要做的是识别与输入表中的三个输入列相对应的列号。然后你编写一个循环遍历这些列中的所有单元格。在每个循环中,您将尝试在现有工作表中查找值。如果未找到,请附加到现有工作表的末尾。如果找到,请检查三列中的每一列是否有空白单元格并覆盖该值。

假设街道名称是在现有工作表中始终具有值的单元格。现有表(街道名称 = 第 1 列,街道编号 = 第 2 列,城市 = 第 3 列)输入表(街道名称 = 第 30 列,街道编号 = 第 31 列,城市 = 第 1 列)代码将类似于:

Sub update()
Dim inName, inNum, inCity As String
Dim x As Range
Dim temp As Range
Dim lrow As Long

'loop through each cell in column 30 containing street name
For Each cell In Sheets("INPUT").UsedRange.Columns(30).Cells
    'so you dont look for blanks and skips the header row
    If cell <> "" And cell.Row <> 1 Then
        inName = cell.Value
        inNum = Sheets("INPUT").Cells(cell.Row, 31).Value
        inCity = Sheets("INPUT").Cells(cell.Row, 1).Value

        Set temp = Sheets("EXISTING").Columns(1).Find(what:=cell.Value)
        If temp Is Nothing Then
            'means its not found
            'find the last row in the existing sheet
            lrow = Sheets("EXISTING").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
            With Sheets("Existing")
                .Cells(lrow + 1, 1) = inName
                .Cells(lrow + 1, 2) = inNum
                .Cells(lrow + 1, 3) = inCity
            End With
        Else
            'means its found
            'override existing values with new ones add if = "" for each one if you dont want to overwrite
            With Sheets("Existing")
                    .Cells(temp.Row, 1) = inName
                    .Cells(temp.Row, 2) = inNum
                    .Cells(temp.Row, 3) = inCity
            End With
        End If
    End If
Next
End Sub

让我知道这是否有帮助!

于 2013-07-19T18:36:58.773 回答