Autofil macro

K

Kell2604

Hi Guys,

I need some assistance with a macro. I need the macro to grab some formulas
from a static range of cells (B2 - G2) and paste that formula in a static
range (B4 - G4) and then I need it to autofill to the last empty row (the end
of this range is always changing or else I would use a static end range).
For example, today I might need it to fill all the way to B36 - G36 and
tomorrow I might need it to fill to B77 - G77. The end of the range is
determined by the column immediately preceeding the formulas. In my example
above A36 or A77.

A B C D E F G H
1 x formulas............
2 x fill formulas........
3 x fill formulas........
4
5
6 x end formula fill....
7
8
9
The copy and paste section of the macro is working fine, it's the autofil to
an always changing end row that I'm having trouble with. Hope this makes
sense.

This is what I have been using...maybe I'm not even close...

lRow = Range("AG4").End(xlDown).Row
Range("AH4").AutoFill Destination:=Range("AH4:AM" & lRow)

Thanks as always for your help!!
Kelley
 
D

Don Guillett

spaces??
maybe
'>>lRow = Range("AG4").End(xlDown).Row
lRow = cells(rows.count,"AG4").End(xlUP).Row
 
K

Kell2604

Hello Don,

Thanks for your help. Just to confirm are you suggesting I swap out my
original line lRow = Range("AG4").End(xlDown).Row with what you have below...
lRow = cells(rows.count,"AG4").End(xlUP).Row. I tried that and am getting
the error: application-defined or object-defined error.

Or am I misunderstanding you?
 
G

Greg Snidow

Don, what is the difference between finding the last row as you are doing
here, and doing it like this?

LstRow = [A65000].End(xlUp).Row

Is one method better than the other in certain situations? And if so, why?
Just trying to understand. Thanks

Greg
 
G

Greg Snidow

Don, what is the difference between finding the last row as you are doing
here, lRow = cells(rows.count,"AG4").End(xlUP).Row, and as I usually do, like
this:
LstRow = [F65000].End(xlUp).Row? I see this method all the time, so it is
what I use in all my macros. Are there situations where your method would be
better? And if so, why? Just trying to understand. Thank you.

Greg
 
D

Don Guillett

Should have been
lRow = cells(rows.count,"AG").End(xlUP).Row
Yours only uses 65000 rows which isn't accurate if using xl2007

--
Don Guillett
Microsoft MVP Excel
SalesAid Software
(e-mail address removed)
Greg Snidow said:
Don, what is the difference between finding the last row as you are doing
here, and doing it like this?

LstRow = [A65000].End(xlUp).Row

Is one method better than the other in certain situations? And if so,
why?
Just trying to understand. Thanks

Greg

Don Guillett said:
spaces??
maybe
'>>lRow = Range("AG4").End(xlDown).Row
lRow = cells(rows.count,"AG4").End(xlUP).Row

--
Don Guillett
Microsoft MVP Excel
SalesAid Software
(e-mail address removed)
 
J

JE McGimpsey

For one thing, 65000 is not the last row in a worksheet, even prior to
XL07, so if there were 65535 rows of data, your method would fail while
the first method would work.

Obviously, XL07/08 files have LOTS more than 65000 rows. The first
method will work on either file type.

Second, using the evaluate method as you're doing *can* be slightly more
inefficient than using Cells(). Won't make a jot of difference when run
once, but most people feel it's better coding practice.

Third, it's a lot easier to generalize the Cells() method. Instead of a
constant, the "AG4" part could be calculated, or specified in a
constant, making it much easier to change one calculation (or constant)
and have all Cells() methods adjust, rather than having to search the
project for each instance of "AG".
 
G

Greg Snidow

Sorry for the double posting. The first time I hit 'Post' I got some strange
error message, then my window closed.

Greg Snidow said:
Don, what is the difference between finding the last row as you are doing
here, lRow = cells(rows.count,"AG4").End(xlUP).Row, and as I usually do, like
this:
LstRow = [F65000].End(xlUp).Row? I see this method all the time, so it is
what I use in all my macros. Are there situations where your method would be
better? And if so, why? Just trying to understand. Thank you.

Greg

Don Guillett said:
spaces??
maybe
'>>lRow = Range("AG4").End(xlDown).Row
lRow = cells(rows.count,"AG4").End(xlUP).Row

--
Don Guillett
Microsoft MVP Excel
SalesAid Software
(e-mail address removed)
 
D

Don Guillett

Oops
lRow = cells(rows.count,"AG4").End(xlUP).Row
should be
lRow = cells(rows.count,"AG").End(xlUP).Row
It would only make a difference if your data had blanks in column AG
 
