[AccessD] Exporting Access to Excel - How to "SUM" a column with a variable number of rows?

Mark Simms marksimms at verizon.net
Tue Jul 26 10:20:21 CDT 2011


Bill - look again. I am only looping thru EACH COLUMN...and I AM using
Application.SUM.

I just came from an investment bank where some workbooks would take 20 to 40
MINUTES to complete.
Reason: formula-based SUMS, VLOOKUPS, and SUMIFS.
VLOOKUPs themselves were horribly inefficient. Even MATCH replacements did
not improve performance.

When replaced with VBA "static" counterparts, the calc time would decrease
90% in many cases.

> -----Original Message-----
> From: William Benson (VBACreations.Com) [mailto:vbacreations at gmail.com]
> Sent: Monday, July 25, 2011 9:03 PM
> To: 'Mark Simms'
> Subject: FW: [AccessD] Exporting Access to Excel - How to "SUM" a
> column with a variable number of rows?
>
> Mark,
>
> I have programmed in Excel for about 8 years and would not recommend
> this
> approach, but did not want to say so on the ListServ. Perhaps there is
> a
> reason you would loop through each cell to build a sum instead of using
> Excel's marvelous (and instantaneous!) SUM worksheetfunction --
> available to
> the application object?
>
> If you are looping through cells for the purpose of examining them
> prior to
> adding them, I don't say that is a bad idea - but for a standard
> summation,
> you would want to use Application.SUM.
>
> Warm regards,
>
> Bill
>
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Mark Simms
> Sent: Monday, July 25, 2011 8:03 PM
> To: 'Access Developers discussion and problem solving'
> Subject: Re: [AccessD] Exporting Access to Excel - How to "SUM" a
> column
> with a variable number of rows?
>
> What you need to decide is: dynamic vs. static.
> If the data is not going to change, then try this:
>
> Sub AddTotals
>
> Dim rngCol as Range
>
> With Activesheet.UsedRange
>
> For Each rngCol in .Columns
>   rngCol.Cells(.rows.Count+1) = Application.Sum(rngCol)
> Next
>
> End With
>
> End Sub
>
> Of course this assumes the starting row is #1.
>
> > -----Original Message-----
> > From: accessd-bounces at databaseadvisors.com [mailto:accessd-
> > bounces at databaseadvisors.com] On Behalf Of Brad Marks
> > Sent: Monday, July 25, 2011 4:52 PM
> > To: Access Developers discussion and problem solving
> > Subject: Re: [AccessD] Exporting Access to Excel - How to "SUM" a
> > column with a variable number of rows?
> >
> > William and Lambert,
> >
> > Thanks for the help, I appreciate it.
> >
> > One of the things that I often struggle with is that there is often
> > more than one way to accomplish a task.  Before I start to build
> > something big, I like to understand the options and also understand
> the
> > "Best" way to get something done.
> >
> > Thanks Again,
> > Brad
> >
> >
> > -----Original Message-----
> > From: accessd-bounces at databaseadvisors.com on behalf of Heenan,
> Lambert
> > Sent: Mon 7/25/2011 1:31 PM
> > To: Access Developers discussion and problem solving
> > Subject: Re: [AccessD] Exporting Access to Excel - How to "SUM" a
> > column with a	variable number of rows?
> >
> > The way I do this is after exporting the results of a query to Excel
> I
> > then run a Dcount() against the same query to discover how many rows
> > were in the output data....
> >
> > nRows = DCount("*", "Some_Query_Name")
> >
> > Then I open the Excel file with Access (i.e. I set an
> > Excell.Application and Excel.Worksheet object) so that I can then add
> > the formulas that I need to the row under the last row of exported
> > data.
> >
> > Essentially you build the formula in a text variable like this...
> >
> > strFormula = "=Sum(" & Excel_Column(nCol) & nRowOffest - nRowsToSum &
> > ":" & Excel_Column(nCol) & nRowOffest - 1 & ")"
> >
> > Where nRowOffest is the row number to start summing (or averaging or
> > counting, whatever) and nRowsToSum is the number of row in the
> output.
> > The function Excel_Column is used to get the right alpha prefix in
> the
> > cells address...
> >
> > Function Excel_Column(nCol As Long) As String ' given a valid column
> > number return the Alpha name for it ' else return an empty string
> >     If nCol > 256 Then ' Pre Excel 2007
> >         Excel_Column = ""
> >     Else
> >         If nCol <= 26 Then
> >             Excel_Column = Chr(Asc("A") + nCol - 1)
> >         Else
> >             Dim sSecond As String
> >             sSecond = Excel_Column(nCol Mod 26)
> >             Excel_Column = Excel_Column(nCol \ 26) & sSecond
> >         End If
> >     End If
> > End Function
> >
> > Then, after building the text string with the formula just plug it
> into
> > the relevant cell in the workbook.
> >
> > After setting the Excel.Application object you then need a reference
> to
> > the worksheet that needs to be update...
> >
> > Set Ws = xlApp.Sheets(nSheet)
> > With Ws
> > 	strCellAddress = Excel_Column(nCol) & nRowOffest
> > 	strFormula = "=Sum(" & Excel_Column(nCol) & nRowOffest -
> > nRowsToSum & ":" & Excel_Column(nCol) & nRowOffest - 1 & ")"
> > 	.Cells(nRowOffest, nCol) = strFormula
> > End With
> >
> >
> > HTH
> >
> > Lambert
> >
> > -----Original Message-----
> > From: accessd-bounces at databaseadvisors.com [mailto:accessd-
> > bounces at databaseadvisors.com] On Behalf Of Brad Marks
> > Sent: Monday, July 25, 2011 1:54 PM
> > To: Access Developers discussion and problem solving
> > Subject: [AccessD] Exporting Access to Excel - How to "SUM" a column
> > with a variable number of rows?
> >
> > I am starting to do some experiments involving the creation of Excel
> > files from Access.
> >
> > Let's say that I have an Access Recordset that can contain anywhere
> > from 100 to 1,000 records.
> >
> > I have a little Access application that currently pushes this data
> into
> > Excel.  This all works nicely.
> >
> > What is the best way to "Sum" a column in Excel after the last
> record,
> > when the number of records can vary?
> >
> > Thanks,
> > Brad
> >
> > --
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > http://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
> >
> > --
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > http://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
> >
> > --
> > This message has been scanned for viruses and dangerous content by
> > MailScanner, and is believed to be clean.
> >
> >
>
>
>
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com





More information about the AccessD mailing list