Force Refresh of "Last" Cell of the Worksheet - excel

Pressing Ctrl+End in Excel takes you to the bottom-right-most cell of the worksheet.
If you delete the last rows or columns and save the workbook, this last cell gets updated, as well as the scrollbars.
I remember there was a one line VBA command that you could run that would do the update without having to save the workbook, but I can't remember what the command is - do you have any ideas?

I’ve found something that consistently works to delete those blank rows. You can tell when the “used range” excel is using is too big and is going to add extra blank rows when you use the scroll bar to the right and it goes beyond the last row of actual data when you scroll to the bottom. This will caused extra blank records to be added to the table when it is imported into SQL.
To get rid of them:
Select the entire first row under the last row of data. Hit Ctrl + Shift + Down Arrow to select all the blank rows.
From the Home Tab Select Clear and then Clear All from the Edit menu (picture of a whitish-grey eraser).
Right-click and select Delete.
Goto cell A1 first and then Save.
Press Ctrl + Home and then Ctrl + End (This should take you the correct last cell in the used range (above blank rows).
Click Save again.

Here is the answer:
Sub x()
ActiveSheet.UsedRange
End Sub
Run this and the last cell will be reset.

When none of the above works try this.
Select the unused rows and change the row height.
Now delete the rows and save.
Bingo!

Here's what I did... since none of the above worked (this time that is, which is sad cause this code was running beautifully then all the sudden xlCellTypeLastCell totally failed me.) This will only work if you hardcode the first cell of the region you wanna grab the last cell of... for example I was pasting data tables into a sheet of 12 - 40 columns and 60-90 rows... but since it was a paste, it always started in cell A79...
Worksheets("Data_Import").Activate
Range("A79").CurrentRegion.Select
A = Selection.Rows.Count - 1
B = Selection.Columns.Count - 1
Selection.Offset(A, B).Resize(1, 1).Select
Set DataEnd = Selection
I feel sad to NOT use the cool special cells thing, but alas, if it doesn't work! then I just can't use it. :C
p.s. - you could also throw in a
ActiveSheet.Cells(Rows.Count, 1).End(xlUp).CurrentRegion.Select

This solution works for Excel 2013, but may also work for most recent versions of Excel:
Choose the worksheet where you want to change the last cell, and delete any unused rows and columns
Click on File - Options - Customize Ribbon
Under Main Tabs, check the box next to "Developer", then click OK
On the Developer ribbon that now appears, click Visual Basic
In the upper-left corner, under Microsoft Excel Objects, click on the Sheet Name where you want to force a refresh of the worksheet's last cell
In the menu, click on Run - Refresh, then close the Visual Basic Window
When you hit Ctrl + End, your last cell should now be refreshed.

Check out http://dmcritchie.mvps.org/excel/lastcell.htm#MakeLastCell, found the link from a similar question.
Far from the forgotten one liner, but did solved the problem for me.
Alternatively;
Turn on manual calculation (to preserve references).
create new sheet.
Copy cells and Name of old sheet.

For some reason the code ActiveSheet.UsedRange alone did not work for me on Excel 2016 64-bit to force Excel to reset the last used cell.
This does work for me. Hope this helps.
Rows(25:415).Clear 'deletes contents and formatting
ActiveSheet.UsedRange 'resets last used cell

The solution to change row height to zero and saving worked.
Reopen, set row height to 12 and notice that End Home is no longer at the very bottom right of the worksheet.
THANK YOU. I have been working on this for over two years.
Jim Champaigne
Elkhart, Indiana

I'm not sure why everyone is making it so complicated. Just press Ctrl + PgDn.

Related

Insert values in cell in VBA if previous is empty upon each click of a button

I have this simple vba,
Private Sub CommandButton7_Click()
Range ("F1:F100").Value=Time
End Sub
As you already know, this will insert the current time in cells from F1 to F100(all at once) whenever I click the button once.
However, I want to insert time in each cells for each click. If I click the button first time, only f1 should be filled in. The second click should fill in f2 only because the previous cell is empty and so on and so forth.
I am not sure if it should be done in loop but I was unable to find references. I am trying to find a simpler code to achieve this.
Thanks commentators for your assistance.I just put the answer below in case any one needs it. The code below served my objective.
Once a cell is filled in upon clicking, you can directly go to the next cell and fill in the cell value upon clicking the button again,
Dim timeCell as Range
Set timeCell = Range("F" & rows.count).End(xlUp).Offset(1)
timeCell.value = time

Auto delete a cell after 180 days and shift row

Thank you for taking the time to read my question. I have looked everywhere and I am unable to figure out the code on how to accomplish my goal.
enter image description here
I am looking for a code to auto delete a cell after 180 days and shift the remaining contents of the row over. EX: i have a date in cell D9 once that date highlights blue and is past 180 days from todays date...I would like it to auto delete and shift the remaining row details to the left 2 cells. So D9 and and E9 would auto delete and would move F9 to D9 and so on for the remainder of the row. Please let me know if that makes sense. Thank you again for taking the time to review my question.
If by "auto delete" you mean you want it to run every time you open the workbook, you can do this:
1) With workbook open:
2) Hold down your "Alt" key and hit "F11" to open the VBA editor
3) In the Project Explorer on the left, under "Microsoft Excel Objects", double-click "ThisWorkbook".
4) Paste the following code into the editor:
Sub Workbook_Open()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
If CDate(ws.Range("D9")) < DateAdd("d", -180, Now) Then
ws.Range("D9, E9").Delete Shift:=xlToLeft
End If
End Sub
5) Save and close the workbook
You could also add the same code (without the sub and end sub lines) to any existing macro you are running and it would execute with that other macro. If, by "auto delete" you mean you want it to happen without you even having to open the workbook. You could use the "Task Scheduler" in Windows to open the workbook and run the code according to a preset schedule.
If this answers your question, please remember to mark as answered, so everyone will know you have your solution. If this doesn't answer your question, let me know why not and I'll try to help.

