通过使用少量列作为关键将两个excel表合并为一个

时间:2013-07-19 18:01:46

标签: excel-vba vba excel

我正在处理一个结合了问题的excel工作表,我在VBA上是一个完全无效的NOOB。

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

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

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

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

有人能告诉我如何用宏来做这件事吗?或者我应该采用其他方法?

提前致谢。

    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

1 个答案:

答案 0 :(得分: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

如果有帮助,请告诉我!