[[20220802172958]] 『見た目は同じ結果でもよく調べると使い分けた方が』(ngk) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『見た目は同じ結果でもよく調べると使い分けた方がいいかもしれない命令文』(ngk)

こんにちは。
今までRange(またはCells)オブジェクトの.Valueと.Formula(またはFormulaR1C1)は
.Valueはセル値の読み込み、.Formulaはセルへの書き込みだと思っていて、
ここの皆様が書き込みに.Valueを使っているのを見てきちんと調べたことで
漸く.Valueと.Formulaの違いに気づけました。
ありがとうございます。

そこで質問なのですが、上記のように結果が同じに見えて
「実は使い分けた方がいい」といったプロパティやメソッドってありますか?

ご教授頂けたら幸甚です。

< 使用 Excel:unknown、使用 OS:unknown >


覚えたてなので私もいろいろ知りたいです。

 .Value   ・・・計算結果。表示形式に影響される。書式は無視する。
 .Value2 ・・・計算結果。表示形式、書式を無視する。
 .Text  ・・・計算結果。表示形式、書式に影響される
 .Formula ・・・A1形式の数式
 .Formula2・・・R1C1形式の数式

こんな感じだと思ってます。間違っていたらすみません。

( 下手の横好き) 2022/08/02(火) 17:54


>漸く.Valueと.Formulaの違いに気づけました。
どのように気付いたのでしょうね。ははは
(haha) 2022/08/02(火) 18:15

.Text は文字列だと認識していたんだが。
(text) 2022/08/02(火) 18:19

 .Text

は強制的に文字列型で返してくるんですね。勉強になりました。
数字だけのシート名をWorksheetsの引数に充てるときに便利そうですね。
(下手の横好き) 2022/08/02(火) 18:24


 主旨からはちょっとズレるんですけど... ^^;

    Sub 支離滅裂実験3()
        Rows.Delete
        [A1] = "=1/3"
        [C1] = "=(A1=B1)"
        [D1] = "=DELTA(A1,B1)"
        [E1] = "=ValueComp(A1,B1)"
        [A1:E15].FillDown

        [B1].Value = [A1].Value
        [B2].Value = [B1].Value
        [B3].Value = [B1].Value2
        [B4].Value = [B1].Formula
        [B5].Value = [B1].Text

        [B6].Value2 = [A1].Value
        [B7].Value2 = [B1].Value
        [B8].Value2 = [B1].Value2
        [B9].Value2 = [B1].Formula
        [B10].Value2 = [B1].Text

        [B11].Formula = [A1].Value
        [B12].Formula = [B1].Value
        [B13].Formula = [B1].Value2
        [B14].Formula = [B1].Formula
        [B15].Formula = [B1].Text

        [A17] = "=NegativeZero()"
        [C17] = "=(A17=B17)"
        [D17] = "=DELTA(A17,B17)"
        [E17] = "=ValueComp(A17,B17)"
        [A17:E28].FillDown

        [B17].Value = [A17].Value
        [B18].Value = [B17].Value
        [B19].Value = [B17].Value2
        [B20].Value = [B17].Formula

        [B21].Value2 = [A17].Value
        [B22].Value2 = [B17].Value
        [B23].Value2 = [B17].Value2
        [B24].Value2 = [B17].Formula

        [B25].Formula = [A17].Value
        [B26].Formula = [B17].Value
        [B27].Formula = [B17].Value2
        [B28].Formula = [B17].Formula
    End Sub
    Function NegativeZero() As Double
        NegativeZero = -0#
    End Function
    Function ValueComp(arg1, arg2) As Boolean
        ValueComp = (arg1 = arg2)
    End Function

 (↑別に何かを諭したい訳でもありません。ただの遊びです)

(白茶) 2022/08/02(火) 23:18


Value2 シリアル値が欲しいとき

Formula 普通の数式を入れるとき

Text 昔は、表示された状態をそのまま取得できたので使ったけど今は使わない。

      なんかValueプロパティより遅かったし(昔テストした結果、特に書き込む時)
      セルに####と表示されてたら、取得も####。

他は、必要に応じて使うだけで、ほとんどValueプロパティ

この程度しか使ってません。
(これだけっす) 2022/08/03(水) 10:04


 >特に書き込む時
 Textプロパティは取得専門では?
(ねむねむ) 2022/08/03(水) 10:11

 >Textプロパティは取得専門では?

 全然知らなかった。調べもしてない。
 だから遅かったのか、気楽にどっちが速いの?と思って試してみただけだった。
(これだけっす) 2022/08/03(水) 10:44

 >見た目は同じ結果でもよく調べると使い分けた方がいいかもしれない命令文

ん〜。。。。
これはエクセルのセルの独特な仕様(機能?)と関係あるのかなぁ。。。
(他のソフトも同じかも知れませんが^^;)

1)キーボードから入力されるのは基本は文字
2)エクセルのセルに入力したその文字列がどのように読めるかでエクセルが勝手に判断してくれている
文字
数値
日付
数式

つまりセルに入力するときは、値を入れても数式を入れてもその後で型が判断されるので、
書く場所が、ValueでもFormulaでも結果が同じになる。
ですが読むときはそうはいかないです。
値なのか、
数式(エクセルが数式と読める文字列)なのか、
セルの書式設定で表示されている文字列なのか。

使い分けというか、
たまたま、結果が同じになりますが、
コードには値なのか数式なのか意図を明示すると後日読みやすいかなと思われます。

他にもそういうことがあるかどうかですが、
ないとは思われますが、ないとも言い切れないかも?
エクセルには端的には便利でも、ある場面ではお節介と思われる機能がたまにありますので。

ま、ヘルプをちゃんと読むことですね。
ヘルプは初心者を助ける文書ではなく、VBAを扱う人のための手助けになる文書です。
どうだっけなというときはヘルプで仕様を確認することです。
また、各オブジェクトのプロパティやメソッド(メンバーという)を知りたいときは、
オブジェクトブラウザで調べることが可能です。

(まっつわん) 2022/08/03(水) 13:42


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.