- - PR -
ExcelのRangeについて
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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でもエラーになります。 このような場合、どのようにすると よいのでしょうか? ご教授よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2008-11-26 16:50
DirectCast(oSheet.Cells(1,1) , Excel.Range).Text.ToString()
でもだめですか? | ||||||||||||||||
|
投稿日時: 2008-11-26 17:32
108さん、ありがとうございます。
結果はOKです。 Excelでも、列の値が 数値が文字列として保存されています になっているとOKです。 どうしてこのようになるのでしょうか? | ||||||||||||||||
|
投稿日時: 2008-11-26 17:32
質問が矛盾しています。 あるいは、例外が発生しているのはそこではないと思います。 例外は、「String から Double」への変換で発生しています。 質問は、「なにか から String」となっています。 | ||||||||||||||||
|
投稿日時: 2008-11-26 18:13
正しくは rng.Value.ToString() ではありませんか?
の割りに、 DirectCast(oSheet.Cells(1,1) , Excel.Range).Text.ToString() で OK だったんですよね。 不思議ですね。
108 さんのコードを丸写しコピペしたのであれば、また COM の参照カウントの問題にぶつかることになります。
変数の型と実際に入っている値の型と両方を意識しましょう。 Value プロパティ、Text プロパティは System.Object 型ですが、中に入っているデータは System.String かもしれませんし数値型かもしれません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 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 ] | ||||||||||||||||
|
投稿日時: 2008-11-26 18:38
みなさん、大変丁寧な回答ありがとうございました。
| ||||||||||||||||
|
投稿日時: 2008-11-26 18:40
Excel2003では、書式が標準のセルに12桁(1000億以上)の値を入れると
指数表現になります。 多分、セルの値はVariant型の実数表現になっていると推察します。 今回の話題は13桁で「文字列」ならOKということですから、ひょっとして この辺りに何か秘密が? 場違い&勘違いだったらごめんなさい。 |