Excel copy-paste including hidden columns

I'm using a Excel 2016 worksheet that has a couple of columns hidden for UI reasons. I need to be able to filter out data and then copy-paste it to another sheet with hidden columns intact and showing after pasting in the destination (it will contain a longer log of similar transactions, not just one copy-paste).
Adding a pic of the objective - i.e. hoping to have the hidden contents of columns B and C being pasted into the destination spreadsheet. Is this possible at all?
Probably not great form to ask 2 questions in one post, however are there alternatives to performing filtering and copy-paste function to another spreadsheet manually? I.e.:
run manual filter to clear blanks in Quantity field;
make a selection
do manual Ctrl+C - Ctrl+V function
Is there a way to make it easier? Unfortunately no VBA or macro experience as of yet.
Edit - Completely misunderstood the question!
You want to include hidden cells when you copy - that's standard behavior for hidden cells but not for filtered columns. If you want to avoid VBA abd you're dealing with small contiguous ranges then a simple formula may be the easiest solution.
Using your example, I will arbitrarily name the source worksheet "Sheet1" and the destination "Sheet2". In Sheet2, click in cell A2 and type this into the formula bar: =Sheet1!A3 Now click the bottom right corner of cell A2 and drag it to the right through D2 then down to D7.
With the range highlighted, press ctrl C to copy, then right click to paste special values.
You're done!
Here's a VBA solution:
Sub copyrng()
Dim srcrng As Range
Dim tmprng As Range
Dim dstrng As Range
Dim srcws As Worksheet
Dim dstws As Worksheet
Set srcrng = Application.InputBox("Area to copy", "Source", Type:=8)
Set srcws = srcrng.Parent
Set tmprng = Application.InputBox("Top Left Corner of Destination", "Destination", Type:=8)
Set dstws = tmprng.Parent
Set dstrng = dstws.Range(tmprng.Address, tmprng.Parent.Cells(tmprng.Row + srcrng.Rows.Count - 1, tmprng.Column + srcrng.Columns.Count - 1))
dstrng = srcrng.Value
End Sub
First answer (answered wrong question)
You can copy visible cells using "Go To..."
Highlight the range you want to copy, press Ctrl G, click "Special...", select "Visible Cells Only", and then press Ctrl C to copy.
Now all hidden cells will be left behind when you paste.
No, you cannot do this with regular Excel features since Excel cannot know which columns/cells to skip when one of the column have blank values, this is something has to be decided and done by a human.
Maybe this is a good time to enter the world of Macros, since you do not need a custom code but can use the recorded macro without any further manipulation. This Excel feature is for inexperienced users just like you.
View / Macros / Record Macro
Name your macro
Do what you need to, keeping in mind that Excel is recording your every move by converting them into VBA codes in the background. For your case, do the following:
Filter the blanks using filter combo-box
Select the range by using CTRL-G / Special / Current Region (do not select the cells by mouse or with your keyboard, your code should be generic should not contain manual ranges since you do not want to do any coding)
CTRL-C to copy
If "to-be-pasted" cell is not fixed for all your cases, then you should stop recording your macro here. If pasting cell is fixed then Paste the contents while the macro is recording.
After the macro is recorded, assign a shortcut to your new Macro using:
Macros / View Macros / Options menu
Voila! Now you are able to do exactly what you have done when recording your macro by using that keyboard shortcut. If you did not paste the content when recording then you s/b using your macro short cut and go to the cell you want to paste and press CTRL-V.
When you feel confident enough, try the Edit menu in the Macros and see what code you have in hand, maybe make some small changes etc. I saw many people who are not familiar with basic coding at the beginning but somehow started writing their own codes after seeing this feature in Excel. Good Luck!
ProfoundlyOblivious code is pretty cool but the
dstws = activesheet
will always be the source since the activesheet passes back straight after the inputbox.
I tried changing it to
Set dstws = tmprng.Parent
but for some reason this then breaks the
Set dstrng = dstws.Range..
I get a Run time error 1004 Method range of object _Worksheet failed?!?!
If I could fix that this solution would work for you with any destination, even other files.
The alternative is to use vba to un-filter the data, then do a copy, then put same filter(s) back on. Once that is done you can go anywhere and paste what is now on the clipboard.

