2013-07-18 2 views
0

У меня есть лист Excel, в котором есть столбец «описание». Значения в этом столбце часто содержат от 0 до 3 тегов, все начиная с символа #. Есть ли способ вытащить все эти теги в столбцы?Как я могу вытащить хэштеги из текстового столбца?

Возможно, у вас есть только 3 пустых столбца, называемых хэштегами 1, 2, 3, и вставьте их в каждый столбец.

Это даже не важно, чтобы удалить их из колонки описания, вытаскивая их.

Пример описания:

 
"#0034 #lost client lost file"   - pull out 0034 and lost 
"worker has bad quality #SusanB #quality" - pull out SusanB and quality 
"#0840 client complaint"     - pull out 0840 
"lots of ipsum"       - pull out  nothing
+0

@pnuts Простое, но, безусловно, не полное решение. Ty – Friloc

+1

Какая у вас цель? Основная причина, по которой это не было полным решением, состояла в том, что у меня было много столбцов, описание которых осталось после тега. поэтому для «# 0888 #jessej file lost» Becomes ColA: 0888 ColB: файл Jessej потерян. это вместо colC для «потерянного файла», который является описанием. @pnuts – Friloc

ответ

1

Я люблю расширение, которое может позволить вам использовать Regex в Excel ...

Без этого:

1) найти положение символ разделителя (#?) в вашей строке с FIND()

2) затем используйте LEFT(), MID() и RIGHT(), чтобы взорвать вашу строку на 3 столбца

3) можно удалить с помощью MID #() вместо ВЛЕВО() и RIGHT()

-

Было бы что-то подобное для первого тега с #:

= LEFT (A1, FIND ("#", A1) -1)

-

Надеется, что это поможет!

+0

У меня возникли проблемы с тем, чтобы это работало. Существует потенциал, но я получаю все вещи слева от #, а не справа. Когда я использую функцию right(), я получаю материал слева от тега, а также символы x справа. – Friloc

2

Допустим, столбец А Описание столбца, а в A2 вы имеете первую ячейку с хэштегов
В В2 входят:

=MID(A2;(FIND("#";A2))+1;(FIND(" ";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))-(FIND("#";A2))-1) 

В C2 входят:

=MID(A2;(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))+1;(FIND(" ";MID(A2;(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))+1;LEN(A2)-(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))))+(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2))))-(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))-1) 

В D2 входят:

=MID(A2;(FIND("#";MID(A2;(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))+1;LEN(A2)-(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))))+(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2))))+1;(FIND(" ";MID(A2;(FIND("#";MID(A2;(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))+1;LEN(A2)-(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))))+(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2))))+1;LEN(A2)-(FIND("#";MID(A2;(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))+1;LEN(A2)-(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))))+(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2))))))+(FIND("#";MID(A2;(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))+1;LEN(A2)-(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))))+(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))))-(FIND("#";MID(A2;(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))+1;LEN(A2)-(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2)))))+(FIND("#";MID(A2;(FIND("#";A2))+1;LEN(A2)-(FIND("#";A2))))+(FIND("#";A2))))-1) 
+0

Возможно, это очень хорошо, но они не работают. Я вставляю их и получаю сообщение о наличии ошибки в формуле. Я не могу это сделать достаточно легко, чтобы найти проблему. – Friloc

+0

это работает, возможно, вам нужно поместить запятую вместо точки с запятой в формулах .... –

+0

+1 Когда я впервые попробовал это (заменив ';' на ','), я подумал, что есть проблема с формулой C2, следовательно, моя (что я сейчас жалею!), но вы правы, эти * делают * работу (для меня, хотя я был бы склонен обернуть каждый в IFERROR (..., «»). – pnuts

0

Очень уродливый, но работает (в B2, C2 и D2 соответственно LY и скопировано вниз к масти):

= ЕСЛИОШИБКА (ЕСЛИ (ЛЕВЫЙ (A2,1) = "#", MID (A2,2, FIND (»», А2) -2), MID (А2 , FIND ("#", A2) + 1, FIND ("", A2) -1)), "")

= IFERROR (MID (A2, FIND ("#", A2, FIND ("# «& B2, A2) +1) + 1, НАЙТИ (« # », A2, НАЙТИ (« # »& B2, A2) +1) + LEN (B2) -FIND (« ", A2, FIND (" # "& В2, А2)))," ")

= ЕСЛИОШИБКА (MID (А2, FIND (" # "А2, FIND ("#" & C2, A2) + 1) + 1, FIND (" # ", A2, FIND (" # "& C2, A2) +1) + LEN (C2) -2-FIND (" ", A2, FIND (" # "& C2, A2)))," ")

0

Это всегда можно сделать с использованием регулярного выражения.

В VBE, написать следующую функцию в модуле:

Function getHashTags(rng As Range) As Variant 
    Dim regEx As RegExp 
    Set regEx = New RegExp 
    regEx.Pattern = "#\w*\b" 
    regEx.IgnoreCase = True 
    regEx.Global = True 
    Set myMatches = regEx.Execute(rng.Value) 
    Dim arr(1 To 1, 1 To 3) As Variant 
    For i = 1 To 3 
     If i > myMatches.Count Then 
      arr(1, i) = "" 
     Else 
      arr(1, i) = Replace(myMatches(i - 1), "#", "") 
     End If 
    Next i 
    getHashTags = arr 
End Function 

Теперь, давайте предположим, что колонка А это описание столбца, а в ячейке A2 у вас есть первая ячейка с хэш-тегами.

В ячейке B2 ввести следующее:

=getHashTags(B$2) 

Теперь выберите ячейки B2, C2, D2, F2 Нажмите , а затем Ctrl + сдвиг + ввести. Это приведет к возврату варианта из функции getHashTags в выбранные ячейки.

Надеюсь, это поможет.

PS: И да, для этого необходимо также указать ссылку Microsoft VBScript Regular Expressions 5.5.