Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 38
Default Locating a value anywhere in a row and copying that row to new she

I have a multi-column worksheet that I need to search for a particular
string, which could appear in any column (and possibly in more than one
column) in a row. When I find that string, I want to copy the entire row to
the next empty row on a separate worksheet.

However, if the value appears more than once in a row, I only want one copy.

I have a number of have-way-there solutions but nothing is doing the job
properly. Has anyone any suggestions please?

Many thanks!
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 34
Default Locating a value anywhere in a row and copying that row to new she

Sue-

If you focus on rows that contain the string rather than columns, the
problem becomes easier to deal with. You esentially are looking for any row
that has one or more instances of your string. If you set up your procedure
loop through the data to seach for the string on one row at a time, you can
quickly ascertain whether the row needs to be copied or not. If it contains
the string, copy it and move to the next row. If it doesn't contain the
string, simply move on to the next row.

I hope this helps

Stan Shoemaker
Palo Alto, CA


"SueJB" wrote:

I have a multi-column worksheet that I need to search for a particular
string, which could appear in any column (and possibly in more than one
column) in a row. When I find that string, I want to copy the entire row to
the next empty row on a separate worksheet.

However, if the value appears more than once in a row, I only want one copy.

I have a number of have-way-there solutions but nothing is doing the job
properly. Has anyone any suggestions please?

Many thanks!

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 38
Default Locating a value anywhere in a row and copying that row to new

Hi Stan

Thanks for this - in fact, I have got this loop working and it will identify
any row that contains the string, in any of that row's columns.
Unfortunately it doesn't do much else!

Do you have any suggestions on how to pass the identifier for that row to a
copy routine?

Sue

"stanshoe" wrote:

Sue-

If you focus on rows that contain the string rather than columns, the
problem becomes easier to deal with. You esentially are looking for any row
that has one or more instances of your string. If you set up your procedure
loop through the data to seach for the string on one row at a time, you can
quickly ascertain whether the row needs to be copied or not. If it contains
the string, copy it and move to the next row. If it doesn't contain the
string, simply move on to the next row.

I hope this helps

Stan Shoemaker
Palo Alto, CA


"SueJB" wrote:

I have a multi-column worksheet that I need to search for a particular
string, which could appear in any column (and possibly in more than one
column) in a row. When I find that string, I want to copy the entire row to
the next empty row on a separate worksheet.

However, if the value appears more than once in a row, I only want one copy.

I have a number of have-way-there solutions but nothing is doing the job
properly. Has anyone any suggestions please?

Many thanks!

  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 34
Default Locating a value anywhere in a row and copying that row to new

Once you have identifed the row, you can use the copy method to copy it.
Exactly what you want to copy (Rows(r).Copy, Activecell.EntireRow.Copy, etc.)
depends on how you are looping through the rows.

Here is some code looks for a "String" in the rows selected before the
procedure is run. The macro assumes that the data to be tested is on the
sheet "SourceSheet" and that you want to move it to the sheet
"DestinationSheet".

Sub find_copyRows()
'this procedure assumes the "SourceSheet" is the active worksheet and
'the cells (rows) to be searched have been selected before the macro is
run.

Dim firstrow As Integer
Dim lastrow As Integer

firstrow = ActiveCell.Row
lastrow = firstrow + Selection.Rows.count - 1

For r = firstrow To lastrow
Set c = Rows(r).Find("String")
If Not c Is Nothing Then
Rows(r).Copy
Sheets("DestinationSheet").Activate
Range("A65000").End(xlUp).Offset(1, 0).PasteSpecial
(xlPasteAll)
Sheets("SourceSheet").Activate
End If
Next r

End Sub

Stan Shoemaker
Palo Alto, CA

End Sub
"SueJB" wrote:

Hi Stan

Thanks for this - in fact, I have got this loop working and it will identify
any row that contains the string, in any of that row's columns.
Unfortunately it doesn't do much else!

Do you have any suggestions on how to pass the identifier for that row to a
copy routine?

Sue

"stanshoe" wrote:

Sue-