K

Kell2604

Guys...I'm still getting an error.

This formula works great if I'm just trying to autofil 1 column. I seem to
be having trouble with autofilling 5 consecutive columns. I could do it one
by one with my original code but that seems like a lot of unnecessary work.

This is what I have currently...with the updates suggested.
lRow = Cells(Rows.Count, "AG").End(xlUp).Row
Range("AG4").AutoFill Destination:=Range("AG4:AM" & lRow)

New error - AutoFill method of Range class failed.




JE McGimpsey said:
For one thing, 65000 is not the last row in a worksheet, even prior to
XL07, so if there were 65535 rows of data, your method would fail while
the first method would work.

Obviously, XL07/08 files have LOTS more than 65000 rows. The first
method will work on either file type.

Second, using the evaluate method as you're doing *can* be slightly more
inefficient than using Cells(). Won't make a jot of difference when run
once, but most people feel it's better coding practice.

Third, it's a lot easier to generalize the Cells() method. Instead of a
constant, the "AG4" part could be calculated, or specified in a
constant, making it much easier to change one calculation (or constant)
and have all Cells() methods adjust, rather than having to search the
project for each instance of "AG".

Greg Snidow said:
Don, what is the difference between finding the last row as you are doing
here, lRow = cells(rows.count,"AG4").End(xlUP).Row, and as I usually do, like
this:
LstRow = [F65000].End(xlUp).Row? I see this method all the time, so it is
what I use in all my macros. Are there situations where your method would be
better? And if so, why? Just trying to understand. Thank you.
 
G

Greg Snidow

JE, thanks for the tips. I did realize about the number of rows, so I should
have stated that one was known. Anyhow, I have learned something new, so
thank you.

Greg

JE McGimpsey said:
For one thing, 65000 is not the last row in a worksheet, even prior to
XL07, so if there were 65535 rows of data, your method would fail while
the first method would work.

Obviously, XL07/08 files have LOTS more than 65000 rows. The first
method will work on either file type.

Second, using the evaluate method as you're doing *can* be slightly more
inefficient than using Cells(). Won't make a jot of difference when run
once, but most people feel it's better coding practice.

Third, it's a lot easier to generalize the Cells() method. Instead of a
constant, the "AG4" part could be calculated, or specified in a
constant, making it much easier to change one calculation (or constant)
and have all Cells() methods adjust, rather than having to search the
project for each instance of "AG".

Greg Snidow said:
Don, what is the difference between finding the last row as you are doing
here, lRow = cells(rows.count,"AG4").End(xlUP).Row, and as I usually do, like
this:
LstRow = [F65000].End(xlUp).Row? I see this method all the time, so it is
what I use in all my macros. Are there situations where your method would be
better? And if so, why? Just trying to understand. Thank you.
 
G

Gord Dibben

Maybe?

Sub Auto_Fill()
Dim Lrow As Long
With ActiveSheet
Lrow = .Range("AG" & Rows.Count).End(xlUp).Row
.Range("AG4:AM" & Lrow).FillDown
End With
End Sub


Gord Dibben MS Excel MVP

Guys...I'm still getting an error.

This formula works great if I'm just trying to autofil 1 column. I seem to
be having trouble with autofilling 5 consecutive columns. I could do it one
by one with my original code but that seems like a lot of unnecessary work.

This is what I have currently...with the updates suggested.
lRow = Cells(Rows.Count, "AG").End(xlUp).Row
Range("AG4").AutoFill Destination:=Range("AG4:AM" & lRow)

New error - AutoFill method of Range class failed.




JE McGimpsey said:
For one thing, 65000 is not the last row in a worksheet, even prior to
XL07, so if there were 65535 rows of data, your method would fail while
the first method would work.

Obviously, XL07/08 files have LOTS more than 65000 rows. The first
method will work on either file type.

Second, using the evaluate method as you're doing *can* be slightly more
inefficient than using Cells(). Won't make a jot of difference when run
once, but most people feel it's better coding practice.

Third, it's a lot easier to generalize the Cells() method. Instead of a
constant, the "AG4" part could be calculated, or specified in a
constant, making it much easier to change one calculation (or constant)
and have all Cells() methods adjust, rather than having to search the
project for each instance of "AG".

Greg Snidow said:
Don, what is the difference between finding the last row as you are doing
here, lRow = cells(rows.count,"AG4").End(xlUP).Row, and as I usually do, like
this:
LstRow = [F65000].End(xlUp).Row? I see this method all the time, so it is
what I use in all my macros. Are there situations where your method would be
better? And if so, why? Just trying to understand. Thank you.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top