こんにちは!
今回は先日、知識がないために失敗してしまったVBAの.Valueと.textの使い分けについて書きたいと思います。
忘備録的なものです。
どちらもセルの値を取得するプロパティです。
ただ、特徴がありまして…。
■.value
1,書式設定まで取得する。
Dim a As String
a = Range("A1").Value
でセルA1の値を取得します。
そのあとに
Range("B1").Value = a
セルB1にA1の値を入れるとA1の書式設定まで持ってきてします。
コピー元の書式は文字列で0埋めで値があったとします。(0001)
しかしコピー先では前0を取りたいです。
と言った時にコピー先を数値にしてしまえば前0は勝手になくなり論理的な処理がいりません。
しかし.Valueでは書式設定までコピーしてしまうのでコピー先の書式設定を数値にしていても文字列になり、前0が残ったままになります。
この対策として次に説明する.textがあります。
■.text
Dim b As string
b = Range("A1").text
Range("B1").text = b
.textは純粋に画面で見えている値のみを取得するのでコピー先の書式設定に影響を与えません。
そんな.textの弱点は「画面で見えている値のみを取得する」というところです。
たとえばセルに 2014/05/13 と入力しセルの幅を狭めると######…になってしまいます。
きちんとした値(2014/05/13)が入っていても######…と表示されている状態で.textを使うと#####…が取れます。コピーすると######…が入力されます。2014/05/13が消えてしまいます。
そんなときはセルの幅を指定して####…にさせない、という力技で対応しました;;;
.valueも.textも同じようにセルの値を取得するプロパティですがこういった細かい特徴を把握していないと修正に時間をかけてします。
気を付けましょう。
私も気を付けます(-_-;)
※メモ書きなので間違っていないという保証はありません。
気づいた点がありましたらご指摘お願いいたします。
エクセルのバージョンは2010です。
今回は先日、知識がないために失敗してしまったVBAの.Valueと.textの使い分けについて書きたいと思います。
忘備録的なものです。
どちらもセルの値を取得するプロパティです。
ただ、特徴がありまして…。
■.value
1,書式設定まで取得する。
Dim a As String
a = Range("A1").Value
でセルA1の値を取得します。
そのあとに
Range("B1").Value = a
セルB1にA1の値を入れるとA1の書式設定まで持ってきてします。
コピー元の書式は文字列で0埋めで値があったとします。(0001)
しかしコピー先では前0を取りたいです。
と言った時にコピー先を数値にしてしまえば前0は勝手になくなり論理的な処理がいりません。
しかし.Valueでは書式設定までコピーしてしまうのでコピー先の書式設定を数値にしていても文字列になり、前0が残ったままになります。
この対策として次に説明する.textがあります。
■.text
Dim b As string
b = Range("A1").text
Range("B1").text = b
.textは純粋に画面で見えている値のみを取得するのでコピー先の書式設定に影響を与えません。
そんな.textの弱点は「画面で見えている値のみを取得する」というところです。
たとえばセルに 2014/05/13 と入力しセルの幅を狭めると######…になってしまいます。
きちんとした値(2014/05/13)が入っていても######…と表示されている状態で.textを使うと#####…が取れます。コピーすると######…が入力されます。2014/05/13が消えてしまいます。
そんなときはセルの幅を指定して####…にさせない、という力技で対応しました;;;
.valueも.textも同じようにセルの値を取得するプロパティですがこういった細かい特徴を把握していないと修正に時間をかけてします。
気を付けましょう。
私も気を付けます(-_-;)
※メモ書きなので間違っていないという保証はありません。
気づいた点がありましたらご指摘お願いいたします。
エクセルのバージョンは2010です。