2015-10-12 39 views
0

我在同一个单元格中有一个公司名称和城市名称的Excel数据库,我想从中将城市名称拆分为找到文本的相邻单元格。我将城市名称作为数组。将特定的字符串值剪切并复制到相邻单元格

数据库的样子:

FINER SURROUNDINGS埃尔卡洪
FIRST CHOICE水暖有限公司RAMONA
FRANK GILILLAND建设圣伊内斯

到目前为止我的代码(非常基本的):

Sub FindCityNames() 
Dim citylist(500) As String 
Dim i, j, k As Integer 
For j = 1 To 500 
citylist(j) = Workbooks("cities.xlsm").Worksheets("City list").Cells(j, 1) 
Next j 
For i = 1 To 500 
Cells.Find(What:=citylist(i), After:=ActiveCell, LookIn:=xlFormulas, _ 
     LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False).Activate 
    ActiveRange.Cut 
Next i 
End Sub 

哪个应该做的工作找到字符串和切割它,但我没有想法如何参考它被发现选择粘贴区域的行。

有什么想法?

+0

Range.Row方法看起来不够。你也可以使用Range.Offset。还有什么需要我没有看到? –

+0

这似乎工作,谢谢 - 但现在我的Cells.Find方法返回与运行时91(对象变量或块变量未设置)错误。你知道为什么会这样吗? –

+0

这可能意味着Find找不到任何东西。你的代码中有一些缺陷。让我明白一些事情:你想切割一行以便将它粘贴到下一行?但那么下一行的旧内容会发生什么? –

回答

1

最后,我设法通过使用字符串来解决问题: 谢谢A.S.H.为您的协助!

Sub FindCityNames() 
Dim citylist(20000) As String 
Dim i, j, k, l As Integer 
Dim city, company As String 
For j = 1 To 20000 
citylist(j) = Workbooks("adatformazas2.xlsm").Worksheets("City list").Cells(j, 1) 
Next j 

For j = 1 To 20000 
city = UCase(citylist(j)) 
l = Len(city) 
If l > 0 Then 
With ActiveSheet 
'.Cells(1, 8) = city 
    For i = 1 To .UsedRange.Rows.Count 
    company = RTrim(.Cells(i, 1)) 
    R = Right(company, l) 
    If R = city Then 
    If .Cells(i, 2).Value = "" Then 
    .Cells(i, 1) = RTrim(Left(company, Len(company) - l)) 
    .Cells(i, 2) = city 
    End If 
    End If 
    Next i 
End With 
End If 
Next j 
End Sub 
+0

太棒了,尤其是你不需要使用选择并通过剪贴板复制粘贴:)。尽管努力缩进你的代码,它会给你更多的控制你自己的代码:)。 –

相关问题