2016-05-05 65 views
0

我有两列,我正在比较两者的文本。列A包含文本'Hello 2005 A LW Allocate',列B包含文本'A LW'。我想分割列A中的文本,使C列应该有'Hello 2005 Allocate',D应该有'A LW'。 B列中的值可以是特定值列表{A,A LW,I,J}等,我希望将相同的文本与A列相匹配并对其进行分割。如果有人能帮忙,我会很感激。现在,我有一个看起来像这样的代码:根据Excel中的匹配数据拆分列VBA

`Sub Testing() 
    Dim DataRange As Range, CheckRange As Range, aCell As Range, bCell As Range 
    Dim rightStrng As String 
    Dim i As Long 
    Set ws = Worksheets("Sheet 1") 
    Set CheckRange = ws.Range("C2,C35000") - Column which has data 
    Set DataRange = ws.Range("F2,F34") - Column to which I am comparing data 
    With Worksheets("Sheet 1") 
    For Each aCell In CheckRange.Rows 
    Set bCell = DataRange.Find(What:=aCell, LookIn:=xlValues, _ 
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False) 
Set strng = Split(bCell) 
Set rightStrng = "" 
i = UBound(strng) 
rightStrng = Application.WorksheetFunction.Trim(rightStrng) 
Set bCell.Offset(, 2) = rightStrng 
Set bCell.Offset(, 1) = Left(aCell.Value, IIf(rightStrng <> "", InStrRev(bCell.Value, rightStrng) - 2, Len(bCell.Value))) 
Next aCell 
End Sub` 
+0

这是一个重复的问题[This](http://stackoverflow.com/questions/37038525/split-column-text-to-adjacent-columns-using-excel-vba) – OldUgly

+0

@OldUgly我试图根据数字拆分它在那个问题上。在这里,我试图根据比较来划分它 – ShilpiT

+3

你的两个问题都不符合可以被认为是质量问题的最低门槛。虽然第一个可能被你忽略的原因是你根本不知道从哪里开始,但你有两个有效的答案可以被改变来覆盖新的标准。这对于提供“交钥匙”对棘手问题的答案是一个问题; OP(你在这种情况下)被认为已经提供了足够的信息和原始的努力,并将他们以前的努力的质量作为一个新问题的模板。阅读[问]和[mcve]并改善这个问题。 – Jeeped

回答

0

诚然,这个答案依然是这一点: https://www.youtube.com/watch?v=2ZO1jauV31U

但我觉得一个诚实的努力给予,尽管类似,原帖。

方法:

它看起来像你正在尝试做一些字符串解析,返回字符串中的空格的位置,然后使用Left返回左半Mid回到中间,Right返回正确的部分。相反,我可能会尝试遍历您可能条目的列表,如果我找到他们,vbNullString取代他们,并打印我在B列

INSTR([开始],[字符串1]研究发现,[String2的],[对比]:

Instr函数将返回的String2String1或零发现的位置,如果没有找到该字符串Start是字符串中的位置,从(通常1开始)开始Compare是。唯一真正的可选参数,指定如何比较字符串。

Debug.Print Instr(1, "abcd", "b") '<-- prints 2 in your immediate window 

更换

Replace(Expression, Find, Replace)函数将返回字符串ExpressionFind串与串Replace更换的情况。

Debug.Print Replace("abcdefg", "abc", "ABC") '<-- Prints "ABCdefg" in the immediate window. 

您的应用程序

一些伪代码,你要考虑:在你的代码

Dim searchVals(3) as String 
searchVals(0) = " A " 
searchVals(1) = " A LW " 
searchVals(2) = " I " 
searchVals(3) = " J " '<-- surrounded with spaces so we don't find all Js 

'...some code you already wrote... 
For Each myCell in myColumn 
    For i = 0 to 3 
    'For each search value I expect to find... 
     'If this search value is in there... 
     If InStr(1, myCell.Value, searchVals(i)) <> 0 Then 
      'I found my string! Replace the searchVal with a null string (i.e. remove it) 
      myCell.Offset(,1) = Replace(myCell.Value, searchVals(i), vbNullString) 
      'Print the string I found two to the Right 
      myCell.Offset(,2) = searchVals(i) 
      Exit For '<-- Once I find one, I can stop searching 
     End If 
    Next i 
Next myCell 

错误

我怀疑你收到错误消息,一个本line:

Set strng = Split(bCell) 

Set关键字保留给VBA中的对象,并且Split返回一个字符串数组。因此,无论这些行:

Set strng = Split(bCell) 
Set rightStrng = "" 

应该是:

strng = Split(bCell) 
rightStrng = "" 

对于新手,这通常是一些记忆,但对Set关键字做什么更多的技术资料:What does the keyword Set actually do in VBA?

+0

这完美的作品。非常感谢。我调整了它以满足我的确切需求。我不知道为什么我被困在Split功能上。但是这太好了!再次感谢 – ShilpiT