2013-07-11 6 views
0

Я никогда не использовал Marcos в Excel раньше только в Access. То, что я хочу сделать, - это цикл через рабочий лист и где столбцы X и Y не нуль извлекают информацию в новый рабочий лист. Но строка Y может иметь более одного значения, и я хотел бы создать новую запись для каждого значения в Y с X. Каждое значение разделяется запятой.excel - Loop через рабочий лист

enter image description here

Результат Я хотел бы это

С3

С4

б С6

б С7

б С10

И так далее

Вот мой код до сих пор:

Sub Extract() 
' 
' Extract Macro 
' 
Dim WkSht As Worksheet, myOtherSheet As Worksheet, myBook As Workbook 
Dim r As Integer 
Dim Regex 
Dim Match 
Dim text 
Set myBook = Excel.ActiveWorkbook 
Set myOtherSheet = myBook.Sheets("New") 
Set Regex = CreateObject("VBScript.RegExp") 
Regex.Patten = """[^""]*""|[^,]*" 
Regex.Global = True 




j = 0 
For Each WkSht In ThisWorkbook.Worksheets 
    If WkSht.Name = "Sheet1" Then 
     For r = 1 To 1000 
      If WkSht.Rows(r, B).Value <> "" & WkSht.Rows(r, G).Value <> "" Then 
      text = WkSht.Rows(r, G).Value 
      For Each Match In Regex.Execute(text) 
      myOtherSheet.Cells(j, 1).Value = WkSht.Cells(r, B) 
      myOtherSheet.Cells(j, 2).Value = Match 
      j = j + 1 
      Next Match 
      Exit For 
      End If 
      r = r + 1 
      Next r 
      Exit For 
      End If 
      Next WkSht 



End Sub 

Im смог это бежать, я думаю, что мой синтаксис является неправильным для регулярных выражений, внутривенно только когда-либо использовали его в C#, Является ли это лучшим вариантом для того, чего я пытаюсь достичь, любая помощь будет принята с благодарностью?

+1

какое сообщение об ошибке вы получаете? Начните с изменения 'Regex.Patter' на' Regex.Pattern', а затем вернитесь к нам с явным сообщением об ошибке –

+1

. Мне кажется, вам будет проще, если вы добавите ссылку на ** Microsoft VBScript Regular Expressions 5.5 ** library (в меню «Инструменты»> «Ссылки» * в редакторе VB *. Затем вы можете объявить «Dim Regex как RegExp» и использовать «Set Regex = New RegExp». Это даст вам ** Intellisense **, который поможет вам закодировать код. Кроме того, на вкладке «Инструменты»> «Редактор параметров» проверьте все флажки, как «Требовать объявление переменных» и «Автоматические списки участников» –

+2

. Вы хотите лучшее решение? Используйте Notepad ++ и запишите макрос, чтобы заменить ',' символом новой строки '\ n' и просто сыграйте этот макрос, после этого вставьте его в excel или import, чтобы преуспеть через txt-файл и отсортируйте, если вам это нужно. – Mowgli

ответ

1

исправить ошибку 1004, изменить

Rows(r, B).Value

в

Range(r, B).Value

свойство Rows принимает только один индекс, вы пытаетесь проверить ячейку, так muct использование либо Диапазон или Сотовый объект.

также сделать программирование с RegEx проще, добавить ссылку на Microsoft VBScript Regular Expressions 5,5 библиотека:

в меню Инструменты> Ссылки в редакторе VB.

Тогда вы можете объявить Dim Regex as RegExp и использовать Set Regex = New RegExp

Это даст вам Intellisense, который поможет вам закодировать corerctly.

Для учебника в использовании регулярных выражений из VBA Excel см

Кроме того, в Сервис> Параметры Editor Вкладка, проверьте все коробки, как Требовать переменную декларация и Авто Члены списка

+1

'Диапазон (r, B) .Value' to' Range (r, B). Значение? Вероятно, с ошибкой –

+0

Я все еще получаю ошибку 1004, когда я меняю .Rows на .Range, за исключением того, что на этот раз говорит, что метод «Диапазон» объекта _WorkSheet не удался? Есть идеи ? – Bawn

+0

вытащить 'Wksht', так что он просто читает' Range (r, B) .Value' –

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