Можем ли да филтрираме стойностите и да ги поставим в масив с помощта на VBScript?

Помислете за таблицата в Excel по-долу:

  Emp Id    Job Status
    741         P
    788         T
    111         T
    124         P
    136         P

Искам усъвършенстван VBScript код, който може да направи такова филтриране с един изстрел, както направихме ръчно в Excel. След филтрирането искам стойностите, филтрирани в първата колона, да се поставят само в масив.

Код

Dim IntRow1,Arr,Index
Index=0

Do while objSheet1.Cells(IntRow1,1) <> ""
    If objSheet1.Cells(IntRow1,2) = "P" Then
        Arr(Index)=objSheet1.Cells(IntRow1,1)
        Index=Index+1
    End If
IntRow1=IntRow1=1
Loop

*АКТУАЛИЗАЦИЯ

Option Explicit

Dim Dic, DicItems, Dickeys
Dim objExcel1
Dim strPathExcel1
Dim objSheet1, lastRow

Set objExcel1 = CreateObject("Excel.Application")

strPathExcel1 = "D:\VA\CopyofGEWingtoWing_latest_dump_21112012.xls"
objExcel1.Workbooks.Open strPathExcel1
Set objSheet1 = objExcel1.ActiveWorkbook.Worksheets(1)

Set Dic = CreateObject("Scripting.Dictionary")

lastRow = 1
Do Until lastRow > objExcel1.Application.WorksheetFunction.CountA(objSheet1.Columns(1))
    Dic.Add objSheet1.Cells(lastRow, 1).Value, objSheet1.Cells(lastRow, 2).Value
    lastRow = lastRow + 1
Loop

DicItems = Dic.Items
Dickeys = Dic.Keys

For lastRow = 0 To Dic.Count - 1
    If DicItems(lastRow) = "P" Then
        Dic.Remove (Dickeys(lastRow))
    End If
Next

DicItems = Dic.Items
'=======================
objExcel1.ActiveWorkbook.SaveAs strPathExcel1
objExcel1.Workbooks.Close
objExcel1.Application.Quit
'======================

person arun_roy    schedule 18.12.2012    source източник
comment
Каквото и да правите, не забравяйте да намалите трафика на листове, кодове. Не е препоръчително да обменяте от лист към код. Предоставихме ви много код, който показва вземане на диапазон, транспониране в масив, обработка на масив, след което транспониране обратно в диапазона на листа. Защо не го използваш?   -  person bonCodigo    schedule 18.12.2012
comment
Не съм запознат с функцията за транспониране, затова ви попитах и ​​в предишния пост.   -  person arun_roy    schedule 18.12.2012
comment
@bonCodigo Можете ли просто да ме съборите с едно нещо, по какъв начин изчислението в масив е много за предпочитане, отколкото същото в Excel? Кои са областите, в които мога да се сетя за такава функционалност за транспониране?   -  person arun_roy    schedule 18.12.2012
comment
Transpose търсите ли в Google?   -  person bonCodigo    schedule 18.12.2012
comment
Да, правя го, сър :-) Както и да е, трябва да изчистя логиката. Ако се съмнявам, ще ви попитам. Моля, помогнете ми тогава:-)   -  person arun_roy    schedule 18.12.2012
comment
@bonCodigo Да, сега разбрах, но сега мога ли да видя демо код за това как да направя филтриране в Excel с помощта на VBS? Ако мога да направя това, тогава само филтрирани редове ще транспонирам в 1D масив.   -  person arun_roy    schedule 18.12.2012
comment
Прегледах вашата връзка и techrepublic.com/blog/msoffice/ също. и връзката ns7.webmasters.com/caspdoc/html/vbscript_dictionary_object.htm   -  person arun_roy    schedule 18.12.2012
comment
радвам се, че правиш търсенето. Изпробвайте ги и ако имате съмнения, дайте шум.   -  person bonCodigo    schedule 18.12.2012
comment
нямате нужда от transpose тук ... вижте .AutoFilter метод, след това .SpecialCells(xlCellTypeVisible) свойства. След това ще можете да извършвате цикъл и да зареждате стойностите в масив. Ако се затрудните, публикувайте усилията си и ни уведомете.   -  person Scott Holtzman    schedule 18.12.2012
comment
@ScottHoltzman .AutoFilter обект Range ли е?   -  person arun_roy    schedule 18.12.2012
comment
.AutoFilter е метод, който предварително създавате върху Range обект. Ако прочетете за това, ще бъде много лесно да разберете.   -  person Scott Holtzman    schedule 18.12.2012
comment
Но не можах да разбера как трябва да предам стойности като аргумент във VBScript?   -  person arun_roy    schedule 18.12.2012
comment
@bonCodigo Можете ли да го прегледате, моля?   -  person arun_roy    schedule 18.12.2012
comment
@ScottHoltzman Можете ли да ми проверите актуализирания код? Искате ли да предложите още импровизации тук?   -  person arun_roy    schedule 18.12.2012


Отговори (1)


Моля, вижте отговора ми:

Опция Изрично

 Dim Dic,DicItems,Dickeys
 Dim objExcel1
 Dim strPathExcel1
 Dim objSheet1,lastRow

 Set objExcel1 = CreateObject("Excel.Application")

 strPathExcel1 = "D:\VA\CopyofGEWingtoWing_latest_dump_21112012.xls"
 objExcel1.Workbooks.open strPathExcel1
 Set objSheet1 = objExcel1.ActiveWorkbook.Worksheets(1)

 Set Dic = CreateObject("Scripting.Dictionary")

 lastRow=1
  Do Untill lastRow >         objExcel1.Application.WorksheetFunction.CountA(objSheet1.Columns(1))

  Dic.Add objSheet1.Cells(lastRow,1).Value,objSheet1.Cells(lastRow,2).Value

 lastRow=lastRow+1
 Loop

DicItems=Dic.Items
Dickeys=Dic.Keys

 For lastRow=0 to Dic.Count -1

 If DicItems(lastRow)="P" Then

    Dic.Remove(Dickeys(lastRow))

 End If

  Next

 DicItems=Dic.Items

 '=======================
  objExcel1.ActiveWorkbook.SaveAs strPathExcel1
  objExcel1.Workbooks.close
  objExcel1.Application.Quit
 '======================
person arun_roy    schedule 18.12.2012
comment
@bonCodigo можеш ли да прегледаш моя код? Ако има нужда от подобрение, моля за съвет! - person arun_roy; 18.12.2012