Batch add a formula in Excel 2016

I have a spreadsheet with hundreds of cells containing formulas like =('Pricing Master'!$E135*'Pricing Master'!$L$29). I would like to batch add the ROUNDUP formula, so that they all read, for example, =ROUNDUP('Pricing Master'!$E135*'Pricing Master'!$L$29,0). A simple Replace All will not work, as it requires both the function call preceding as well as the Number argument following. Not providing both at the same time produces an error. This creates an issue with batch editing using Replace All.
I am sure that there is a way to do this with the Paste Special function, although if there is another way I would be glad to hear it.
My approach is this and I do this often with large sheets with many formulae:
One : select the row(s) or column(s) you want to work with,
Then edit/replace “=(“ with “xyxy(” (I use xyxy as it just doesn’t come up...
Now all replace operations will be quicker as there is no re-calc happening...
So now do edit/replace “xyxy” with “xyxyroundup(“ and “)” with “,0)”
Then just replace “xyxy” with “=“
And wait for it to finish its calculations...
loop through each cell and add formula to the original formula. Like this
Sub updateFor()
Dim r As Range
For Each r In Selection.SpecialCells(xlCellTypeFormulas)''only cells with formula in
r.Formula = "=ROUNDUP(" & Mid(r.Formula, 2) & ",0)"
Next r
End Sub
just replace the selection with the range you want to edit
if you arnt familiar with vba heres a quick guide
press ALT + F11 to show the vba editor
from insert menu select module
module1 should appear in the project window in the top left,
click on this
a large window should open on the right paste the above code in
go back to your worksheet and select the cells you want to roundup
goto to the view ribbon click the macro button on the far right
select the macro 'updateFor' and press run

excel formula to get the latest timestamp of latest updated cell in a particular row

I need a formula in MS Excel to get the last updated timestamp everytime any cell in a particular row is updated.I am using =if($2:$2="","",NOW()) but when one cell is updated, every cell even of other row having similar formula is updated with the latest time-stamp. What can be the problem?
I need only formula not a macro/excel program.
You will need to create a VBA macro in the worksheet change event. You can easily input a timestamp as a string into your row depending on the row of the changed cell. There is no formula that can do what you're asking.
To get to the worksheet change event, go to File, and then Options. Then go to Customize Ribbon. Check the box next to Developer in the column on the right. Under the newly added Developer tab in the Ribbon, select Visual Basic on the far left. Find you worksheet in the Project window on the left hand side of the Editor that opens up. You may need to expand your Workbook and a folder called Excel Objects. Double click on the sheet to get to its code. A window will open with two drop downs at the top. On the left, go to Worksheet. On the Right, select Change. In between Private Sub Worksheet_Change(ByVal Target As Range) and End Sub, you can add the code that will run whenever the worksheet is changed.
This is the code you would use, replacing "5" in Cells() with the column you want to put a timestamp in.
Dim i As Integer
i = Target.Row
Dim t As String
t = VBA.Now
Cells(i, 5) = t
If the cell to contain the timestamp is B3 and the cell to watch is C3 the formula is:
=IF(C3<>"",IF(B3="",NOW(),B3),"")

Resources