Solved

vba find the last empty column

Posted on 2016-08-18
10
115 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 20

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 20

Expert Comment

by:Roy_Cox
ID: 41761994
I'll take a look later
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 31

Accepted Solution

by:
Subodh Tiwari (Neeraj) earned 500 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 20

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 20

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 31

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 31

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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

With User Account Control (UAC) enabled in Windows 7, one needs to open an elevated Command Prompt in order to run scripts under administrative privileges. Although the elevated Command Prompt accomplishes the task, the question How to run as script…
This article describes how you can use Custom Document Properties to store settings and other information in your workbook so that they will be available the next time you open the workbook.
This Micro Tutorial will demonstrate how to use longer labels with horizontal bar charts instead of the vertical column chart.
This Micro Tutorial demonstrates in Microsoft Excel how to consolidate your marketing data by creating an interactive charts using form controls. This creates cool drop-downs for viewers of your chart to choose from.

717 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