If you focus on rows that contain the string rather than columns, the
problem becomes easier to deal with. You esentially are looking for any row
that has one or more instances of your string. If you set up your procedure
loop through the data to seach for the string on one row at a time, you can
quickly ascertain whether the row needs to be copied or not. If it contains
the string, copy it and move to the next row. If it doesn't contain the
string, simply move on to the next row.

I hope this helps

Stan Shoemaker
Palo Alto, CA


"SueJB" wrote:

I have a multi-column worksheet that I need to search for a particular
string, which could appear in any column (and possibly in more than one
column) in a row. When I find that string, I want to copy the entire row to
the next empty row on a separate worksheet.

However, if the value appears more than once in a row, I only want one copy.

I have a number of have-way-there solutions but nothing is doing the job
properly. Has anyone any suggestions please?

Many thanks!

  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 38
Default Locating a value anywhere in a row and copying that row to new

Hello again Stan

Many thanks for this, it's really helpful and does what I hoped.

If you don't mind, can you - or anyone else - help with another problem on
this?

I would like this sub to work without the user selecting the range manually
(ie using the UsedRange property of the active sheet). I have the following
code:

firstRow = ActiveSheet.UsedRange.Cells(1).row
lastRow = ActiveSheet.UsedRange.Rows.Count + firstRow - 1

but it returns a Runtime Error '6' - overflow - which seems to refer to the
second line of the code.

Any pointers most welcomed - as you may have guessed, I'm very new to VBA
programming!

Sue

"stanshoe" wrote:

Once you have identifed the row, you can use the copy method to copy it.
Exactly what you want to copy (Rows(r).Copy, Activecell.EntireRow.Copy, etc.)
depends on how you are looping through the rows.

Here is some code looks for a "String" in the rows selected before the
procedure is run. The macro assumes that the data to be tested is on the
sheet "SourceSheet" and that you want to move it to the sheet
"DestinationSheet".

Sub find_copyRows()
'this procedure assumes the "SourceSheet" is the active worksheet and
'the cells (rows) to be searched have been selected before the macro is
run.

Dim firstrow As Integer
Dim lastrow As Integer

firstrow = ActiveCell.Row
lastrow = firstrow + Selection.Rows.count - 1

For r = firstrow To lastrow
Set c = Rows(r).Find("String")
If Not c Is Nothing Then
Rows(r).Copy
Sheets("DestinationSheet").Activate
Range("A65000").End(xlUp).Offset(1, 0).PasteSpecial
(xlPasteAll)
Sheets("SourceSheet").Activate
End If
Next r

End Sub

Stan Shoemaker
Palo Alto, CA

End Sub
"SueJB" wrote:

Hi Stan

Thanks for this - in fact, I have got this loop working and it will identify
any row that contains the string, in any of that row's columns.
Unfortunately it doesn't do much else!

Do you have any suggestions on how to pass the identifier for that row to a
copy routine?

Sue

"stanshoe" wrote:

Sue-

If you focus on rows that contain the string rather than columns, the
problem becomes easier to deal with. You esentially are looking for any row
that has one or more instances of your string. If you set up your procedure
loop through the data to seach for the string on one row at a time, you can
quickly ascertain whether the row needs to be copied or not. If it contains
the string, copy it and move to the next row. If it doesn't contain the
string, simply move on to the next row.

I hope this helps

Stan Shoemaker
Palo Alto, CA


"SueJB" wrote:

I have a multi-column worksheet that I need to search for a particular
string, which could appear in any column (and possibly in more than one
column) in a row. When I find that string, I want to copy the entire row to
the next empty row on a separate worksheet.

However, if the value appears more than once in a row, I only want one copy.

I have a number of have-way-there solutions but nothing is doing the job
properly. Has anyone any suggestions please?

Many thanks!



  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 34
Default Locating a value anywhere in a row and copying that row to new

Sue-

There is another property called "CurrentRegion" that I find most useful if
the data set has no enitirely blank rows or columns in the data set.
CurrentRegion is the range bounded by any combination of blank rows and blank
columns. If you data is in rows 1 to 100 starting in Column A and row 51 is
blank, Range("A1").CurrentRegion.Select will return a range of cells from Row
1 to Row 50. If Row 51 is not blank, you will get all of the rows between 1
and 100.

