2016-05-05 4 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 (вы в этом случае) убеждены, что они предоставили достаточную информацию и оригинальные усилия и использовали качество своих предыдущих усилий в качестве шаблона для нового вопроса. Прочитайте [ask] и [mcve] и улучшите этот вопрос. – Jeeped

ответ

0

Правда, этот ответ еще немного об этом: https://www.youtube.com/watch?v=2ZO1jauV31U

Но я чувствовал, честное усилие было дано, несмотря на подобное , оригинальный сообщение.

подход:

Похоже, что вы пытаетесь сделать некоторые строки синтаксический, возвращая положение пространств в строке, а затем с помощью Left вернуть левую половину Mid вернуть середину, и Right чтобы вернуть правую часть. Вместо этого, я мог бы попробовать итерация свой список возможных записей, если я найду их, заменить их vbNullString и печатать то, что я нашел в колонке B

Instr ([Start], [String1], [String2], [ Сравнить]:

Instr функция возвращает позицию String2 найденную в String1 или ноль, если строка не найдена Start позиция в строке, чтобы начать с (обычно 1 для начала) Compare есть.. единственный истинный необязательный параметр, указывающий, как сравнивать строки.

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

Заменить

Replace(Expression, Find, Replace) функция возвращает Expression строку с экземплярами Find строки заменяется на 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

Смежные вопросы