Create ordinal number format in Excel

Anonymous
2010-08-09T14:55:38+00:00

Hello,

I am wondering if anyone knows (or knows of any resources that describe) how to create an ordinal number format in MS Excel.

I am well aware of how to reformat numbers as text to create the ordinal number effect, but what I would like to do is have the numberdisplay as an ordinal number (e.g., "1st", "2nd", "3rd", etc.) while still retaining its numeric value (1, 2, 3, etc.).

The reason for this request is to be able to perform numeric functions (e.g., MIN, MAX, AVERAGE, etc.) on an array of ordinal numbers.

I have a spreadsheet that lists various athletes' scores and the ranking for each score.  I would like to be able to easily determine, for example, each athlete's best ranking by using a MIN() function on the list of ordinal numbers.  Currently the only way I can think to do this is by having the rankings as regular cardinal numbers.

I suppose it would be possible to have an adjacent, hidden column with the numeric value of each ranking, but I thought it might be more elegant if there was a way to change the format of the number without changing its value.

Any help is much appreciated!

Regards,

Craig

Microsoft 365 and Office | Excel | For home | Windows

Locked Question. This question was migrated from the Microsoft Support Community. You can vote on whether it's helpful, but you can't add comments or replies or follow the question.

0 comments No comments

58 answers

Sort by: Newest
  1. Anonymous
    2011-02-28T02:09:23+00:00

    Rick:

    Very interesting.

    It took me a while go to thru the formula and map its logic.

    It can probably form the basis of a worksheet formula to give a string result rather than a format.

    Was this answer helpful?

    0 comments No comments
  2. Anonymous
    2011-02-27T22:35:51+00:00

    Originally I was going to respond to Adam Vero (the last poster before you) noting that his response comes some 6 months after the previous last posting in this thread, but then noticed that you just posted a macro in response. Given that, I thought I would direct your attention to the event code I posted to this thread back in August 2010... I thought you might find my one-liner number formatter of some interest.

    Was this answer helpful?

    0 comments No comments
  3. Anonymous
    2011-02-27T22:11:55+00:00

    Select your values and try this little macro:

    Sub ordination(r As Range)

    Dim s As String

    s = ""

    dq = Chr(34)

    ar = Array("th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th")

    With r

        .ClearFormats

        v = .Value

        If v > 10 And v < 20 Then

            s = "th"

        Else

            s = ar(v Mod 10)

        End If

        .NumberFormat = "General" & dq & s & dq

    End With

    End Sub

    Was this answer helpful?

    0 comments No comments
  4. Anonymous
    2011-02-27T21:41:39+00:00

    As with so many such problems, the trick from Excel 2007 onwards is to use conditional formatting, since the format you choose for matching cells can be to change the number format as well as the "pretty" things like colours and borders.

    Use a cell number format of #"th" for all cells, then three conditions which apply, with formulas such as:

    =AND(A1<>11,MOD(A1,10)=1)  for these cells use format #"st"

    etc.

    Hope this helps

    Was this answer helpful?

    3 people found this answer helpful.
    0 comments No comments
  5. Anonymous
    2010-08-09T16:25:06+00:00

    Here is some event code which will handle the changing of the cell or cells number format automatically...

    Private Sub Worksheet_Change(ByVal Target As Range)

      Dim Cell As Range

      For Each Cell In Target

        If Cell.Column = 3 And IsNumeric(Cell.Value) Then

          Cell.NumberFormat = "#""" & Mid$("thstndrdthththththth", 1 - 2 * ((Cell.Value) _

                              Mod 10) * (Abs((Cell.Value) Mod 100 - 12) > 1), 2) & """"

        End If

      Next

    End Sub

    To install this code, right click the name tab at the bottom of the worksheet you want to have this functionality, select View Code from the popup menu that appears and then copy/paste the above code into the code window that appeared. Here I have set the code to respond to numbers placed in Column "C", but that can be changed, of course. Now, whenever you enter a number into Column "C" (or whatever column you choose to monitor), that number will display with the ordinal suffix attached to it, but the value in the cell will be the number itself.

    Was this answer helpful?

    1 person found this answer helpful.
    0 comments No comments