VBA - Select Filtered Rows Then Copy All But Header Row
Feb 12, 2014
I want to filter my dataset, select column B & C to copy, but exclude the header row. I am having a hard time offsetting the selected range. I get a compile error on what I try.Here is my code (yes, I know, its a little juvenile and I will clean it up, but I need to see things clearer at first):
Trying to paste filtered results except header row. My code below pastes the header row for "Details" 2x. I tried altering the row to row 2, but that caused incorrect results to be returned.
Detail - Sales First I filter the data range for " Total Sales" Paste the results with header row to wsDetails
Details - Details Then filter the data again for "N" I would like to paste these results to wsDetails w/o the header
Option Explicit Sub comp_pl_ytd_Totals() Dim wbBook As Workbook Dim wsData As Worksheet Dim wsTotals As Worksheet Dim wsDetails As Worksheet Dim wsExtract As Worksheet Dim rngData As Range Dim rngCrit As Range Dim rngDest As Range Dim arrCrit Dim myRange As Range Dim C As Range Dim lngrows As Long Dim strFormula As String Dim rngCase As Range With Application . ScreenUpdating = False .DisplayAlerts = False .Calculation = xlCalculationManual End With................
I have filtered data on Sheet1, which I need just columns A, B & C combined and placed on Sheet2. The below code works, but its defined to copy all rows. I'm unsure of what syntax to use for the loop to copy just the filtered data. Also is there a way to "cycle" through the filters? Example Autofilter "1984" copy ABC to Sheet 2, then AutoFilter "1985" copy to sheet 2 and so on?
For Each Cell In Sheets("sheet1").Range("A:A") If Cell.Value <> Empty Then i = i + 1 b = Cell.Offset(0, 0).Value & ", " & Cell.Offset(0, 1).Value & " " & Cell.Offset(0, 2).Value Sheets("sheet2").Range("A1").Offset(i - 1, 0) = b End If Next Cell
I'm trying to copy a whole bunch of tables with identical layout to a master table, so I can create a whole bunch of pivot tables that include data from ALL the various tables. The source tables MAY be filtered, and I can't work out how to copy them easily while also INCLUDING any hidden/filtered rows while at the same time leaving any filter settings on the source tables intact.
If I use something like range("Table1").Listobject.DataBodyRange.Copy then it only copies the VISIBLE rows.
But I want ALL rows to be copied to a master table.
1. I don't want to unfilter the sources tables, because users might still want the source tables to remain exactly as the user filtered them. (However, it doesn't matter if the DESTINATION list is filtered or not). I realise that I could copy the entire sheet to a temp sheet, then unfilter any tables on that sheet and THEN copy these to the master list. But wan't to know if there's a simpler way.
2. I DON'T want to use SQL to create a pivot table directly from the tables, because the tables will have further information added to them from time to time, and so if I use SQL to make a pivot directly from them, I'll have to recreate the pivot cache using that SQL query each time, which might muck up the settings in any existing pivot tables. I realise that I could use SQL to copy the data to a 'staging area', and just point the pivot table at that.
3. I can't use PowerPivot, because its not installed in this environment.
I have a spreadsheet and I was wondering if there is a way to copy from a specific range in say A1:A5 in Sheet1 and paste into Sheet2 where the column matches cell A1 in Sheet1.
I am trying to do this in VBA and I was wondering if there is a way to do this.
I need code that will look for a number in cell C1 and then it starts at C9 selecting cells to copy until it sees a cell with a number larger than what is in C1 and stops.
i need code for this since the number in C1 is always changing
Example: if there is an 18 in C1 it selects all cells that are >0 and <19
these cells are always sorted 123456........36 they are not random in order like 1 17 6 12 18 4 3
I'm trying to create a macro that will allow the user to select a range of cells, (in column V in the attached sample), and then insert a new worksheet and copy the entire row where the user selected the cells to that worksheet.
For example: (I've deleted most of the data from the sample). The user want to create an order that has an exteded cube of 300 feet. By holding the "Ctrl" key down, they could pick and choose the parts they want to add, until the sum in Excel shows nearly 300.00 extended cube. They would then run the macro, which would copy only the rows which the user has selected in column V to the new worksheet.
I have some selected cells in column A, they are not consecutive. I would like to copy these values and then copy the same area but from a different column...
The code I have here is only working when I have a consecutive selection.
Code: Set rng = Selection fr = rng.Cells(1, 1).Row lr = rng(rng.Count).Row rng.Copy
I have a workbook made up of 10 worksheets or so. Each of the rows in each worksheet includes the age of a case in column H. I want to copy the rows that show a case that is over 90 days of age, I then want to paste these into another worksheet. I want to do this for each of the ten worksheets.
Ok I recently ran into something in Excel that was completely unexpected. When I filter data, and select multiple rows of data, and copy and paste it.... it pastes the unfiltered rows as hidden rows! Is there a way around this without copying row by row?
I have about 6000 rows of data in column A:G and growing
Column A is the key where i filter between a lot of duplicates
If i filter on X100000 there is about 432 elements (rows) if i filter on Y100100 there is only 43 elements (rows)
The problem is i only want to copy the last up to 90 element to another sheet. I can copy all 432 rows to a second sheet and then copy last up to 90 rows thats what im doing now. And i am familiar with
I have a spreadsheet which contains a list of chemicals in Column A, and a list of numbers in Column B. The chemicals are separated into groups. I am trying to create a macro which sorts the chemicals in their groups by column B, so that the lowest number is at the top. I have 8 groups, and the number of lines in each group may vary, so I need to make the code dynamic.
I have attempted it. The way I thought it could be done was to search for the first group header, then save the address. Do the same for the next group header, then offset that by -1 row and 1 column, then sort using these two addresses as the range. The first part of the code works, where I find the address for both group headers, but everything after that doesn't work.
Sub Sort() Dim CNMT(8) As String Dim j As Integer Dim fromRow As String Dim toRow As String Dim rng1 As Range Dim rng2 As Range CNMT(1) = "TPH Fractions" CNMT(2) = "BTEX & MTBE" CNMT(3) = "PAHs" CNMT(4) = "VOCs" CNMT(5) = "SVOCs" CNMT(6) = "Metals" CNMT(7) = "Inorganics" CNMT(8) = "Pesticides" For j = 1 To 8..................
How would a code look like to select a range with a column header on top. in the code you provided, it selected the entire W column. How would you select the range given that the W column was called Address?
I need a code that will copy the format AND formulas of the entire row that I have selected (or activatedwith my cursor) to each and every blank row - until it gets to the last row of data on this spreadsheet.Since any employee could have more than 1 row of data - I am using a code that inserts1 blank row after each NEW employee name.
NOTE: This report is initially sorted by employee name so that each occurrence is grouped together.REPORT SPECIFICS:1) This report reflects typical paryoll information.2) Certain columns have data that is either in text, general, or number ($) format3) The number of columns may vary depending on which PR report is being worked4) For the sake of simplicity - we can assume that the column titles will always be across row 15) Each employee name on this report may repeat several times depending on how many weeks they worked,so the SUM() formula should adjust automatically to capture all the rows of data to add up for each employee
HERE IS MY CODE TO INSERT 1 ROW Sub InsertRowAtNewNameONE()Dim LR As Long, i As LongLR = Range("C" & Rows.Count).End(xlUp).RowFor i = LR To 2 Step -1If Range("C" & i).Value Range("C" & i - 1).Value Then Rows(i).InsertNext iEnd Sub
NOTE: See below: I will format and add formulas where I need on the 1st blank row that was createdand I need a code that will copy this particular row to all blank rows to the last.
How we can select specific cells in the filtered data using VBA in Excel 2010.
I need to select 10th column, 5th row data .. or 10th column, 6th row data .. or 13th column, 8th row data...
How to select this data using VBA.. I am struck here .. If I give the below code.. the hidden cells inbetween the filtered data is getting selected.. only the first row is getting selected correctly.. i.e, ..rnVisible(1, 2).Select .. If I change the row like rnVisible(2, 12).Select its selecting the hidden cells ..
Dim rnVisible As Range Set rnVisible = ActiveSheet.Rows("2:10000").SpecialCells(xlCellTypeVisible) rnVisible(2, 12).Select MsgBox ActiveCell.Address
The following sub will look in the file ("FY09 SOF"), in column "A", search for the strings that begin with "2109", "3009", or ends in "-1", and copy the entire row. It will then paste these in the file ("FY09 PR Log Blank").
I have found that in the file ("FY09 SOF"), if things are filtered in any row, it will not copy those necessary items.
The data filter is on row 13 of each sheet. Is there a way of fixing this? (i.e. having the macros select "all" on the filter before copying the sheet? There are 60 sheets so a macros will be necessary.
Sub get_data() Dim wb As Workbook, wbDest As Workbook Dim ws As Worksheet, wsDest As Worksheet Dim lngCalc As Long Dim FoundCells As Range Dim FoundCell As Range
Set wb = Workbooks("FY09 SOF") Set wbDest = Workbooks("FY09 PR Log Blank") Set wsDest = wbDest.Worksheets("Paste all here, then sort")
With Application .ScreenUpdating = False lngCalc = .Calculation .Calculation = xlCalculationManual End With For Each ws In wb.Worksheets.............................
I have recorded a macro which deletes the visible rows after an auto filter is run - ( auto filter is for custom and blanks).
I thought this was working, but when i look at the code, it looks as if the rows to delete have been hard coded in, and not adapting to just delete the filtered ones.
I am working on solving a problem where I get every other row deleted instead of every row. The situation is that I am using Autofilter to find empty cells in a column that shouldn't have empty cells. Before I can delete them, I need to add them to an array for exceptions handling. This means I need to step through the filtered range and record each unique ID for followup, then delete them. If I delete as I go, the "For Each" doesn't work on the original rows, but works on an increment. This means a deleted row causes the range to shift up one, and I end up deleting every other row.
I know I can solve this by deleting separately from recording them, but am searching for a way to work with the "For Each" maybe using a "Step -1" or something similar.
I have a code that copies Sheet1 and send it via email. Everything works fine, besides that I can't get the header copied in the file that is going to be sent. I am attaching a sample workbook.
I have a 5000 line table I am filtering by a few columns, and I'd like to calculate an exponential trendline value.
=INDEX(LINEST(LN(R1059:R1167),W1059:W1167),1)
But I actually don't want all the values from R1059 to R1167 - I want to select only the displayed values (R1059, R1068, R1077, etc). Is there a way to select only display values to use in a formula? The problem is it would be a lot of manual work to select them all - there are 50 or so instances I would have to select 13 manual values.
i have issue copying data from a filtered sheet to another sheet. i only want to copy visible cells....ie when there is no data or data after filtering i have: selection. currentregion.copy. this dosent work as when there is no data it still copies my column headings in row A1 across to row r1 and then to next sheet. how do i write code that will only pick up the filtered data starting in first cell...ie after filtering this could be any number. for example i only want to copy data if row 2 and downwards has data
I have the code below which filters and copies columns. My issues is that this filters and copies all data. I would like to filter all this data from another column before running the macro. And for this code to only then filter and copy the already 'manually' filtered data. Does anyone know how I might go about doing this?
Sub sortdescript2() Dim rngData As Range For Each rngData In Range("E4:CR258").Columns rngData.AutoFilter Field:=1, Criteria1:="<>" rngData.Copy rngData.EntireColumn.Cells(263, 1).PasteSpecial xlPasteValues rngData.AutoFilter Next
how I can copy top 15 visible values from a specific column in an autofilter, without actually setting the "top 10" values in the macro for that column. So somehow copy the first 15 cells. The code should fit somehwere in this I guess:
Could I put an extra variable by the .paste so it only pastes 15 values. Perhaps behind the copy??? I've tried to put .Cells(15) but that doesn't work either, which is a pitty. I'm clueless here, and couldn't find anything regarding this (without using fixed ranges, ...)
I imported data into Excel. The first row is a header row in A1 it is fine until the next header row in A12, A23, A34 all the way down to many rows. The problem is the header rows are overlap with other data by seperating with couple of spaces. I need a VBA to move a whole header characters to it own row just right after couple spaces. See the attached for more detail.....
Is it possible to copy data that has been filtered on one tab into filtered data on another tab? I've attached an example, i'm trying to copy the values from column C on the 'From' tab to column D on the 'To' tab. I think the data is always going to be an exact fit in terms of the number of cells copied from and to.
I am able to autofilter a sheet to show only rows with a date in Column U but no "x" in Column BC. Now I want to be able to put an "x" in BC in only the filtered rows. The purpose is if someone enters a date in Column U, the macro will show only those rows minus the rows that have already had an "x" added to BC.
For the most part I've gotten this to work using but it will also put an "x" in Column BC, row 3001 on down.
How can I get it to stop at the last row?
Cells.AutoFilter Field:=21, Criteria1:="<>" Cells.AutoFilter Field:=55, Criteria1:="=" Columns(55).SpecialCells(xlCellTypeVisible).Value = "X"
When I add an auto-filter, the above still works fine.
When the auto-filter doesn't reduce the no. rows, the above returns a value of 1.
I've tried using...
count = Rows.SpecialCells(xlCellTypeVisible).Count ... with a result of 1 if no rows are filtered
So, what is the best way to count the populated number of rows on a worksheet where there is an auto-filter that may, or may not, reduce the number of rows ?