2015-10-12 68 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

太棒了,尤其是你不需要使用選擇並通過剪貼板複製粘貼:)。儘管努力縮進你的代碼,它會給你更多的控制你自己的代碼:)。 –

相關問題