Solved

Excel VBA to copy the first formula found to all of the rows in that column

Posted on 2014-11-25
5
181 Views
Last Modified: 2014-11-26
I am trying to create a macro that will find the column that has "Total Fee" as the column heading in row 5.  Go down the column to the first formula (other rows are blank) and copy that formula up and down the other cells on that column (can overwrite all data) to the last cell in that column (there are blank cells).

After that turn all formulas in that column to values.

Thanks, Eric
0
Comment
Question by:ekaplan323
  • 3
5 Comments
 
LVL 23

Expert Comment

by:Michael74
ID: 40465842
A couple of questions

Is it possible that the column can have an empty cells at the bottom, if so which column could be used to determine the last cell.

Could you post an example file with dummy data so we can test any script developed
0
 
LVL 23

Expert Comment

by:Michael74
ID: 40465881
Another question

Should the formula remain "as is" during the copy or do you need the appropriate values to move with the formula ie the equivalent of dragging the formula up or down
0
 
LVL 23

Expert Comment

by:Michael74
ID: 40465892
To get started here is a macro that assumes that the column with the formula has a value in the last row

The code to copy the formula contains both an increment and exact copy sections. Just remove the single quotes from the start of the section you want (Only the ones at the start of the line)

Sub macro1()
    
    Const START_ROW As Integer = 6
    Const HEADER_ROW As Integer = 5
    Const HEADER_NAME As String = "Total Fee"
    
    Dim i As Integer, lastRow As Integer, col As Integer, fRow As Integer
    Dim fmla As String
    
    ' Get column number
    i = 1
    While (col = 0)
        If (Cells(HEADER_ROW, i).Value = HEADER_NAME) Then
            col = i
        Else
            i = i + 1
        End If
    Wend
    
    ' Set last row
    lastRow = Cells(Rows.Count, col).End(xlUp).Row
        
    'Get Formula
    i = START_ROW
    While (i <= lastRow And fmla = "")
        If (Cells(i, col).HasFormula) Then
            fmla = Cells(i, col).formula
            fRow = i
        End If
        i = i + 1
    Wend
    If (fmla = "") Then
        MsgBox "No formula found"
        Exit Sub
    End If

'    ' Copy formula into column (exact)
'    For i = START_ROW To lastRow
'        Cells(i, col).formula = fmla
'    Next i
'
    ' Copy formula into column (increment)
'    Cells(fRow, col).AutoFill Destination:=Range(Cells(START_ROW, col), Cells(fRow, col)), Type:=xlFillDefault
'    Cells(fRow, col).AutoFill Destination:=Range(Cells(fRow, col), Cells(lastRow, col)), Type:=xlFillDefault

    ' Remove formulas
    Range(Cells(START_ROW, col), Cells(lastRow, col)).Copy
    Range(Cells(START_ROW, col), Cells(lastRow, col)).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    
End Sub

Open in new window

0
 
LVL 18

Accepted Solution

by:
krishnakrkc earned 500 total points
ID: 40466048
Sub kTest()
    
    Dim r   As Range, f As Range, i As Long
    
    Set r = Rows(5).Find("Total Fee", lookat:=1)
    If Not r Is Nothing Then
        i = Cells(Rows.Count, r.Column).End(3).Row
        On Error Resume Next
        Set f = r.Resize(i).SpecialCells(xlCellTypeFormulas).Cells(1)
        On Error GoTo 0
        If Not f Is Nothing Then
            f.Copy r.Offset(1).Resize(i - r.Row)
            r.Offset(1).Resize(i - r.Row).Value2 = r.Offset(1).Resize(i - r.Row).Value
        End If
    End If
    
End Sub

Open in new window


Kris
0
 

Author Closing Comment

by:ekaplan323
ID: 40467670
very concise code and did the trick.  The other answer was also very good.  Thanks
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

INDEX and MATCH can be used to great effect to replace HLOOKUP and VLOOKUP as it does not have the limitation of needing the data to be sorted so that the reference value is in the first column or row. It also has the ability to perform a bi-directi…
How to quickly and accurately populate Word documents with Excel data, charts and images (including Automated Bookmark generation) David Miller (dlmille) Synopsis In this article you’ll learn how to use ExcelToWord! to copy data,charts, shapes …
The viewer will learn how to use the =DISCRINV command to create a discrete random variable, use this command to model a set of probabilities and outcomes in a Monte Carlo simulation, and learn how to find the standard deviation of a set of probabil…
This Micro Tutorial will demonstrate in Google Sheets how to use the HYPERLINK function to create live links inside your spreadsheet.

914 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now