アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBA でテーブルの最終行を検出しその下にデーター追加したいのですが

excel テーブル作成で列の最初の、セルに数式をセットしました

その後、その行を削除し、
計算式表示にしても何も表示されない状態
(見た目 数式も、データーもない空のテーブル)の状態から

最初の行にデーターをセットすると、数式が表示され実行されました
オートコンプリートが有効だからでしょうか?

見た目、数式も、データーもない空のテーブルの状態で、VBAでデーター追加時
数式が反映される状態か(数式がセットされているか)判別する方法はあるのでしょうか?

質問者からの補足コメント

  • うーん・・・

    回答ありがとうございます。
    オートコンプリートじゃなく オートコレクトですね
    すいません間違っていました

    テーブル機能を使いたいのでオートコレクトは、有効にしたいです

    テーブル設定直後は数式なしですが、各列の一行目に数式を設定し(数式表示にしていると数式が見れますが)設定した行を削除しますと、数式表示にしていても、見た目 数式は消えて空のテーブルに見えます

    このテーブルに数式の参照しているセルにデーター入力すると数式が見え、数式どうりの計算結果が反映されます
    オートコレクト??
    この直前は、数式を設定した行を削除しているので、数式の確認はできないです この状態での数式の確認が可能か知りたいのですが?

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/03/18 19:14
  • うーん・・・

    回答ありがとうございます。
    No1の方への補足のとうりですが

    VBAテーブル初心者です。

    VBAでテーブルの操作をしようと、思っています

    テーブルで、数式をセットし最終行の次の行に入力するとき Range.Rows.Count から+1で入力しようと思ったのですがテーブル作成で、数式のみの行もカウントされるようですので+1でやってしまうと数式のみの行+1に入力されます

    数式のみの行から入力する方法が知りたいです

    これは最初だけで次からは、Range.Rows.Count+1で、最終行の次に入力できると思いますが

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/03/18 19:47
  • HasFormulaプロパティでは数式行を削除した状態では falseとなるようです

      補足日時:2023/03/18 19:53
  • やはりそうですか、試行錯誤を繰り返してそうじゃないかと想像できていたのですが、いくらググってもその辺の情報にであわなったので、ありがとうございました

    vba 初心者 なのですが
    うまく説明できなくて申し訳ないです

    やりたいことは、
    作成したフォームの textbox から最終行の次への入力です

    テーブルを作った直後は、DataBodyRang は Nothing です
    一行目のcolumnに数式を設定します
    見た目には、空に見えます(数式非表示に設定している場合)

    普通、新しいデーターは、最終行を探して+1行に、入力とすると思うのですが、
    これだと、一行目に数式が入っているため2行目から、入ってしまいます

    一行目から VBA でデーターを入力する手順を模索している過程で
    この質問を出しました

    手順(色々あると思いますが)
    のいい方法を
    教えていただけるとありがたいです。

    No.4の回答に寄せられた補足コメントです。 補足日時:2023/03/20 19:36

A 回答 (4件)

No.1の回答者です。



質問文(補足を含む)での数式の行の削除の動作が、テーブルの
場合だと通常の行の削除とは違うようです。

見出し行が表示されている場合は、行番号を選択して右クリック
からの削除で見出し行以外の行を削除したとき、行が削除され
値はクリアされますが、数式については見出し行へと何らかの
データとして残るようです。

例えば、テーブルとは関係ない離れた列に、テーブルと同じ行へ
仮の値を入れたとします(複数行あれば同じだけ入れる)。
見出し行が表示された状態で、見出し行以外の指定の行全体を
削除した場合、見出し行の下にある行と同じテーブル範囲外の
値が一番上の行と同じものが残ります。
テーブル内ではすべて消えているように見えますが、実際には
何らかのデータが見出し行があることによって削除されてないと
思われます。(関連する情報を探せなかったので、推測です)

テーブルの見出し行を非表示にした場合、テーブルごと完全に
削除されているので、通常の削除と同じ動作をします。

このことから、見出し行があることによって、行の削除だけでの
データの削除では、数式などはクリアされないということが確認
できると思います。

見出し行を表示した状態で完全に削除したい場合は、右クリック
にある[数式と値のクリア]を選択して、行削除も同時にします。
これで完全に数式がない状態になるはずです。
VBAでの確認も不要になるので、質問に関する問題は解決して
いるかと思います。

ちなみに、DataBodyRangeで指定した範囲でのRows.Countは
見出し行を含まないので、テーブルに数式を入れるのなら+1は
不要だと思います。
オートコレクトが働いている場合なら列内に数式を入れれば、列
全体に設定されるからです。
数式のみの列と別の列に、数式のある行の下に値を入れれば、
テーブルか自動で拡張するので、参照する数式も追加されてる
はずなので、入力するセル指定は問題ないはずです。
数式と同じ行の別列のセルなら、Countで得た値で指定すれば、
同じ行に入るはずです。

具体的な行列番号やテーブルの行数列数、及び数式等を入れたい
列などを補足すれば、他の回答者も回答しやすいかと思います。
質問や補足の内容だけでは、推測での回答になりやすいので。
(たぶん私は、これ以上の追加回答はしないと思います。)
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2023/03/20 22:06

ご質問は、1行目が未入力のレコードかを判定したい、ということでしょうか。


でしたら、テーブルの DataBodyRange が Nothing かどうかで判定できます。
    • good
    • 0

こんにちは



なさりたいことがイマイチよくわからないのですが・・・

◇セルに数式が設定されているかどうかを調べたいのなら
HasFormulaプロパティを調べることで、数式があるかないかを確認できます。
https://learn.microsoft.com/ja-jp/office/vba/api …

◇あるセルを参照している数式があるかを調べたいのなら
参照先のセル範囲は、Dependents プロパティを調べることでわかります。
ただし、参照先のセルが存在しない場合(=どこからも参照されていない場合)はエラーになりますので、エラー処理を行っておく必要があるでしょう。
https://learn.microsoft.com/ja-jp/office/vba/api …
(また、別シートからの参照は上記プロパティには反映されません。)
この回答への補足あり
    • good
    • 0

[オートコレクト](入力オートフォーマット)にある設定ですね。


https://www.crie.co.jp/chokotech/detail/53/

[テーブルに数式をコピーして集計列を作成]にチェックが付いて
いると自動で数式をコピーしてくれるものです。
https://learn.microsoft.com/ja-jp/office/vba/api …
この設定がTRUEなら、コピーしてくれます。
Application.AutoCorrect.AutoFillFormulasInLists = True

こちら↓のように個別指定しなくても設定できるものです。
https://excel-ubara.com/excelvba1/EXCELVBA431.ht …

数式であれば、オートコレクトが有効になっていることでコピー
されますので、反映している状態になるはずです。
以下のサイトの注意点だけ気にして設定すれば、反映されてる
VBAになると思いますよ。
https://neverendworks.com/news/notes-on-setting- …
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!