View Full Version : Searching Cells for String
Cabble
07-12-2007, 05:05 AM
Hi i have a table of data, where there is going down a series of parameters, and going across various readings for these parameters, now i am trying to format the data and move it into another workbook, and i was wanting to use a for loop to search for a string i.e. parameter name and from this activate code to move certain bits from that parameter row into another a workbook
Dim MyString As String
Dim c As Object
Dim i As Long
MyString = "Leq"
For Each c In Sheets("Original").Range("A1:A65536").Cells
If c = MyString Then i = ActiveCell.Row
Range("D" & i, "N" & i).Select
Selection.Copy
Windows("NA28 Thirds To Table.xls").Activate
Sheets("NA28 Table Oct Summary").Select
Range("O" & i).Select
ActiveSheet.Paste
Windows("mybook").Activate
Next
End Sub
This is what i have at the minute but it doesn't seem to work, i'm not a complete novice programmer but am when it comes to VBA.
thanks in advance, Dan. :)
Bob Phillips
07-12-2007, 05:39 AM
No tested, but try this
Dim MyString As String
Dim c As Range
Dim i As Long
MyString = "Leq"
With Sheets("Original")
For Each c In .Range("A1:A" & .Cells(.Rows.Count, "A").xlUp.Row).Cells
If c = MyString Then i = c.Row
.Range("D" & i, "N" & i).Copy _
Workbooks("NA28 Thirds To Table.xls").Sheets("NA28 Table Oct Summary").Range("O" & i)
End If
Next
End With
End Sub
Cabble
07-12-2007, 06:33 AM
No joy so far, am getting a block if error, also due to the nature of the orignal data there are several blank rows where the end of one test's worth of data ends and the next begins so the code to find the last blank row is redundant. its a rather annoying one this routine.
Ebrow
07-12-2007, 06:38 AM
Sub test()
Dim MyString As String
Dim c
Dim i As Long
MyString = "Leq"
For Each c In Sheet1.UsedRange.Cells
MsgBox c.Address
If c = MyString Then
i = ActiveCell.Row
Range("D" & i, "N" & i).Select
Selection.Copy
Windows("NA28 Thirds To Table.xls").Activate
Sheets("NA28 Table Oct Summary").Select
Range("O" & i).Select
ActiveSheet.Paste
Windows("mybook").Activate
Next
End Sub
Bob Phillips
07-12-2007, 07:06 AM
Sorry, my bad
Dim MyString As String
Dim c As Range
Dim i As Long
MyString = "Leq"
With Sheets("Original")
For Each c In .Range("A1:A" & .Cells(.Rows.Count, "A").xlUp.Row).Cells
If c = MyString Then
i = c.Row
.Range("D" & i, "N" & i).Copy _
Workbooks("NA28 Thirds To Table.xls").Sheets("NA28 Table Oct Summary").Range("O" & i)
End If
Next
End With
End Sub
Cabble
07-12-2007, 07:44 AM
Thanks guys between the two codes i modified my original code and got it to work as such
Dim MyString As String
Dim c
Dim i As Long
MyString = "Leq"
For Each c In Sheets("Original").Range("A1:A65536").Cells
If c = MyString Then
i = c.Row
Range("D" & i, "N" & i).Select
Selection.Copy
Workbook("NA28 Thirds To Table.xls").Sheets("NA28 Table Oct Summary").Range ("O" & i)
ActiveSheet.Paste
Windows("mybook").Activate
End If
Next
End Sub
now i've just got to move the rest of the data, but having got this done, i can use it as a template. :bow:
Ebrow
07-12-2007, 11:04 AM
You should try and use this code in a function if you are doing it over many sheets/different search strings.
Function myParseFindDate (mySheetName as string, myRange as string, mySearchStr as string)
Dim c
Dim i As Long
For Each c In Sheets(mySheetName).Range(myRange).Cells
If c = mySearchStr Then
i = c.Row
Range("D" & i, "N" & i).Select
Selection.Copy
Workbook("NA28 Thirds To Table.xls").Sheets("NA28 Table Oct Summary").Range ("O" & i)
ActiveSheet.Paste
Windows("mybook").Activate
End If
Next
End Function
'Use this sub to test the code.
Sub test
call myParsheFindDate ("Original","A1:A65536","Leq")
End Sub
Ebrow
07-12-2007, 11:06 AM
Sub test
call myParseFindDate ("Original","A1:A65536","Leq")
End Sub
sorry code at end should read like this.
mdmackillop
07-12-2007, 02:31 PM
Rather than looping each cell, it's usually more efficient to Find each value and run the code using the found range
Option Explicit
Sub DoCopy()
Dim MyString As String
Dim c As Range
Dim i As Long
Dim ws As Worksheet
Dim FirstAddress As String
Set ws = Workbooks("NA28 Thirds To Table.xls").Sheets("NA28 Table Oct Summary")
MyString = "Leq"
With Sheets("Original").Columns(1)
Set c = .Find(MyString)
If Not c Is Nothing Then
FirstAddress = c.Address
Do
i = c.Row
Range("D" & i, "N" & i).Copy ws.Range("O" & i)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> FirstAddress
End If
End With
End Sub
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.