数式の結果が更新されない

次のような引数で指定された範囲をカンマ区切りで連結して返す関数concatを準備しといて、この関数を複数シートで使って、ブックをxlsm形式で保存した。
concatを使うセルはA1でconcatの引数はA2:A21。各シートで位置は揃えている。

Option Explicit
Function concat(rng As Range) As String
  Dim startX, startY, endX, endY As Long, strResult As String
  startX = rng.Columns.Column
  startY = rng.Rows.Row
  endX = startX + rng.Columns.Count - 1
  endY = startY + rng.Rows.Count - 1

  Dim currX As Integer
  For currX = startX To endX
    Dim currY As Integer
    For currY = startY To endY
      If Len(Cells(currY, currX)) > 0 Then
        If Len(strResult) < 1 Then
          strResult = Cells(currY, currX)
        Else
          strResult = strResult & "," & Cells(currY, currX)
        End If
      End If
    Next currY
  Next currX
  concat = strResult
End Function

つまり、保存する内容はこんな感じ。左からSheet1、Sheet2、Sheet3。

で、次にこのファイル開いたとき、

が出るけど、こいつでマクロを許可してやると、マクロを許可したときに表示していたページのconcatの結果が、その他の全ページconcatしているセルの値に表示されている。さっきのSheet2を選んでマクロ許可してやると、こんな感じになる。

この状態から各シートのA1セルを再計算(いったんセルを編集状態にして確定するなど)すると、ちゃんと正しい値になる。
なんなのこの挙動。最初から保存した内容で表示するにはどうしたら良いのだろう。ちなみに、計算方法は「自動」にしてる。
誰かおせーて。

追記2016/05/28

2重ループは重い処理だと勝手にExcelが判定するから再計算しないのかと考え、どうせ1列しか見ないので、ループをネストさせないようにしてみた。結果は同じだった。
64ビットのマシンだからかと考え、32ビットの別PCでも試してみたが、やはりこれもダメだった。
現象だけ見ると「エクセルで数式の結果が反映されない(自動計算になっているのに) -す- Excel(エクセル) | 教えて!goo」と似ているように思われるけど、この人も解決できていないっぽい。
かなり困るんだけどな...