1

背景: 最初の次元にプロジェクトのタイトルを、2 番目の次元に目標のタイトルを保持する配列を作成するルーチンを含む Word テンプレートを作成しました。この配列は Excel のテーブルに転置され、タイムライン/ガント チャートの作成に使用されます。

問題: 転置により、配列情報が適切に Excel テーブルに配置され、そのテーブルのサイズが必要に応じて拡張されます。セル B5 は、DataBodyRange の先頭であり、配列情報を貼り付けたい場所の先頭です。

' paste headings from array into excel
xlWS.Range("B5:C" & UBound(gHeadings, 2)) = xlApp.Transpose(gHeadings)

適切な方法で発生しないのは、テーブル内の後続のデータ セルです。タイムライン セルには次の式があります。

=IF(AND(COLUMNS($H$5:H10)>=$E5,COLUMNS($H$5:H10)<=$F5),IF(COLUMNS($H$5:H10)-$E5<ROUND(($F5-$E5+1)*$G5,0),fillblock,""),"")

転置が完了すると、DataBodyRange の元の最後の行であったテーブルの行で、参照された数式を含むセルの行がエラーになります。その行、行 10 で、式は上に表示されているものから次のように変更されます。

=IF(AND(COLUMNS($H$5:H119)>=$E10,COLUMNS($H$5:H119)<=$F10),IF(COLUMNS($H$5:H119)-$E10<ROUND(($F10-$E10+1)*$G10,0),fillblock,""),"")

なぜこれが起こるのか、そしてそれを防ぐ方法についての考えや理解はありますか?

4

1 に答える 1

0

Excel テーブルが私が説明した方法で動作する理由に関する全体的な答えは、答えられていません。しかし、ここに私の回避策があります。スピードヒットは無視できます。

    ' variable to hold the formula and fix the double-quote ("") issue in vba
        sEmpty = Chr(34) & Chr(34)
        sFormula = "=IF(AND(COLUMNS($H$5:H5)>=$E5,COLUMNS($H$5:H5)<=$F5),IF(COLUMNS($H$5:H5)-$E5<ROUND(($F5-$E5+1)*$G5,0),fillblock," & sEmpty & ")," & sEmpty & ")"

    ' paste cell formula into the new worksheet
        lTblRows = xlLO.DataBodyRange.Rows.Count
        xlWS.Range("H5:AK" & lTblRows + 4).Formula = sFormula

これにより、テーブル内で参照されている各セルに数式が効果的にコピーされ、行の挿入中に誤って参照されたセルがコピーされます。

于 2014-10-19T16:48:31.017 に答える