用于Excel的VBS计数和特定单词并将其用于循环

时间:2018-04-30 14:15:39

标签: excel loops vbscript

我再次需要帮助。

我有一个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 :(得分:0)

你很亲密。 CountIf()WorksheetFunction应用中Excel类的一种方法。所以:

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

无关。所有这些.Active .Select都是不必要的。人类SelectActivate,但您的脚本不需要。

相反:

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 

由于它在每个循环上运行了countif,因此会产生一些额外的开销,但它感觉更简洁,错误的可能性更小,因为您似乎将Find()返回的范围调整为更多行然后删除它们全部...这意味着您可能会选择也包含搜索条件的行,这意味着您在For循环中循环过多。但是......也许你的工作表设置的方式不会发生这种情况。