3

Excel が数式を操作しているように見える状況に遭遇した人はいますか? 列 A にインデックス値があるシートがあります。最初の行はゼロ以外の値で始まります。列の後続の行では、値が増加します。例えば

A1 = 1000
A2= A1+ 1
A3= A2 + 1 

など/別の列 B があり、その値は空白か、列 A (通常は後続の行) を指す数式のいずれかになります。例:

B1.Formula = "=A2"
B2.Formula = "=A3"
B3.Value = ""
B4.value = "=A6"

これで、データ/数式をテキスト ファイルに書き出してから、別のブックで読み戻すことができるバックアップ/復元機能ができました。列AとBの場合、テキスト値が「=」で始まるかどうかを確認し、式の有無に応じてそのセルの値または式を設定します。

これまでのところ、機能は正常に機能しています。正確に復元できます。

ここで、このデータ範囲をテーブルに変換し、それに応じてコードを変更すると、動作が奇妙になります。テーブルを参照するために ListObject 構造を使用しています。したがって、列 B の復元コードは次のとおりです。

 If Left(soureString) = "=" Then
               'This is a formula
               Sheets("MySheet").ListObjects(1).ListColumns("Next").DataBodyRange(row).Formula = sourcestring
Else
               'This is a value
                Sheets("MySheet").ListObjects(1).ListColumns("Next").DataBodyRange(row).Value = soureString
End If

行の書き込みが完了したら、最初にループして、

Dim newRow AS listrow
Set newRow = Sheets("MySheet").Listrows.Add(AlwaysInsert:=False)
row = newRow.Index

しかし、今回はプロセスを実行します。これは私が得るものです:

B1.Formula = "=A5"
B2.Formula = "=A5"
B3.Value = ""
B4.value = "=A5"

範囲の代わりにテーブルを使用すると、数式の値がすべて同じ値に変わるのはなぜですか?

4

3 に答える 3

0

同様の問題に直面しました。理想的には、これをやめるようにExcelに指示することができますが、私はその方法を理解できませんでした. おそらく、次のことを行うと、Excelが数式をコピーしないようになるはずです。

xlApp.AutoCorrect.AutoFillFormulasInLists = false

しかし、それは私にはうまくいきませんでした。

この質問からの回答を使用して、Excel テーブル構造化参照を使用して現在の合計を作成する方法は? 助けて頂きました。理想的なソリューションとは思えませんが、機能はします。

Weightテーブルの列名 であるこの式を使用しました。#This Rowは「特殊項目指定子」であり、特別な意味を持ちます。構造化参照と呼ばれるものであるため、構文は少し奇妙に見えます。

=AVERAGE(INDEX([Weight],1):[[#This Row],[Weight]])

INDEX([Weight],1)パーツは、重量列の 1 行目の参照を示します。

パーツは、[[#This Row],[Weight]]重量列の現在の行の参照を示します。

たとえば、Weight が列 J で、現在の行が 7 の場合、これは次のようになります。

=AVERAGE(J1:J7)

8 行目では、次のようになります。

=AVERAGE(J1:J8)等々

于 2013-09-16T19:49:41.757 に答える
0

VBAに挿入するときにExcelテーブルで数式が変更されるという問題を解決する唯一の方法は、テーブルの最初の行に挿入することであり、下部または中央ではありません。後で並べ替えることができます。

EntireRowそして、テーブル自体ではなく Worksheet オブジェクトに挿入するために、常に を選択または参照します。とにかくを使用して、常に独自のワークシートにテーブルを配置しますxx.Entirerow.Insert

于 2019-07-25T20:53:59.267 に答える