excel - Delete duplicates where the value of another column in the same row = 0 -
i have worksheet ~30k rows of data , 20 columns. lot of values in column b duplicates, , delete duplicates. problem have though column b may duplicate, row's data in rest of columns not duplicate, it's important delete row if value in column b duplicate , value in column m = 0.
is there way do each row in worksheet (the worksheet name test)? imagine involves "for each...", don't have lot of experience , haven't been able find other macros can complete task. let me know if need me elaborate on trying accomplish.
thanks help!
here's simple way in vba, queries spreadsheet table. you'll have adapt runquery() method particular case, because don't know column names.
this assumes following:
- your worksheet laid out table, column names in row 1, , data below it
- you've saved workbook before running code
in particular workbook, have column labeled "category", 1 labeled "types", , i've added column called "deleteme".
'adapt runquery particular needs sub runquery() 'change sql statement reflect particular need sql = "select [category], [types] %table(0)% group [category], [types] having count(*) > 1" 'change "sheet2" sheet name set rs = querysheet(sql, sheet2) while not rs.eof sql = "update %table(0)% set [deleteme]='x' [category]='" & rs!category & "' , [types]='" & rs!types & "'" 'again, change sheet2 sheet name querysheet sql, sheet2 rs.movenext loop end sub 'you don't need change function function querysheet(ssql, paramarray worksheets()) dim osh dim sconn, n on error goto querysheet_err set querysheet = createobject("adodb.recordset") sconn = "provider=microsoft.ace.oledb.12.0;data source=" & worksheets(0).parent.fullname & ";extended properties=""excel 8.0;hdr=yes"";" n = 0 each osh in worksheets ssql = replace(ssql, "%table(" & n & ")%", "[" & osh.name & "$]") n = n + 1 next querysheet.open ssql, sconn exit function querysheet_err: msgbox "error in querysheet(): " & err.description end end function the code updates "deleteme" column x. now, can sort "deleteme", , delete rows (or write simple vba statement that).
your runquery() method need more this, replacing "column b" , "column m" names of fields in sheet's header row:
... 'change sql statement reflect particular need sql = "select [column b] %table(0)% [column m] = 0 group [column b] having count(*) > 1" 'change "sheet2" sheet name set rs = querysheet(sql, sheet2) while not rs.eof sql = "update %table(0)% set [deleteme]='x' " & _ " " & _ iif(isnull(rs![column b]), _ " [column b] null", _ " [column b]='" & rs![column b] & "' ") & _ " , [column m]=0" 'again, change sheet2 sheet name querysheet sql, sheet2 ... note: debug errors when change names of worksheets "sheet1" else... haven't worked issue out yet. works "quick n' dirty" queries.
Comments
Post a Comment