VBS для Excel подсчитать и конкретное слово и использовать его для цикла - PullRequest
0 голосов
/ 30 апреля 2018

Мне снова нужна небольшая помощь.

У меня есть файл Excel, и мне нужно выполнить некоторое форматирование для дальнейшей обработки. Я застрял в одной точке:

  • найти слово / или строку
  • верни число, как часто оно используется в Excel
  • используйте это число, чтобы поместить его в цикл

Я надеюсь, что это возможно с VBscript, потому что я не могу использовать VBA. Вот так выглядит код, но я не работаю

Dim objExcel  
Set Excel = CreateObject("Excel.Application")  
Excel.Visible = True  
excel.workbooks.open "C:\Users\............."  
excel.Rows("1:34").Select  
excel.Selection.Delete  
excel.Columns("A:A").Select  
excel.Selection.Delete  
excel.Range("A1").Select  
Number = excel.countIf "A:A", "Ent.Date"  
for i = 1 to Number  
  excel.Cells.Find("Ent.Date").Activate  
  excel.Activecell.Offset(-1,0).Select  
  excel.Activecell.resize(RowSize +3).EntireRow.Select  
  excel.Selection.Delete  
next  

Пожалуйста, помогите мне.

Спасибо

1 Ответ

0 голосов
/ 30 апреля 2018

Вы рядом. CountIf() - это метод класса WorksheetFunction в вашем приложении Excel. Итак:

Number = Excel.WorksheetFunction.CountIf("A:A", "Ent.Date")

Unrelated. Все это .Active .Select не нужно. Люди Select и Activate, но ваш сценарий не нужен.

Вместо того, чтобы:

Set Excel = CreateObject("Excel.Application")  
Excel.Visible = True  
excel.workbooks.open "C:\Users\............."  
excel.Rows("1:34").Delete    
excel.Columns("A:A").Delete
Number = excel.WorksheetFunction.CountIf(Excel.Range("A:A"), "Ent.Date")
for i = 1 to Number  
  excel.Cells.Find("Ent.Date").Offset(-1,0).resize(RowSize +3).EntireRow.Delete       
next  

Также (и это может быть более предпочтительным) вместо цикла с For вы могли бы вместо этого использовать цикл While:

Set Excel = CreateObject("Excel.Application")  
Excel.Visible = True  
excel.workbooks.open "C:\Users\............."  
excel.Rows("1:34").Delete    
excel.Columns("A:A").Delete
Do While excel.WorksheetFunction.CountIf(Excel.Range("A:A"), "Ent.Date") >= 1      
  excel.Cells.Find("Ent.Date").Offset(-1,0).resize(RowSize +3).EntireRow.Delete       
Loop 

Это приводит к небольшим дополнительным накладным расходам, поскольку при каждом цикле он запускается с показателем, но он чувствует себя более лаконичным и снижает вероятность ошибки, поскольку вы, похоже, изменяете диапазон, возвращаемый Find(), чтобы добавить больше строк, а затем удаляете их все ... это означает, что вы можете выбирать строки, которые также содержат критерии поиска, что означает, что вы слишком много зацикливаетесь в цикле For. Но ... возможно, ваш лист настроен таким образом, что этого условия не происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...