Assuming your data starts in Cell A1, you could use the following code to
automatically select your range:

Range("A1").CurrentRegion.Select

firstRow = ActiveCell.row
lastRow = firstRow + Selection.Rows.count - 1

Alternatively, if you data allways starts in row 1, but there are blank rows
in the middle, you could establish the last row by selecting a cell at the
bottom of the worksheet and using the "End(xlUp)" up method to locate the
last row. In this situation you could use code like:

firstRow = 1
lastRow = Range("A60000").End(xlUp).Row

Stan Shoemaker
Palo Alto, CA

"SueJB" wrote:

Hello again Stan

Many thanks for this, it's really helpful and does what I hoped.

If you don't mind, can you - or anyone else - help with another problem on
this?

I would like this sub to work without the user selecting the range manually
(ie using the UsedRange property of the active sheet). I have the following
code:

firstRow = ActiveSheet.UsedRange.Cells(1).row
lastRow = ActiveSheet.UsedRange.Rows.Count + firstRow - 1

but it returns a Runtime Error '6' - overflow - which seems to refer to the
second line of the code.

Any pointers most welcomed - as you may have guessed, I'm very new to VBA
programming!

Sue

"stanshoe" wrote:

Once you have identifed the row, you can use the copy method to copy it.
Exactly what you want to copy (Rows(r).Copy, Activecell.EntireRow.Copy, etc.)
depends on how you are looping through the rows.

Here is some code looks for a "String" in the rows selected before the
procedure is run. The macro assumes that the data to be tested is on the
sheet "SourceSheet" and that you want to move it to the sheet
"DestinationSheet".

Sub find_copyRows()
'this procedure assumes the "SourceSheet" is the active worksheet and
'the cells (rows) to be searched have been selected before the macro is
run.

Dim firstrow As Integer
Dim lastrow As Integer

firstrow = ActiveCell.Row
lastrow = firstrow + Selection.Rows.count - 1

For r = firstrow To lastrow
Set c = Rows(r).Find("String")
If Not c Is Nothing Then
Rows(r).Copy
Sheets("DestinationSheet").Activate
Range("A65000").End(xlUp).Offset(1, 0).PasteSpecial
(xlPasteAll)
Sheets("SourceSheet").Activate
End If
Next r

End Sub

Stan Shoemaker
Palo Alto, CA

End Sub
"SueJB" wrote:

Hi Stan

Thanks for this - in fact, I have got this loop working and it will identify
any row that contains the string, in any of that row's columns.
Unfortunately it doesn't do much else!

Do you have any suggestions on how to pass the identifier for that row to a
copy routine?

Sue

"stanshoe" wrote:

Sue-

If you focus on rows that contain the string rather than columns, the
problem becomes easier to deal with. You esentially are looking for any row
that has one or more instances of your string. If you set up your procedure
loop through the data to seach for the string on one row at a time, you can
quickly ascertain whether the row needs to be copied or not. If it contains
the string, copy it and move to the next row. If it doesn't contain the
string, simply move on to the next row.

I hope this helps

Stan Shoemaker
Palo Alto, CA


"SueJB" wrote:

I have a multi-column worksheet that I need to search for a particular
string, which could appear in any column (and possibly in more than one
column) in a row. When I find that string, I want to copy the entire row to
the next empty row on a separate worksheet.

However, if the value appears more than once in a row, I only want one copy.

I have a number of have-way-there solutions but nothing is doing the job
properly. Has anyone any suggestions please?

Many thanks!

  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 38
Default Locating a value anywhere in a row and copying that row to new

Stan

Very many thanks - that should solve my problem beautifully and has taught
me a lot too.

Best wishes
Sue

"stanshoe" wrote:

Sue-

There is another property called "CurrentRegion" that I find most useful if
the data set has no enitirely blank rows or columns in the data set.
CurrentRegion is the range bounded by any combination of blank rows and blank
columns. If you data is in rows 1 to 100 starting in Column A and row 51 is
blank, Range("A1").CurrentRegion.Select will return a range of cells from Row
1 to Row 50. If Row 51 is not blank, you will get all of the rows between 1
and 100.

