2013-08-28 3 views
0

Я пытаюсь создать макрос, который будет искать определенную ячейку для определенной комбинации символов в определенном порядке, а затем вставить ее на другую страницу. Мне это нужно искать ячейку, содержащую 9 сочетание букв а/номер для «9P», но только если это третье и четвертый номер/письмо вКак найти, содержит ли ячейка определенные символы в определенных позициях?

Так что если дан этот список записей:.

NA9PK99LJ 
NA9PK99LK 
XX9P109LH 
XX9P109XF 
XX849P01D 
NA8419PZ3 
XX9P109VK 

Я бы хотел, чтобы он копировал первые четыре и последние записи, а затем прошёл их вертикально, начиная с A2 на другой странице.

Я как бы новичок, чтобы превзойти vba, но мне сказали, что это должно быть выполнимо.

Любая помощь была бы высоко оценена!

Благодаря

Крис

+1

Посмотри 'Mid (строку, 3, 2) = "9P"' – tigeravatar

+0

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

ответ

0

Самый простой способ я знаю, это использовать Find() с групповыми символами. Что вы можете сделать, это использовать записи макросов, делая следующее:

  • Начало записи макросов
  • Выберите диапазон для поиска
  • Do Ctrl + F и введите ??9P????? в условие поиска
  • Выбрать все результаты в окне
  • Закройте окно, скопируйте ячейки и вставить их туда, где вы хотите
  • Остановить записи макросов

Это даст вам основную базу вашего кода, которую вы сможете точно настроить так, чтобы она делала то, что вам нужно. Это также хорошая работа для вас, чтобы узнать, как работает VBA.

+0

Раньше я использовал функцию макросов записи, но, поскольку этот список изменяется, и числа в этом списке никогда не будут одинаковыми при каждом запуске, я не думаю, что это жизнеспособное решение. Спасибо, что нашли время ответить, я ценю это! – user2726121

+0

Я не вижу, как это не работает. Вы можете отредактировать диапазон, чтобы убедиться, что он достаточно широкий, чтобы соответствовать вашим потребностям, а термин для ввода в поле поиска использует подстановочные знаки, что делает его еще более гибким. Вы имеете в виду, что это может быть что-то другое, чем 9P? Затем поместите его в ячейку и просто укажите, что в терминах вместо жестко закодированного '9P'. – ApplePie

1

Надеется, что это помогает, возможно, пошли за бортом

Sub Solution() 

Dim search As String, start As Integer, lastaddress As String, toworksheet As String 

lastaddress = "A2" 'cell location on the result sheet 
search = InputBox("Enter Search Critera") 'enter search critera 
start = InputBox("Start from") 'integer of where to search in the string, not zero index 
toworksheet = InputBox("Put results into which spreadsheet") 'worksheet name to put results 

'select the cell you want to start your search from and it will continue till it reaches a blank cell 
Do While ActiveCell.Text <> "" 

'Performs the test 
If Mid(ActiveCell.Text, start, Len(search)) = search Then 

'adds the entry to the results sheet 
Worksheets(toworksheet).Cells.Range(lastaddress).Value = ActiveCell.Text 
'updates the address to the next line in your results sheet 
lastaddress = Worksheets(toworksheet).Cells.Range(lastaddress).Offset(1, 0).Address 
End If 

'goes to next item in list 
ActiveCell.Offset(1, 0).Select 
Loop 

End Sub 
+0

Роб это похоже, что это на самом деле то, что я искал, хотя, возможно, немного более продвинутый, чем я себе представлял. Кажется, я не могу заставить это работать, и я думаю, что сталкиваюсь с проблемой, когда спрашивает, с чего начать. Я не уверен, что я делаю правильно, что я не могу заставить его заполнить. Кроме того, я замечаю в коде, что он вставляет первые 4 и последние цифры на другой лист, можно ли вставить весь набор из 9 чисел, если этот критерий выполняется, а не как сейчас? В идеале я пытаюсь разбить этот большой список на отдельные листы. Благодаря! – user2726121

+0

Не беспокойтесь, выберите первую ячейку в своем списке данных, прежде чем запускать метод. Код не создает новый рабочий лист, поэтому создайте лист с соответствующим именем и используйте имя, когда оно спросит, где поставить свои результаты. Затем измените Mid (ActiveCell.Text, 1, 4) + Right (ActiveCell.Text, 1) ------------ Activecell.Text, это займет весь текст в вашем элементе в вашем списке и поместить это в таблицу –