Continuous Beam Analysis by Macaulay’s Method

The Macaulay spreadsheet now includes a ConBeam() function, analysing continuous beams with any number of segments of different stiffness, subject to any combination of distributed or point loads and moments.  The spreadsheet also includes an example, together with output of the same beam from Strand7, which is in exact agreement.  The revised spreadsheet (including open source code) may be downloaded from

The algorithm used by the ConBeam function is:

  • Find the deflections at the internal supports under the specified loading, treating the beam as simply supported at the end supports only.
  • Find the deflection at the support positions due to a unit upward load applied at each support.
  • Use this data to find the reaction force at each internal support.
  • Find the shear forces, moments, curvatures, slopes and deflections at each output point under the specified applied load plus the reaction forces at the internal supports

The code for generation of the reaction loads is shown below:

If NumSupports > 2 Then

        ' Find deflections at support positions for unit load at each internal support
        W = 1
SSSupports(1, 1) = SupportA(1)
SSSupports(2, 1) = SupportA(NumSupports)

SupportLoadA(1, 2) = W

For i = 2 To NumSupports - 1
SupportLoadA(1, 1) = SupportA(i)

SuppRes = SSSpan(Segments, DLoads, SupportLoadA, ISupportA, 0, 1)

For j = 1 To NumSupports - 2
SupportF(i - 1, j) = SuppRes(j, 4)
            Next j
Next i
If NumSupports > 3 Then
InvSupportF = WorksheetFunction.MInverse(SupportF)
InvSupportF = 1 / SupportF(1, 1)
        End If
        ' Find deflection at internal supports for simply supported span between end supports

SuppRes = SSSpan(Segments, DLoads, PLoads, ISupportA, NumDloads, NumPloads)

For i = 1 To NumSupports - 2
SuppDef(i, 1) = -SuppRes(i, 4)
Next i

' Find reactions at internal supports and add to PLoads2 array

If NumSupports > 3 Then
IntReact = WorksheetFunction.MMult(InvSupportF, SuppDef)
IntReact = InvSupportF * SuppDef(1, 1)
        End If
ReDim PLoads2(1 To NumPloads + NumSupports - 2, 1 To 3)
For i = 1 To NumPloads
PLoads2(i, 1) = PLoads(i, 1)
PLoads2(i, 2) = PLoads(i, 2)
PLoads2(i, 3) = PLoads(i, 3)
Next i
        k = 0
If NumSupports > 3 Then
For j = i To i + NumSupports - 3
k = k + 1
PLoads2(j, 2) = IntReact(k, 1)
PLoads2(j, 1) = SupportA(k + 1)
            Next j
PLoads2(i, 2) = IntReact
PLoads2(i, 1) = SupportA(2)
        End If
NumPloads = NumPloads + NumSupports - 2
    Else    ' single span
SSSupports(1, 1) = 0  'Segments(1, 2)
SSSupports(2, 1) = Spans(1, 2)
PLoads2 = PLoads
    End If

The input and output from the example in the spreadsheet are shown below:

Conbeam Input

ConBeam output, compared with Strand7, click for full size view

Show Force

Bending Moment


This entry was posted in Beam Bending, Excel, Frame Analysis, Newton, UDFs, VBA and tagged , , , , . Bookmark the permalink.

8 Responses to Continuous Beam Analysis by Macaulay’s Method

  1. John Clark says:

    Inrteresting sheet but needs much more user info to be practical. Add units or explain unit system. add explanations, add how to add spans and loads. Graphs do not automatiocally update with new spans.- currently fixed for 30 (units?

    John M. Clark, PE


    • dougaj4 says:

      John – Thanks for the comments, I’d much rather have constructive suggestions than have people just dismiss something as being not much use and move on to something else.

      I think I might make a general post about the approach adopted in this spreadsheet (and most of the others on this blog), but in brief:

      Units are any consistent units (I should have said that)
      The general approach used in most of my spreadsheets is to encapsulate the analysis in a User Defined Function (UDF), which returns results in the form of an array. The input is entered in a number of ranges, which are simply extended to increase the number of spans, loads, etc. The advantage of this approach is that it makes the spreadsheet much more flexible; it is quick and easy to set up the input and output ranges wherever you want them, or combine it with existing spreadsheets etc. The example given in the spreadsheet is intended to be just that, an example of using the UDF, rather than a complete finished application. I could spend some time setting up graphs to automatically update, etc, but it’s really not the intention of the spreadsheet to do that. Rather the intention is to provide a series of UDFs that can be incorporated in other spreadsheets in any way the user chooses, in which case they will probably want different graphs anyway. So it’s more of a toolbox than a complete finished application.

      Hope that helps



  2. metroxx says:

    Hello. Is it possible to define different support conditions?
    Thank you.


  3. dougaj4 says:

    metroxx – not in the present version. That will follow, I hope quite soon.


  4. metroxx says:

    Its will be great. Also want to know, is it will be possible to make cantilever beam ends ?
    Thank you for your work.


  5. Pingback: Continuous Beams With Cantilevers by Macaulay’s Method | Newton Excel Bach, not (just) an Excel Blog

  6. metroxx says:

    Thank you. Its great. Hope supports for too will be soon.
    With regards …


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.