excel vba - Vlookup Function in vba having repeated task -
i found lookup vba google , did modification. however, have hard time figure out way resolve issue of duplicating coding same task (explain below) objective 1 value , return multiples value @ 1 time. below of steps:
the raw data table (data analysis) c8 o399
the lookup value a5 a172 , return result placed @ t5 t172 (at sheet name "graph")
then repeat again next duplicating test code @ step 1 , 2 slight different column
i definite again raw data table (data analysis) c8 i399 - *different column 1st step
the lookup value a5 a172 , return result placed @ v5 v172 ( @ sheet name "graph")
i repeat again 1 , 2 until finish lookup multiple return (approximately around 15 values)
so having hard time put loop value of column , table changing every lookup.
two columns of lookup table raw data allow every lookup task (this different vkloop need specific column for) point add raw data go few thousand line , seeing code using "collection" storeage. not sure for.
below coding
sub vlookupvalues(lookupcategory range, lookupvalues range, vlookupcol object) dim long, resarr() variant redim resarr(lookupcategory.rows.count, 1) = 1 lookupcategory.rows.count resarr(i - 1, 0) = vlookupcol.item(cstr(lookupcategory(i))) next lookupvalues = resarr end sub
any helps appreciated. thanks.
sub testvba() optimizevba true dim starttime single, endtime single starttime = timer dim testnames range, testvalues range dim lookuptestnames range, lookuptestvalues range dim vlookupcol object set testnames = worksheets("data analysis").range("c8:c399") set testvalues = worksheets("data analysis").range("o8:o399") set lookuptestnames = worksheets("graph").range("a5:a172") set lookuptestvalues = worksheets("graph").range("t5:t172") 'set testvalues = worksheets("data analysis").range("i8:i" & 399) 'set lookuptestnames = worksheets("graph").range("a5:a172") 'set lookuptestvalues = worksheets("graph").range("u5:u172") 'build collection set vlookupcol = buildlookupcollection(testnames, testvalues) 'lookup values 'vlookupvalues lookuptestnames, lookuptestvalues, vlookupcol vlookupvalues lookuptestnames, lookuptestvalues, vlookupcol endtime = timer debug.print (endtime - starttime) & " seconds have passed [vba]" optimizevba false set vlookupcol = nothing 'for lower test spec**************************************************************** set testnames = worksheets("data analysis").range("c8:c" & 399) set testvalues = worksheets("data analysis").range("i8:i" & 399) set lookuptestnames = worksheets("graph").range("a5:a172") set lookuptestvalues = worksheets("graph").range("u5:u172") 'build collection set vlookupcol = buildlookupcollection(testnames, testvalues) 'lookup values vlookupvalues lookuptestnames, lookuptestvalues, vlookupcol endtime = timer debug.print (endtime - starttime) & " seconds have passed [vba]" optimizevba false set vlookupcol = nothing 'for upper test spec**************************************************************** set testnames = worksheets("data analysis").range("c8:c" & 399) set testvalues = worksheets("data analysis").range("j8:j" & 399) set lookuptestnames = worksheets("graph").range("a5:a172") set lookuptestvalues = worksheets("graph").range("v5:v172") 'build collection set vlookupcol = buildlookupcollection(testnames, testvalues) 'lookup values vlookupvalues lookuptestnames, lookuptestvalues, vlookupcol endtime = timer debug.print (endtime - starttime) & " seconds have passed [vba]" optimizevba false set vlookupcol = nothing
ali has right approach. lookup array column pairs make looping easier.
sub testvba2() optimizevba true dim starttime single dim cset, vlookupcol object each cset in array(array("i", "t"), array("j", "u"), array("o", "v")) starttime = timer worksheets("data analysis").rows("8:399") set vlookupcol = buildlookupcollection(.columns("c"), .columns(cset(0))) end worksheets("graph").rows("5:172") vlookupvalues .columns("a"), .columns(cset(1)), vlookupcol end debug.print timer - starttime, "data analysis column:"; cset(0), "graph column:"; cset(1) next optimizevba false end sub
Comments
Post a Comment