Assuming your data starts in Cell A1, you could use the following code to
automatically select your range:

Range("A1").CurrentRegion.Select

firstRow = ActiveCell.row
lastRow = firstRow + Selection.Rows.count - 1

Alternatively, if you data allways starts in row 1, but there are blank rows
in the middle, you could establish the last row by selecting a cell at the
bottom of the worksheet and using the "End(xlUp)" up method to locate the
last row. In this situation you could use code like:

firstRow = 1
lastRow = Range("A60000").End(xlUp).Row

Stan Shoemaker
Palo Alto, CA

"SueJB" wrote:

Hello again Stan

Many thanks for this, it's really helpful and does what I hoped.

If you don't mind, can you - or anyone else - help with another problem on
this?

I would like this sub to work without the user selecting the range manually
(ie using the UsedRange property of the active sheet). I have the following
code:

firstRow = ActiveSheet.UsedRange.Cells(1).row
lastRow = ActiveSheet.UsedRange.Rows.Count + firstRow - 1

but it returns a Runtime Error '6' - overflow - which seems to refer to the
second line of the code.

Any pointers most welcomed - as you may have guessed, I'm very new to VBA
programming!

Sue

"stanshoe" wrote:

Once you have identifed the row, you can use the copy method to copy it.
Exactly what you want to copy (Rows(r).Copy, Activecell.EntireRow.Copy, etc.)
depends on how you are looping through the rows.

Here is some code looks for a "String" in the rows selected before the
procedure is run. The macro assumes that the data to be tested is on the
sheet "SourceSheet" and that you want to move it to the sheet
"DestinationSheet".

Sub find_copyRows()
'this procedure assumes the "SourceSheet" is the active worksheet and
'the cells (rows) to be searched have been selected before the macro is
run.

Dim firstrow As Integer
Dim lastrow As Integer

firstrow = ActiveCell.Row
lastrow = firstrow + Selection.Rows.count - 1

For r = firstrow To lastrow
Set c = Rows(r).Find("String")
If Not c Is Nothing Then
Rows(r).Copy
Sheets("DestinationSheet").Activate
Range("A65000").End(xlUp).Offset(1, 0).PasteSpecial
(xlPasteAll)
Sheets("SourceSheet").Activate
End If
Next r

End Sub

Stan Shoemaker
Palo Alto, CA

End Sub
"SueJB" wrote:

Hi Stan

Thanks for this - in fact, I have got this loop working and it will identify
any row that contains the string, in any of that row's columns.
Unfortunately it doesn't do much else!

Do you have any suggestions on how to pass the identifier for that row to a
copy routine?

Sue

"stanshoe" wrote:

Sue-

If you focus on rows that contain the string rather than columns, the
problem becomes easier to deal with. You esentially are looking for any row
that has one or more instances of your string. If you set up your procedure
loop through the data to seach for the string on one row at a time, you can
quickly ascertain whether the row needs to be copied or not. If it contains
the string, copy it and move to the next row. If it doesn't contain the
string, simply move on to the next row.

I hope this helps

Stan Shoemaker
Palo Alto, CA


"SueJB" wrote:

I have a multi-column worksheet that I need to search for a particular
string, which could appear in any column (and possibly in more than one
column) in a row. When I find that string, I want to copy the entire row to
the next empty row on a separate worksheet.

However, if the value appears more than once in a row, I only want one copy.

I have a number of have-way-there solutions but nothing is doing the job
properly. Has anyone any suggestions please?

Many thanks!

Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Locating Under Payments (HELP!) Raul Aguilar Excel Discussion (Misc queries) 0 March 16th 08 06:30 AM
Locating Karmen New Users to Excel 2 January 30th 06 11:45 PM
locating the top 5 number (in a col) owl527 Excel Worksheet Functions 1 January 10th 06 01:35 PM
Dynamically locating value; selecting that row and everything above (or below) and deleting/copying Steven Rosenberg[_2_] Excel Programming 14 February 29th 04 11:10 PM
locating charts Scott Parsons Excel Programming 0 November 11th 03 08:03 PM


All times are GMT +1. The time now is 06:54 PM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"