excel - Creating worksheets based on unique values -
i have data set sorted date wise , want copy data based on month, i.e, data of each month copied new worksheet , name of sheet name of month present. data set: http://bit.ly/1cohv5j
i tried running following code:
sub x() dim rng range activesheet .autofiltermode = false sheets.add().name = "temp" .range("h2", .range("h2").end(xldown)).advancedfilter action:=xlfiltercopy, copytorange:=sheets("temp").range("a1"), unique:=true each rng in sheets("temp").usedrange.offset(1).resize(sheets("temp").usedrange.rows.count - 1) .range("a1").currentregion.autofilter field:=8, criteria1:=rng sheets.add(after:=sheets(sheets.count)).name = rng.text .autofilter.range.copy sheets(rng).range("a1") next rng .autofiltermode = false application.displayalerts = false sheets("temp").delete application.displayalerts = true end end sub but error keeps coming up:
"you typed invalid name sheet or chart. make sure that: name type not exceed 31 charaters name not contain of thefollowing characters: \ / ? * [ or ] not leave name blank
kindly , tell me going wrong.
the text in of cells may have reserved characters... can try below, replace sheeets.add bit cleaned string
ps: should make sure cell using name not empty
full code should below
sub x() dim rng range dim sheeetname string activesheet .autofiltermode = false sheets.add().name = "temp" .range("h2", .range("h2").end(xldown)).advancedfilter action:=xlfiltercopy, copytorange:=sheets("temp").range("a1"), unique:=true each rng in sheets("temp").usedrange.offset(1).resize(sheets("temp").usedrange.rows.count - 1) .range("a1").currentregion.autofilter field:=8, criteria1:=rng sheeetname = getgoodsheetname(rng.text) sheets.add(after:=sheets(sheets.count)).name = sheeetname .autofilter.range.copy sheets(sheetname).range("a1") next rng .autofiltermode = false application.displayalerts = false sheets("temp").delete application.displayalerts = true end end sub function getgoodsheetname(fromname string) string dim objregex object set objregex = createobject("vbscript.regexp") objregex .global = true .pattern = "[\<\>\*\\\/\?|]" getgoodsheetname = .replace(fromname, "_") end end function
Comments
Post a Comment