![]() |
How does this work?
Can anyone interpret this code for me to explain the logic in how it works.
I've run it and can see the results but I still don't understand the logic used that makes this small amount of code do so much! Sub x() Dim c As Long With Sheet1 .AutoFilterMode = False For c = 3 To .Cells(1, 1).End(xlToRight).Column .Range("A1").AutoFilter Field:=c, Criteria1:="X" Sheets.Add(after:=Sheets(Sheets.Count)).Name = Left(.Cells(1, c), 31) .AutoFilter.Range.Resize(, 2).Copy ActiveSheet.Range("A1") .ShowAllData Next c .AutoFilterMode = False End With End Sub Thanks, Brian |
How does this work?
See comments. the code is filtering each column in sheet 1 starting in
column 3 ("C") looking for the X in each column. Then copying columns A:B to a new worksheet. The new worksheet is named the column Header in row 1. The code is naming the new worksheet the 1st 31 letters of the Header in the column. Sub x() Dim c As Long With Sheet1 'turn oiff all autofilter on worksheet .AutoFilterMode = False 'look at all columns where there data in row 1 'start at column 3 and move to last column with data 'C is the column Number starting at 3 For c = 3 To .Cells(1, 1).End(xlToRight).Column 'auto filter column C - the filed is the column .Range("A1").AutoFilter Field:=c, Criteria1:="X" 'add new workshee to workbook 'the sheet name is the 1st 31 chaaracter in row 1, column C Sheets.Add(after:=Sheets(Sheets.Count)).Name = Left(.Cells(1, c), 31) 'copy the first two columns of the autofiler rows 'to the new worksheet .AutoFilter.Range.Resize(, 2).Copy ActiveSheet.Range("A1") 'remove the autofilter .ShowAllData Next c .AutoFilterMode = False End With End Sub "leimst" wrote: Can anyone interpret this code for me to explain the logic in how it works. I've run it and can see the results but I still don't understand the logic used that makes this small amount of code do so much! Sub x() Dim c As Long With Sheet1 .AutoFilterMode = False For c = 3 To .Cells(1, 1).End(xlToRight).Column .Range("A1").AutoFilter Field:=c, Criteria1:="X" Sheets.Add(after:=Sheets(Sheets.Count)).Name = Left(.Cells(1, c), 31) .AutoFilter.Range.Resize(, 2).Copy ActiveSheet.Range("A1") .ShowAllData Next c .AutoFilterMode = False End With End Sub Thanks, Brian |
All times are GMT +1. The time now is 05:42 PM. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com