?
Solved

vba find the last empty column

Posted on 2016-08-18
10
Medium Priority
?
124 Views
Last Modified: 2016-08-19
I need to use the following code, but it puts the formula in column H and I need the formula to be in the first blank column.
I need to them copy that value to Column A and remove that formula from the other column.
Can anyone help?


Sub August()

Dim lngLastRowD As LongPtr
Dim c As Long, lr As LongPtr

Application.ScreenUpdating = False
Sheets("Shipment Data").Activate
Application.Calculation = xlCalculationManual

With Sheets("Shipment Data")
lngLastRowD = Sheets("Shipping").Range("A800000").End(xlUp).Row
.Range("H2:H" & lngLastRowD).Formula = "=IFERROR(trim(A2)*1,A2)"
.Range("H2:H" & lngLastRowD).Copy
.Range("H2:H" & lngLastRowD).PasteSpecial xlValues

lngLastRowD = Sheets("Shipment Data").Range("A800000").End(xlUp).Row
.Range("E2:E" & lngLastRowD).Formula = "=H2"
.Range("E2:E" & lngLastRowD).Copy
.Range("E2:E" & lngLastRowD).PasteSpecial xlValues


End With
Application.Calculation = xlCalculationAutomatic
   Application.ScreenUpdating = False
End Sub

Open in new window

0
Comment
Question by:Euro5
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 3
10 Comments
 
LVL 21

Expert Comment

by:Roy Cox
ID: 41761326
can you provide an example workbook
0
 

Author Comment

by:Euro5
ID: 41761552
The columns vary at every run.
TEST.xlsx
0
 
LVL 21

Expert Comment

by:Roy Cox
ID: 41761994
I'll take a look later
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
LVL 32

Accepted Solution

by:
Subodh Tiwari (Neeraj) earned 2000 total points
ID: 41762001
Does this work for you?

Sub August()
Dim lngLastRowD As LongPtr
Dim c As Long, lr As LongPtr

With Application
   .Calculation = xlCalculationManual
   .EnableEvents = False
   .ScreenUpdating = False
End With

Sheets("Shipment Data").Activate

With Sheets("Shipment Data")
   lngLastRowD = Sheets("Shipping").Range("A800000").End(xlUp).Row
   c = .Cells(1, Columns.Count).End(xlToLeft).Column + 1
   .Range(.Cells(2, c), .Cells(lngLastRowD, c)).Formula = "=IFERROR(trim(A2)*1,A2)"
   .Range(.Cells(2, c), .Cells(lngLastRowD, c)).Value = .Range(.Cells(2, c), .Cells(lngLastRowD, c)).Value
   
   lngLastRowD = Sheets("Shipment Data").Range("A800000").End(xlUp).Row
   .Range(.Cells(2, c), .Cells(lngLastRowD, c)).Copy
   .Range("E2:E" & lngLastRowD).PasteSpecial xlPasteValues
End With

With Application
   .Calculation = xlCalculationAutomatic
   .EnableEvents = True
   .ScreenUpdating = True
End With
End Sub

Open in new window

0
 
LVL 21

Expert Comment

by:Roy Cox
ID: 41762027
Because your data is set out in a tabular format you can simplify the code using CurrentRegion, i.e a Range object that represents the current region. The current region is a range bounded by any combination of blank rows and blank columns. You code seems to be referring to two sheets, is that what you intended?

So

Option Explicit
Sub August()

Dim lngLastRowD As LongPtr
Dim rRng As Range
Dim c As Long, lr As LongPtr
''/// you don't need to activate
'Sheets("Shipment Data").Activate

With Sheets("Shipment Data")
''/// this gets the row from a different sheet, is this correct?
Set rRng = Sheets("Shipping").Cells(1, 1).CurrentRegion
lngLastRowD = rRng.Rows.Count
''/// this works on Shipment Data?
.Range("H2:H" & lngLastRowD).Formula = "=IFERROR(trim(A2)*1,A2)"
.Range("H2:H" & lngLastRowD).Copy
.Range("H2:H" & lngLastRowD).PasteSpecial xlValues
lngLastRowD = .Cells(1, 1).CurrentRegion
''/// this works on Shipment Data?
.Range("E2:E" & lngLastRowD).Formula = "=H2"
.Range("E2:E" & lngLastRowD).Copy
.Range("E2:E" & lngLastRowD).PasteSpecial xlValues
End With

End Sub

Open in new window

0
 
LVL 21

Expert Comment

by:Roy Cox
ID: 41762739
I keep trying to interpret what you are doing from the code, but it doesn't make much sense. Can you explain what you want to do and attach an example workbook that represents the workbook that you are using, the current example does not if you have two sheets ShipmentData and Shipping

Option Explicit

Sub August()

    Dim lngLastRowD As LongPtr
    Dim c As Long, lr As LongPtr
    Dim rRng As Range

    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual

        With Sheets("Shipment Data")
            Set rRng = Range("A1").CurrentRegion
            c = rRng.Column.Column.Count + 1
            lr = rRng.Rows.Count
            ''///I think this is a mistake, if not explain what you use it for
            'lngLastRowD = Sheets("Shipping").Range("A800000").End(xlUp).Row
            .Cells(lr, c).Formula = "=IFERROR(trim(A2)*1,A2)"
            .Cells(lr, c).Copy
            .Cells(lr, c).PasteSpecial xlValues


            'lngLastRowD = Sheets("Shipment Data").Range("A800000").End(xlUp).Row
            ''/// what is this for?
            ''/// it appears to enter the formula in the whole range
            .Range("E2:E" & lngLastRowD).Formula = "=H2"
            .Range("E2:E" & lngLastRowD).Copy
            .Range("E2:E" & lngLastRowD).PasteSpecial xlValues


        End With
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = False
    End With
End Sub

Open in new window

0
 

Author Closing Comment

by:Euro5
ID: 41762983
Wonderful, thank you!!
0
 
LVL 32

Expert Comment

by:Subodh Tiwari (Neeraj)
ID: 41762985
You're welcome. Glad to help.
0
 

Author Comment

by:Euro5
ID: 41763003
Subodh Tiwari (Neeraj)
Can we delete all the values in the column with the formula?
It has to be dynamic, I will never know what the last column is.
Thanks!!
0
 
LVL 32

Expert Comment

by:Subodh Tiwari (Neeraj)
ID: 41763350
Like this...
Dim lc As Long
lc = Cells(1, Columns.Count).End(xlToLeft).Column
'since it is the last column with data, you can simply delete it like this
Columns(lc).Delete

'OR use this to clear the column contents
'Columns(lc).ClearContents

Open in new window

0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

How to get Spreadsheet Compare 2016 working with the 64 bit version of Office 2016
Access developers frequently have requirements to interact with Excel (import from or output to) in their applications.  You might be able to accomplish this with the TransferSpreadsheet and OutputTo methods, but in this series of articles I will di…
The viewer will learn how to create a normally distributed random variable in Excel, use a normal distribution to simulate the return on an investment over a period of years, Create a Monte Carlo simulation using a normal random variable, and calcul…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…

801 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