Macro to automatically select the last row of data after refresh

D

diepvic

Hi,
I've got a data excel file which is refreshed everyday. The number of data
rows is varied on each day.
I have a formula " =sum('[Data.xls]Material'!D1:D2000) which links to the
data file. D1 is the first row and D2000 is the last row for 31 May 09, for
example.
Could you please help me how to create a macro to update the formula with
the last row of the data after refreshing the file?

Thanks so much for your attention.
 
J

Jacob Skaria

Try the below

Dim lngLastRow as Long
lngLastRow = ActiveSheet.Cells(Rows.Count, "D").End(xlUp).Row
Range("D" & lngLastRow +1) = _
"=sum('[Data.xls]Material'!D1:D" & lngLastRow & ")"

If this post helps click Yes
 
D

Dave Peterson

If that data.xls workbook is open, you could use:

Option Explicit
Sub testme()
Dim myRng As Range
Dim myCell As Range

With Workbooks("data.xls").Worksheets("Material")
Set myRng = .Range("D1", .Cells(.Rows.Count, "D").End(xlUp))
End With

Set myCell = ActiveSheet.Range("A1") 'where the formula goes

myCell.Formula = "=sum(" & myRng.Address(rowabsolute:=False, _
columnabsolute:=False, _
external:=True) & ")"

End Sub

If the data.xls workbook is closed, you can open it and run this kind of
thing--or maybe you could just change your formula so that it uses the entire
column. (You'll have to include the path in your formula, too.)

Hi,
I've got a data excel file which is refreshed everyday. The number of data
rows is varied on each day.
I have a formula " =sum('[Data.xls]Material'!D1:D2000) which links to the
data file. D1 is the first row and D2000 is the last row for 31 May 09, for
example.
Could you please help me how to create a macro to update the formula with
the last row of the data after refreshing the file?

Thanks so much for your attention.
 
D

diepvic

Wow, thanks so much for your advice, Dave.
Actually, I'm using Office 03, therefore I can not select the entire column
for an Array Formula (whereare with Office 07 it's possible).

Could you please advice me how to create a macro with the same requirement
as above but this time, I would like to find the last column in a row and sum
all the data?

Thanks so much.
 
D

Dave Peterson

The sample you posted was just plain old =sum().

If you don't want to estimate (or overestimate!) the range, you can use the same
technique as the previous post.

Dim LastRow as long
With Workbooks("data.xls").Worksheets("Material")
lastrow = .cells(.rows.count,"D").end(xlup).row
End With

I used column D to determine that last used row. Change it to what you need.

I don't have a guess about what your =sumproduct() formula should look like.
You didn't give much info on that.
 
D

diepvic

Thanks Dave for your reply

Could you pls advise me how to sum the data from the first column to the
last column in the same row?. I can find the last column using this :

Dim lastcol as long
lastcol = ActiveSheet.Cells(1, columns.count).End(xlToRight).Column
'First row'

However, lastcol will turn out to be a Number which I dont know how to use
to indicate a column reference.
Suppose that my sum is
Range("A2") = _
"=sum(A1:" & lastcol & "1)" 'from A1 to lastcol in 1st row'
But that code is incorrect. Could you help me correct that?

Thanks a lot.
 
D

Dave Peterson

range("A2").formula = "=sum(1:1)"
is the simplest.

range("a2").formular1c1 = "=sum(r1c1:r1c" & lastcol & ")"

R3C26

would be Row 3, column 26 (Z3 in A1 reference style).
 
D

diepvic

Thanks so much, Dave

the FormulaR1C1 will result in Absolute Reference. Is there any other way
that gives the Relative Reference?
 
D

Dave Peterson

I'd still use:
=sum(1:1)

dim myRng as range
with activesheet
set myrng = .range("A1",.cells(1,.columns.count).end(xltoleft))
.range("a2").formula = "=sum(" & myrng.address(0,0) & ")"
end with
 

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