@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

ExcelのRangeについて

投稿者投稿内容
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2008-11-26 16:09
 こんにちは。

前回は、みなさんありがとうございました。
本日、もう1点ExcelのRangeについて教えて下さい。

VB2005であるExcelを開きます。

そして
Dim rng As Excel.Range
Dim vKMK As String = ""

rng = oSheet.Cells(1,1)
vKMK = rng.Value
としたところ
StringからDoubleへの変換は無効です
のエラーになるのです。

Excelの列の値は、数字のみの13桁なのですが
文字の場合もありますのでString型の変数に
データを取得したいのです。

vKMK = rng.Text.Tostringでもエラーになります。

このような場合、どのようにすると
よいのでしょうか?

ご教授よろしくお願いします。
108
常連さん
会議室デビュー日: 2007/12/12
投稿数: 45
投稿日時: 2008-11-26 16:50
DirectCast(oSheet.Cells(1,1) , Excel.Range).Text.ToString()
でもだめですか?
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2008-11-26 17:32
108さん、ありがとうございます。

結果はOKです。

Excelでも、列の値が
数値が文字列として保存されています
になっているとOKです。

どうしてこのようになるのでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-11-26 17:32
引用:

なびさんの書き込み (2008-11-26 16:09) より:
StringからDoubleへの変換は無効です
のエラーになるのです。

Excelの列の値は、数字のみの13桁なのですが
文字の場合もありますのでString型の変数に
データを取得したい
のです。


質問が矛盾しています。
あるいは、例外が発生しているのはそこではないと思います。

例外は、「String から Double」への変換で発生しています。
質問は、「なにか から String」となっています。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-11-26 18:13
引用:

なびさんの書き込み (2008-11-26 16:09) より:

vKMK = rng.Value
としたところ
StringからDoubleへの変換は無効です
のエラーになるのです。


正しくは rng.Value.ToString() ではありませんか?

引用:

vKMK = rng.Text.Tostringでもエラーになります。


の割りに、
 DirectCast(oSheet.Cells(1,1) , Excel.Range).Text.ToString()
で OK だったんですよね。 不思議ですね。

引用:

結果はOKです。


108 さんのコードを丸写しコピペしたのであれば、また COM の参照カウントの問題にぶつかることになります。

引用:

Excelでも、列の値が
数値が文字列として保存されています
になっているとOKです。


変数の型と実際に入っている値の型と両方を意識しましょう。 Value プロパティ、Text プロパティは System.Object 型ですが、中に入っているデータは System.String かもしれませんし数値型かもしれません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
108
常連さん
会議室デビュー日: 2007/12/12
投稿数: 45
投稿日時: 2008-11-26 18:29
以前ちょうど関わったところ(火噴きっぱなし)ですが
ここは私も不思議に思いました。
思いながらそのまま・・・

oSheet.Cells(1,1)はRangeを返す?
あれ 
oSheet.Cells(1,1).Value
oSheet.Cells.Item(1,1).Valueは?
と考えていましたが

なぜか上記のようにキャストしてText.ToStringで取れたので
そのまま突っ走った記憶があります。

中途半端に回答してしまい申し訳ありませんでした。

[ メッセージ編集済み 編集者: 108 編集日時 2008-11-26 18:32 ]
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2008-11-26 18:38
みなさん、大変丁寧な回答ありがとうございました。


白ネコ
会議室デビュー日: 2008/11/26
投稿数: 1
投稿日時: 2008-11-26 18:40
Excel2003では、書式が標準のセルに12桁(1000億以上)の値を入れると
指数表現になります。
多分、セルの値はVariant型の実数表現になっていると推察します。

今回の話題は13桁で「文字列」ならOKということですから、ひょっとして
この辺りに何か秘密が?

場違い&勘違いだったらごめんなさい。

スキルアップ/キャリアアップ(JOB@IT)