Copy Filtered Data To New Sheets Excel VBA Macro

Поділитися
Вставка
  • Опубліковано 31 лип 2024
  • In this video we see how to filter data and copy to new sheets in Excel using VBA macros. Excel offers filter options to easily narrow down the data. This macro example activates the filter option with VBA, and copies the filtered data for each unique entry to separate sheets. Find the code to copy filtered data to new sheets with Excel VBA in the Excel Macro Class blog under the following link: excelmacroclass.blogspot.com/...
    You can find many other macro examples and Excel VBA learning materials (including a training for beginners) in the blog under the link: excelmacroclass.blogspot.com/
    And yet, if you want more, you can find various Excel applications of different nature in the other blogs of the Excel Macro Mania saga:
    Excel Macro Fun (excelmacrofun.blogspot.com/)
    Excel Macro Business (excelmacrobusiness.blogspot.com/)
    Excel Macro Sports (excelmacrosports.blogspot.com/)

КОМЕНТАРІ • 102

  • @sanelerudolph3758
    @sanelerudolph3758 2 роки тому +2

    Life savior...Been doing things the long way...

  • @Nochance-ff9tm
    @Nochance-ff9tm 4 місяці тому +1

    I can't believe this incredible video is free. Thank you so much brother.

  • @faridqanet4709
    @faridqanet4709 3 місяці тому +1

    Thank you very much!
    This video really made my work easier at the office.

  • @zornoktv
    @zornoktv Рік тому +4

    A marvel of knowledge and impeccable execution.
    Excellent 10/10

  • @dominikapodstavekova1039
    @dominikapodstavekova1039 3 місяці тому +1

    Sir, you are my hero. Thank you!!!

  • @sunnysunny-bm4lx
    @sunnysunny-bm4lx Рік тому +1

    Awesome!

  • @redhaakhund1271
    @redhaakhund1271 2 роки тому +3

    Thank you so much sir⭐️⭐️⭐️⭐️⭐️⭐️

  • @mohdakaramakramzamil1495
    @mohdakaramakramzamil1495 Рік тому +2

    amazing tricks

  • @sandipmakwana6462
    @sandipmakwana6462 Рік тому +2

    superb macro

  • @PiyushMedicalKnowledge
    @PiyushMedicalKnowledge 2 роки тому +2

    Good video keep up bro

  • @Time_utilize
    @Time_utilize 8 місяців тому +1

    Super Duper coding....Written without testing....

  • @antoniomendoza8432
    @antoniomendoza8432 2 роки тому +4

    Man, this helped me a lot
    I have one question. How can I add certain information in every worksheet?
    In your example, I want to count the number of cars with that brand and put the number on cell E5 for every worksheet. How can I do that?

    • @ExcelMacroMania
      @ExcelMacroMania  2 роки тому +2

      Add this after pasting the data in the new sheet.
      itemsCount=Sheets(brandName).Range("A1").CurrentRegion.Rows.Count - 1 'the -1 is to skip the header, otherwise remove it
      Sheets(brandName).Range("E5").Value = itemsCount

  • @nicosetiawan5748
    @nicosetiawan5748 10 місяців тому +1

    can you help me if i need to copy it to new workbooks not sheets? and can it autosave file with the name of the file like a filtered data name. (so the file will be save named toyota, citroen, etc).
    pls help, thankyou before🙂

    • @ExcelMacroMania
      @ExcelMacroMania  10 місяців тому

      That's covered in this other video: ua-cam.com/video/9GgjoF7eJsg/v-deo.htmlsi=XWEGQxxlU7ky448c

  • @DENIZLITICARETBORSASI
    @DENIZLITICARETBORSASI Рік тому +1

    thank you. this helped me a lot. I want to paste without column A. I mean I want to paste only column B and C. What should I do? I mean, for toyota worksheet column A is empty, cell B2 Auris cell C2 2004 cell B3 Yaris C3 2010 and so on.

    • @ExcelMacroMania
      @ExcelMacroMania  Рік тому +1

      You need to change the line where you copy the data, which is taking the whole region (columns A, B, and C):
      ws.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
      add a line to get the last row with content before starting the loop:
      lr = ws.Cells(Rows.Count, "A").End(xlUp).Row
      and then replace the previous line with this one - which is specific to get the content in column B and C:
      ws.Range("B1:C" & lr).SpecialCells(xlCellTypeVisible).Copy

  • @samizaeyed3332
    @samizaeyed3332 2 роки тому +2

    hi man, I have a sheet that has about 20000 records, and I did the same as your code, but I got one filter, example the shows just Toyota , please can you help me to fix this issue please , appreciate you pation

    • @ExcelMacroMania
      @ExcelMacroMania  2 роки тому

      Not sure what your issue is. You may need to change the field if you filter by a column different than column A (which is field 1).

  • @andrepkownage
    @andrepkownage 2 роки тому +2

    Hello is a way to save all the excel spreadsheets with the name of the site to one area? Also how do you stop the loop?

    • @ExcelMacroMania
      @ExcelMacroMania  2 роки тому +1

      Check this other video: ua-cam.com/video/9GgjoF7eJsg/v-deo.html
      That's saving each worksheet to a separate workbook. Here's how you save it:
      ActiveWorkbook.SaveAs Filename:=wbPath & "\" & wsName
      *ActiveWorkbook or Workbooks("your workbook.xlsx")
      *wbPath needs to be defined before with exact path wbPath=("C:\...\...") or wbPath=ActiveWorkbook.Path if you want it in the same location
      *wsName also needs to be defined, is the name of the worksheet. If you look through each worksheet, then declare ws as worksheet and do ws.Name
      The loop in this example is a For loop, therefore, you can set the exact number of loops (For x=1 to 10). If you want to break the loop you use: Exit For

  • @AnyehongSeo
    @AnyehongSeo 2 роки тому +2

    Can you help me copy only the visible data and paste and append it on existing data?..thanks

    • @ExcelMacroMania
      @ExcelMacroMania  2 роки тому

      Sheet1.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Sheet2.Range("A1")
      Change Sheet1 and Sheet2 as needed, and specify the destination range in Sheet2. You have an example of this macro here: excelmacroclass.blogspot.com/2020/07/copy-filtered-data-to-new-sheets.html

  • @charanratna
    @charanratna Рік тому +2

    hi but the diplicates are also copying for me and empty shhets are created can you help mw with solution

    • @ExcelMacroMania
      @ExcelMacroMania  Рік тому +1

      See the comments by ZMedrano, that's probably the same case. Start from row 2 instead of 1 (skip headers). I also wrote other possibilities for that problem in the reply to that comment below.

  • @Gudha_Ismintis
    @Gudha_Ismintis Рік тому +1

    Hi, new subscriber here
    Background: i have a master spreadsheet at work, the sheet has thousands of rows and dozens of columns. 1 of the main columns has the names of a significant number of staff members (which are not in order because rows have been gradually added over time to represent that staff member - which brings me to my question)
    Question: i want these staff members to fill in the subsequent columns that belong to them all the way up and down the spreadsheet - BUT without seeing the overall spreadsheet that contains the other columns for the other staff members entering their data - is there a way perhaps to do this?

    • @ExcelMacroMania
      @ExcelMacroMania  Рік тому +1

      There are so many different ways to do this. Let me give you some ideas:
      1. Filter the spreadsheet by name/user and send to that user (a lot of work if you have to do it for each user every time, also, users can un-filter and see info for other users)
      2. Have a macro filter the spreadsheet for each user when they open the file. This could be based on Application.UserName, if that's the same name you have in the column, or have them login through UserForm or fill an InputBox with their name (which must be the same as the one in the column, so you could also have a drop-down with names - there is no security here, they could choose other user). For that you need a Workbook_Open event procedure to trigger the login, which hen filters the spreadsheet for that user. You would use a line of code similar of the one presented in this video to filter the data by the column with user name.
      3. If you need security, you can adapt option 2 and add a login with password, saving login and password in a hidden sheet, for example. Additionally, you would unlock cells in visible rows for that user and protect the worksheet.
      I hope that helps!

  • @clairebeech3258
    @clairebeech3258 3 місяці тому

    Thank you for your brilliant tutorial. I have a question, hopefully this makes sense. I have read through the comments and learnt how to only copy over 3 of the columns however I need them to paste in a different order. That is I need to copy column B, F & Z but have Z appear in column A, B in column B and F in Column C in the new work sheet. Any suggestions? Thank you

    • @clairebeech3258
      @clairebeech3258 3 місяці тому

      Not to worry, I found my own answer by insertings
      Columns("C").Cut
      Columns("A").Insert Shift:=xlToRight
      After
      ws.ShowAllData
      😁

    • @ExcelMacroMania
      @ExcelMacroMania  3 місяці тому

      @@clairebeech3258 Great to know you have figured it out by yourself! You could also replace the line that copies the current region with in dividual copy/paste columns, for example:
      ...
      Sheets.Add.Name = brandName
      Sheets("All").Columns("B").SpecialCells(xlCellTypeVisible).Copy Sheets(brandName).Columns("B")
      Sheets("All").Columns("F").SpecialCells(xlCellTypeVisible).Copy Sheets(brandName).Columns("C")
      Sheets("All").Columns("Z").SpecialCells(xlCellTypeVisible).Copy Sheets(brandName).Columns("A")

  • @zee07shortie
    @zee07shortie Рік тому +3

    This is great however, I am also getting 380+ blank sheets created. There are no blank fields in the column I am referencing. Any idea how to just get the sheets I need?

    • @ExcelMacroMania
      @ExcelMacroMania  Рік тому +2

      Not sure I understand. You get 380+ sheets created because you have 380+ unique entries in the reference column (column A in the video), or you have less than 380+ unique entries and actually the entire dataset is 380+ rows long? In the second case, the macro is actually adding a new sheet for each row, I wonder what's the name of those worksheets... there might be something wrong with the main conditional statement that checks if sheet already exists (or actually is a sheet with that name does NOT exist - sheet is nothing.

    • @zee07shortie
      @zee07shortie Рік тому

      @@ExcelMacroMania So my worksheet is 2354 rows. I have 29 unique entries in Column A. Those 29 entries become their own worksheets (as desired) but I end up getting about 380 blank sheets created as well. The names of these sheets are: Sheet1, Sheet 2, Sheet 3, and so on until the last one is created.
      I use the following:
      Sub CopyFilteredDataToNewSheets()
      Dim r As Integer, SchoolName As String, ws As Worksheet
      Set ws = ActiveSheet
      ws.Range("A1:AP1").AutoFilter

      Do
      r = r + 1
      school = ws.Range("A" & r).Value
      On Error Resume Next
      If Sheets(school) Is Nothing Then
      ws.Range("A1:AP1").AutoFilter Field:=1, Criteria1:=school
      ws.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
      Sheets.Add.Name = school
      Sheets(school).Paste
      ws.ShowAllData
      End If
      Loop While ws.Range("A" & r + 1).Value ""

      End Sub

    • @ExcelMacroMania
      @ExcelMacroMania  Рік тому +2

      @@zee07shortie The code looks good, just declare "school" as String (you declared SchoolName), otherwise is a Variant and could take other form for example if there are numbers.... Also, the Do loop starts from row 1, and you probably have headers, so add r=1 before the Do loop, to start on row 2, otherwise, it will filter by the header and create and unwanted sheet probably. Maybe there could be some characters in the school names in column A that Excel does not recognize,... or maybe you have some trailing space in some cells, not sure, I cannot replicate your error. Try to change the Do loop for a For loop with exact numbers too and see (For r=1 to 2354). But the problem definitely is around the variable "school" that seems to come empty or wrong sometimes. You can also use a modified version of the code that I explained in this other video, to get the list of unique entries first - ua-cam.com/video/jyHcAOqkRZE/v-deo.html

    • @zee07shortie
      @zee07shortie Рік тому +2

      @@ExcelMacroMania Thank you so much, the r=1 before Do made the difference.

  • @xdenvibthor6227
    @xdenvibthor6227 Рік тому +2

    What if I want to add another criteria to filter these sheets? For eg, instead of only filtering by brand, I want to filter by brand and model?
    Is this possible?

    • @ExcelMacroMania
      @ExcelMacroMania  Рік тому +2

      Just add another line to the code:
      With ActiveSheet.Range("A1:C1")
      .AutoFilter Field:=1, Criteria1:=brandName
      .AutoFilter Field:=2, Criteria1:=modelName
      End With

    • @xdenvibthor6227
      @xdenvibthor6227 Рік тому +1

      @@ExcelMacroMania i added it before the End if statement. It populates the same results. Where exactly should i place it

    • @ExcelMacroMania
      @ExcelMacroMania  Рік тому +1

      ​@@xdenvibthor6227 You should place it right after the first auto filter (for Field 1, your second is Field 2 because model is in column B or second column), then copy, add new sheet, paste, and show all data again. However, if you want now to split not just the brands, but also the models in different sheets, you will need to change the If statement for If Sheets(modelName) Is Nothing Then... and then later add the sheet with that name: Sheets.Add.Name = modelName. If you have let's say 3 brands (Toyota, Opel, Audi), but each of them have 2 different models, you end up with 6 new sheets for each model. Hope it works!

    • @brijwasiblogger1261
      @brijwasiblogger1261 3 місяці тому

      Not working

  • @asiam4774
    @asiam4774 2 роки тому +2

    Hi Sir, I need your help, How do we get data from websites to excel using vba, according to set dates, thanks

    • @ExcelMacroMania
      @ExcelMacroMania  2 роки тому +1

      That does not really have much to do with this video though. But I will add your request to my list and upload some about it soon.

    • @asiam4774
      @asiam4774 2 роки тому

      @@ExcelMacroMania Thanks 👍

  • @jack0126
    @jack0126 2 роки тому +2

    Sir it helps a lot!! Thankss
    But for my file I am not sure why I am unable to create all the sheets. The vba just stop after doing for specific Name.
    My file contains Name with special symbol (i.e. /) will it affect the vba?

    • @jack0126
      @jack0126 2 роки тому +1

      Sub CopyFilteredDataToNewSheets()
      Dim r As Integer, Record_Label As String, ws As Worksheet
      Set ws = ActiveSheet
      ws.Range("A1:I1").AutoFilter
      r = 1
      Do
      r = r + 1
      Record_Label = ws.Range("G" & r).Value
      On Error Resume Next
      If Sheets(Record_Label) Is Nothing Then
      ws.Range("A1:I1").AutoFilter Field:=7, Criteria1:=Record_Label
      ws.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
      Sheets.Add.Name = Record_Label
      Sheets(Record_Label).Paste
      ws.ShowAllData
      End If
      Loop While ws.Range("G" & r + 1).Value ""
      End Sub

    • @jack0126
      @jack0126 2 роки тому +1

      Sir more info for you, my file has 378570 rows in total

    • @ExcelMacroMania
      @ExcelMacroMania  2 роки тому +3

      You cannot use some special characters such as / \ ? * : [ ] and some other in the worksheet tab/name. That's why you get an error.

    • @jack0126
      @jack0126 2 роки тому +1

      @@ExcelMacroMania thanks a lot. I tried to replace / by _ but still only half of the entries can create sheet with its data
      Perhaps is there anything related to tow limit regarding to the vba?

    • @jack0126
      @jack0126 2 роки тому +1

      As I do it separately it works so I wonder is there any row limit to the vba. Thanks a lot!

  • @jm4giv
    @jm4giv Рік тому +2

    Hello Sir. I have long data in the Name column. Most of the cells include 40 to 50 characters. The cells with longer data are getting skipped. Is there is a way around that? Please help.

    • @jm4giv
      @jm4giv Рік тому +1

      I think its the sheet name that has the limitation. Can you show me how to change the new sheets name to something smaller?
      Sheets.add.name=name
      Sheets(name).paste
      How to change the name of the sheets to something else?

    • @ExcelMacroMania
      @ExcelMacroMania  Рік тому +2

      @@jm4giv Yes, there is a limit of course to the length of the sheet name, usually most limits are 255 characters, but the Excel sheet name is about 30 characters or so.

    • @shahzadalam4103
      @shahzadalam4103 Рік тому +1

      @@ExcelMacroManiaso how to use lang carecter text work sheet name can you let me. Know

    • @ExcelMacroMania
      @ExcelMacroMania  Рік тому +1

      @@shahzadalam4103 The maximum length is 31 characters and I don't think is possible to change that. But that's a reasonable size to show a good number of tabs. What you can do is to have an INDEX or CONTENTS tab at the beginning where you indicate how many tabs you have, what's the short name on the tab, and what's the long name or description for that tab. You can also add a link to the tabs as explained in this other video: ua-cam.com/video/wZEXGZYQHfk/v-deo.html

  • @mavalswadh
    @mavalswadh Рік тому +2

    I tried this same code for 1 st time it worked but now it's ain't working

    • @ExcelMacroMania
      @ExcelMacroMania  Рік тому

      Hmm, weird. Well, make sure you start filtering from row 2 (exclude headers). Also make sure you are showing all data (ActiveSheet.ShowAllData). It could be something with the way you get the "brandName". Don't know what else could it be. Add "On Error GoTo 0" after checking If Sheets(brandName) Is Nothing, that will allow to break in the line that produces the error (if any).

  • @JellySlab
    @JellySlab 21 день тому

    I have a data set where i am filtering a column that has integer values between 1-10. The output is 9 sheets that are properly filtered and copies, but filtered data with a value of 1 was not properly copied to a new sheet. Note that for this code to work i had to set my filter parameter ("position") to integer because if I set it to string i ended up with the 10 properly copied filtered data sheets and extra blank sheets that totaled the number of rows in the original unfiltered data set. Please help!
    Sub Macro1312()
    Dim r As Integer, sheetname As String, position As Integer, ws As Worksheet

    Set ws =ActiveSheet
    Ws.Range("A1:K1").AutoFilter
    r=1
    Do
    r = r + 1
    position = ws.Range("J" & r).Value
    On Error Resume Next
    If Sheets(position) Is Nothing Then
    ws.Range("A1:K1").AutoFilter Field:=1, Criteria1:="INST Var."
    ws.Range("A1:K1").AutoFilter Field:=4, Criteria1:="BC"
    ws.Range("A1:K1").AutoFilter Field:=8, Criteria1:="Dynamic"
    ws.Range("A1:K1").AutoFilter Field:=10, Criteria1:=position
    ws.Range("J1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
    sheetname = "INST_BC_DYN_" & position
    Sheets.Add.Name = sheetname
    Sheets(sheetname).Paste
    .ShowAllData
    End If

    Loop While ws.Range("J" & r + 1).Value ""
    End Sub

    • @ExcelMacroMania
      @ExcelMacroMania  18 днів тому

      Try using a For loop with specific start and end row instead of Do loop. Also make sure you start in row 2 if you have headers.

  • @arditiljazi6959
    @arditiljazi6959 Рік тому +2

    instead of splitting the data and adding it to another sheet, could you show how to send the data as an attachments to multiple email address's depending which column relates to them? for example, columns a - z, row 1 (1 being header) to 100 and column C will have the supplier code which will be linked to the suppliers email address in another sheet
    week, day ,supplier code, delviery date
    1 2 as 12/12/12
    2 3 as 12/12/12
    3 4 bt 14/12/14
    4 4 cd 25/06/13

    • @ExcelMacroMania
      @ExcelMacroMania  Рік тому +1

      I will add that to my list. I was planning to upload something about sending emails from excel so that should do.

    • @arditiljazi6959
      @arditiljazi6959 Рік тому +1

      @@ExcelMacroMania brilliant. hopefully you could do it soon because I'm really struggling to do it

  • @VIJAYBARASKAR9
    @VIJAYBARASKAR9 6 місяців тому

    Is it possible add new exel and run the code after that result in new excel

    • @ExcelMacroMania
      @ExcelMacroMania  6 місяців тому

      Sure it is, but you need to update the code to reference the workbook object - the first workbook with the data and the second "new" workbook with the filtered data. So you can do something like this:
      Dim wb1 As Workbook, wb2 As Workbook
      Set wb1 = ThisWorkbook
      Workbooks.Add
      Set wb2 = ActiveWorkbook
      'filter and loop here , but reference wb1 and wb2 as needed - see example below:
      For r = 1 To 20
      With wb1.Sheets("All")
      brandName = .Range("A" & r).Value
      .Range("A1:C1").AutoFilter Field:=1, Criteria1:=brandName
      .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
      End With
      wb2.Sheets.Add.Name = brandName
      wb2.ActiveSheet.Paste
      Next

    • @VIJAYBARASKAR9
      @VIJAYBARASKAR9 6 місяців тому

      @@ExcelMacroMania Can you please provide full code

    • @ExcelMacroMania
      @ExcelMacroMania  6 місяців тому

      @@VIJAYBARASKAR9 That was the whole code you need, you just need to look at the previous macro and fill what is missing, don't be lazy 🙂 It should be something like this... but I didn't test it, so don't complain if it fails:
      Dim wb1 As Workbook, wb2 As Workbook
      Set wb1 = ThisWorkbook
      Workbooks.Add
      Set wb2 = ActiveWorkbook
      With wb1.Worksheets("All")
      .Range("A1:C1").AutoFilter
      For r = 2 To 24
      brandName = .Range("A" & r).Value
      On Error Resume Next
      If wb2.Sheets(brandName) Is Nothing Then
      .Range("A1:C1").AutoFilter Field:=1, Criteria1:=brandName
      .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
      wb2.Sheets.Add.Name = brandName
      wb2.ActiveSheet.Paste
      .ShowAllData
      End If
      Next r
      End With

  • @danielledeutsch3308
    @danielledeutsch3308 8 місяців тому

    mine isnt coping the data from the other columns into the new worksheets...

    • @ExcelMacroMania
      @ExcelMacroMania  8 місяців тому

      Hmm.. any error? simply not copying? I think you are missing something. Please the code in the blog article here: excelmacroclass.blogspot.com/2020/07/copy-filtered-data-to-new-sheets.html

  • @suvendubiswas3978
    @suvendubiswas3978 2 місяці тому

    What if I want to copy it to a new excel file? Kindly help

    • @ExcelMacroMania
      @ExcelMacroMania  Місяць тому

      Use Workbooks.Add to create a new workbook and set it to a variable that you can use later. You probably need at least 2 variables, wb1 and wb2. Then refer each accordingly. Check this video for example: ua-cam.com/video/9GgjoF7eJsg/v-deo.htmlsi=hT9QfVcFdiePXNd3
      Also, you can probably check some videos of the workbook object to learn that well:
      ua-cam.com/video/rNqaL-JgBxU/v-deo.htmlsi=Pn0cWJ6FpGruXbjy
      ua-cam.com/video/oTzY44uou1Q/v-deo.htmlsi=bAk0D9ZPcoZyAQm1

  • @rahulsinghchauhan1464
    @rahulsinghchauhan1464 Рік тому +1

    When i run this code i get extra blank sheets like sheet1,sheet2

    • @ExcelMacroMania
      @ExcelMacroMania  Рік тому

      That's probably because you are starting in row 1, so if you use the code in the video (a Do loop), make sure you add r=1 before the loop (that's actually added towards the end of the video and you may have missed it).
      ...
      r = 1
      Do
      r = r + 1
      brand = ws.Range("A" & r).Value
      ...
      If you are using the code in the blog post (a For loop), the For should go from 2 To lastrow.
      For r = 2 To lastrow

    • @rahulsinghchauhan1464
      @rahulsinghchauhan1464 Рік тому

      I used the same code as you have done r=1
      But the problem is that when same brand name comes 2nd time its create an empty sheet with the sheet1 name

    • @ExcelMacroMania
      @ExcelMacroMania  Рік тому

      @@rahulsinghchauhan1464 When same brand name comes, the main IF statement avoids adding sheet and copy/paste values, that's this part of code - make sure is correct:
      On Error Resume Next
      If Sheets(brand) Is Nothing Then
      ...
      If that's correct, the problem may be with the brand variable.- make sure it's declared as String, otherwise is a Variant and could take other form for example if there are numbers... Maybe there could be some characters in the brand name in column A that Excel does not recognize,... or maybe you have some trailing spaces in some cells, not sure, I cannot replicate your error. Try to change the Do loop for a For loop with exact numbers too and see (For r=1 to lastrow). Do you get as many sheets as rows? or, how many more empty sheets do you get? You can also use a modified version of the code that I explained in this other video, to get the list of unique entries first - ua-cam.com/video/jyHcAOqkRZE/v-deo.html

  • @user-uq1jj7uv4q
    @user-uq1jj7uv4q 6 місяців тому

    How if is multiple creteria

    • @ExcelMacroMania
      @ExcelMacroMania  6 місяців тому

      To filter the data based on 2 criteria you can add Criteria2 along and Operator. For example, if you want to filter car sales for 2 brands you can do as follows:
      Sheets("All").Range("A1:C1").AutoFilter Field:=1, Criteria1:=brandName1, Operator:=xlOr, Criteria2:=brandName2

  • @bluejay12293
    @bluejay12293 2 роки тому +2

    genius but I like to copy only specific data no heading and only selected columns can you do it?

    • @ExcelMacroMania
      @ExcelMacroMania  2 роки тому

      Change just this line as follows (as an example to copy columns A and C only): .Range("A:A,C:C").SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants).Copy

    • @rendythamrin1663
      @rendythamrin1663 Рік тому

      @@ExcelMacroMania hi, this line of code is working very well, but do you have simpler code if let say we have A : V , and i only want to exclude D and E ? thank you

    • @ExcelMacroMania
      @ExcelMacroMania  Рік тому

      @@rendythamrin1663 So, if you mean to only copy columns D and E to new sheets for each unique value in column D (or in A as in the original video), you would just need to change this line of code:
      .Columns("D:E").SpecialCells(xlCellTypeVisible).Copy
      change also the brand if you want to filter on unique values in column D for example.
      brand = Sheets("All").Range("D" & r).Value

    • @rendythamrin1663
      @rendythamrin1663 Рік тому

      No , i mean i only want to copy A:C and F: V , skipping D:E

    • @ExcelMacroMania
      @ExcelMacroMania  Рік тому

      @@rendythamrin1663 Then we go back to my initial response. You need to combine groups of cells (or columns or ranges if you will) using the semi-colon, and then use special cells.
      .Range("A:C,F:V").SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants).Copy

  • @user-is8pj2vl7t
    @user-is8pj2vl7t 5 місяців тому

    Hi, Thanks for the code, however, when I run the code, I get individual worksheets with no data.
    code below.
    Sub CopyFilteredData()
    Dim r As Integer, agency As String, ws As Worksheet
    Set ws = ActiveSheet
    ws.Range("A1:BD1").AutoFilter
    r = 1
    Do
    r = r + 1
    agency = ws.Range("AS" & r).Value
    On Error Resume Next
    If Sheets(agency) Is Nothing Then
    ws.Range("A1:BD1").AutoFilter Field:=1, Criteria1:=agency
    ws.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
    Sheets.Add.Name = agency
    Sheets(agency).Paste
    ws.ShowAllData
    End If
    Loop While ws.Range("A" & r + 1).Value ""

    End Sub

    • @ExcelMacroMania
      @ExcelMacroMania  5 місяців тому

      You need to change the "Field" of the autofilter. If you filter data for "agency" which is in column AS , right? then the Field is 45.

  • @opaddie
    @opaddie 9 місяців тому

    Please can you help me to cut it and paste it in another sheet instead of copying

    • @ExcelMacroMania
      @ExcelMacroMania  9 місяців тому +1

      You can just replace "Copy" with "Cut". For example:
      Sheets(1).Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Cut
      Sheets(brandName).Paste
      But if you are going to cut everything from the main sheet, you can probably still do the "Copy" but then delete that main sheet at the end.

    • @opaddie
      @opaddie 9 місяців тому

      @@ExcelMacroMania thanks mine is a bit different my assignment is, I have been given a bunch of data with errors and one error is that in the branch of data there are blanks in a particular column( there are 4 columns in all) , so I'm to create a sub to filter those blanks in the column and cut and paste those blanks with their respective data in other columns in another sheet
      I tried using yours that is replacing the copy with cut but there is an error which says " this can't be done on multiple range selection.
      Please help me

    • @ExcelMacroMania
      @ExcelMacroMania  9 місяців тому

      @@opaddie Oh, for that check out this other video: Delete Blank Rows ua-cam.com/video/sSoXeCmbP_A/v-deo.htmlsi=UiiaTsUJHdpbqP60
      You need to combine the 2 macros and no need to filter I guess. Here's an example to cut rows with blanks in columns A:
      totalRows = Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row
      Sheets.Add 'if you don't have yet a second sheet
      For r = 1 To totalRows
      If Sheets(1).Range("A" & r).Value = "" Then
      lr = Sheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row
      Sheets(1).Rows(r).Cut Sheets(2).Rows(lr + 1)
      End If
      Next r
      where Sheets(1) is the main sheet with data, and Sheets(2) is the other sheet where you paste the rows with blanks (in column A)

    • @opaddie
      @opaddie 9 місяців тому

      @@ExcelMacroMania please sheets (2).rows(ir + 1) gives me an error

    • @ExcelMacroMania
      @ExcelMacroMania  9 місяців тому

      It could give error because you don't have 2 sheets, ... or because the row to cut is empty - in case those rows are empty it makes no sense to copy or cut and paste, just delete. But if some rows have content and other don't ... then you probably need other macro, or just add "On Error Resume Next" at the beginning to skip the error.

  • @justengineer6276
    @justengineer6276 2 роки тому +2

    Hi , unfortuantely didn't work for me using this routine:
    Sub CopyFilteredDataToNewSheets()
    Dim r As Integer, SUPERVISOR As String
    With Worksheets("BILLS_2021")
    .Range("A1:AD1").AutoFilter
    For r = 2 To 22428
    SUPERVISOR = Sheets("BILLS_2021").Range("I" & r).Value
    On Error Resume Next
    If Sheets(SUPERVISOR) Is Nothing Then
    .Range("A1:AD1").AutoFilter Field:=1, Criteria1:=SUPERVISOR
    .Range("I1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
    Sheets.Add.Name = SUPERVISOR
    Sheets(SUPERVISOR).Paste
    .ShowAllData
    End If
    Next r
    End With
    End Sub

    • @justengineer6276
      @justengineer6276 2 роки тому

      There should have been a 20 sub sheets interms of supervisor.

    • @ExcelMacroMania
      @ExcelMacroMania  2 роки тому

      I believe you should filter by SUPERVISOR in column I? That would be Field 9, not 1. Unless you also have the Supervisor in column A.

    • @justengineer6276
      @justengineer6276 2 роки тому

      @@ExcelMacroMania .Range("A1:AD1").AutoFilter Field:=9, Criteria1:=SUPERVISOR ... THANKS , I did the required rectification, but no output ?

    • @ExcelMacroMania
      @ExcelMacroMania  2 роки тому +1

      @@justengineer6276 Don't know where's the issue then. Check this other video and try to use some of those tools to debug your code: ua-cam.com/video/Rg-gXg8MYKc/v-deo.html

    • @laisonkc
      @laisonkc 2 роки тому +1

      @@justengineer6276 use criteria 9 instead of 1. Then check
      Criteria 9= supervisor