145

When you have text in an Excel cell that is too long to be shown in the visible area of that cell, and the next cell on the right is empty, Excel lets the text be displayed in that next cell (and the next, and the next, as needed). I want to change this; I want to avoid this text overflow.

I know I can avoid this by enabling "word wrap" and adjusting row height. But that is not what I want.

I want to change the DEFAULT behavior of Excel so it shows the value of each cell only in the visible area of that cell. No overflow, no word wrap.

Is this possible? (I am using Excel 2010, by the way.)

e-mre
  • 1,905

9 Answers9

100

Yes, you can change this behavior, but you will probably not want the side effects this causes.

The key to limiting the cell contents to the cell's boundaries regardless of whether the adjacent cell contains data is the text alignment Fill. Select the cells you don't want to overflow and right click them > Format cells... > Alignment tab > Horizontal alignment > Fill

The problem with this method is that this will actually fill cells by repeating their content when it is short enough to fit in the cell multiple times. See below screenshot for what this means. (Note that B7 is filled with 'short text'.)

Screenshot showing the different text alignment behavior for default and fill

In addition to this, numbers will become left aligned and if the adjacent cell is set to Fill, too, text will still overflow into that cell (thanks posfan12 and HongboZhu for pointing this out).

So it really seems like you will be stuck with the workarounds in Benedikt's post.

Recommendation: You could fill the adjacent cells with tick characters (') using Benedikt's first, very clever method. This way you don't have to hide anything, prevent cell overflow and if you copy the cells as text (let's say to notepad) you still get empty text and not spaces, ticks, or any other filler characters for these cells.

37

Here's how I do it.

  1. Option 1: Fill all empty cells with a "N/A" and then use Conditional Formatting to make the text invisible.
  2. Or Option 2: Fill all empty cells with 0 and use an Excel setting to hide zero values.

Filling all empty cells: (tested on a Mac)

  • Edit → Go To... → Special ... (On Windows: Home → Editing → Find & Select → Go To Special...)
  • Select "Blanks" and hit OK.
  • All blank cells are selected now. Don't click anything.
  • Type "N/A" or 0, and then hit Ctrl+Enter. This will insert the value into all selected cells.

Conditional Formatting to Hide "N/A"

  • Format → Conditional Formatting.
  • Create new rule.
  • Style: Classic, and Use a formula to determine which cells to format.
  • Formula: =A1="N/A"
  • Format with: Custom Format: Font color white, no fill.

Hide Zeros

  • Excel → Settings → View.
  • Untick "Show zero values".

_______________
  That's Ctrl+Enter, not Ctrl+Shift+Enter.

29

Try entering the formula ="" (that's two double quotes) in the adjacent cell where you don't want to see the overflow. This evaluates to "null" which displays nothing and won't affect math.

17

Expanding on the solution of using ' to block Excel's rightwards spilling of text into adjacent blank cells, sometimes you don't want to modify/corrupt your data column by inserting that value in there.

Instead of inserting the ' in your actual data values, you can create a new dedicated vertical column for this purpose, entirely filled with ' characters all the way down.

1. Barrier column

enter image description here

2. Insert "barrier" column to the left of the column(s) that you want protected.

enter image description here

3. Collapse the barrier columns by setting their column width to a small value

Set the column width to a value such as .1, or alternatively keep the barrier columns wider to act as a margin or inter-column whitespace.

enter image description here

Note that you must set a width greater than zero; setting the vertical barrier column width to zero will revert to the unwanted cell overflow behavior.

4. Voila!

16

This may not be an option for everyone, but if you import the document into Google Sheets, this functionality is supported by default. On the top menu bar, three types of text wrapping are supported. Overflow, wrap, and clip. You are looking for clip.

Clip option in Google Sheets

Depending on the requirements, this may be a viable option for some people.

Stevoisiak
  • 16,075
yellavon
  • 560
7

In Excel, adjust the column to the required width, then enable word-warp on that column (which will cause all row heights to increase) and then finally select all rows and adjust row heights to the desired height. Voila! You now have text in cells that do not overflow to the adjacent cells.

(Note: I found this and posted it as a comment in the selected answer but also posting it as an answer so will be easier to find for others.)

e-mre
  • 1,905
2

Use the Horizontal Text alignment "Fill" for the cell. You can find it in the same place as other Alignment options that should solve your problem

Fill Text Alignment

Blackwood
  • 3,184
Thomas
  • 63
1

In the same line of thinking that Google Sheets may not be for everyone, this macro may not be for everyone but it may be for someone.

It runs through the selected range and replaces overflowing cells with truncated text.

Flags determine if:

  • the offending text is copied to the same relative address in a new worksheet or if it is discarded.

  • the truncated text is hard coded or linked via worksheet formula =LEFT().

  • the truncated text is hyperlinked to the full string in he new sheet.

Default is to retain data and use both links.

Option Explicit

Sub LinkTruncatedCells() Dim rng As Range: Set rng = Selection Dim preserveValues As Boolean: preserveValues = True Dim linkAsFormula As Boolean: linkAsFormula = True Dim linkAsHyperlink As Boolean: linkAsHyperlink = True Dim w As Single Dim c As Range Dim r As Range Dim t As Long Dim l As Long Dim s As String Dim ws As Worksheet Dim ns As Worksheet Application.ScreenUpdating = False Set ws = rng.Parent For Each c In rng.Columns w = c.ColumnWidth t = 0 l = 0 For Each r In c.Rows If Len(r) > l Then s = r If CBool(l) Then r = Left(s, l) Do r.Columns.AutoFit If r.ColumnWidth > w And Len(s) > t Then t = t + 1 r = Left(s, Len(s) - t) l = Len(r) End If Loop Until t = Len(s) Or r.ColumnWidth <= w r.ColumnWidth = w If r <> s And preserveValues Then If ns Is Nothing Then Set ns = ws.Parent.Worksheets.Add(after:=ws) End If ns.Range(r.Address) = s If linkAsFormula Then _ r.Formula = "=LEFT(" & ns.Name & "!" & r.Address & "," & l & ")" If linkAsHyperlink Then _ ws.Hyperlinks.Add Anchor:=r, Address:="", SubAddress:= _ ns.Range(r.Address).Address(external:=True) End If End If Next r Next c ws.Activate Application.ScreenUpdating = True End Sub

Final note: I have used it for personal projects and found it reliable but please save and back up your work before trying any unfamiliar macro.

1

A simple solution that can be to write ' (one apostrophe) in the next cell. It is not visible on it's own in Excel, but will stop the overflow from previous cell.

It's not a super solution, but it worked pretty well for my limited case.