次のような引数で指定された範囲をカンマ区切りで連結して返す関数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」と似ているように思われるけど、この人も解決できていないっぽい。
かなり困るんだけどな...