我正在处理一个结合了问题的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
答案 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
如果有帮助,请告诉我!