C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
C# と VB.NET の入門サイト
Re[4]: C# Excelの空白セルを判定したい
(過去ログ 140 を表示中)
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法/規約
トピック表示
ランキング
記事検索
過去ログ
[トピック内 5 記事 (1 - 5 表示)] <<
0
>>
■82094
/ inTopicNo.1)
C# Excelの空白セルを判定したい
▼
■
□投稿者/ ごう
(13回)-(2016/12/09(Fri) 11:31:53)
分類:[.NET 全般]
Visual Studio 2013を使用しC#でExcelのセルの値を参照し、
別のファイルへ転記するプログラムを作成しています。
以下のプログラムを書き、rangeのValueプロパティの値で空白を判断しようとしました。
Microsoft.Office.Interop.Excel.Range range = sheet.Cells[row, col];
空白セルのValueに"0.0"と入ってきてしまうことがあり、
セルに数値"0"を入力した場合と区別ができなくて困っています。
他のサイトも検索しましたが、IsEmptyをどこで使えばよいか(Valueはstring型でないため使えないと思う)わからず困っています。
空白セルの判定方法についてご教示いただきたく、よろしくお願いいたします。
引用返信
編集キー/
編集
■82097
/ inTopicNo.2)
Re[1]: C# Excelの空白セルを判定したい
▲
▼
■
□投稿者/ 魔界の仮面弁士
(1006回)-(2016/12/09(Fri) 14:44:15)
■
No82094
(ごう さん) に返信
> Microsoft.Office.Interop.Excel.Range range = sheet.Cells[row, col];
ReleaseComObject のために、Cells も変数に取った方が
よいかも知れませんが、それはさておき。
> 空白セルのValueに"0.0"と入ってきてしまうことがあり、
具体的にはどういう時でしょうか?
検証可能なワークブックをどこかにアップロードいただくか、
あるいは再現できるデータ入力手順を提示いただけると助かります。
Value プロパティや Value2 プロパティが返す値のデータ型は、
VBA 的には Variant 、C# 側としては dynamic または object ですが、
実際の型は、Range の内容によって変化します。
ただ、本当に空白セルであれば、Variant の Empty が返されます。
これは、「文字列としては ""、数値としてのゼロ」にあたる値ですが、
C# 側では null 扱いになるはずです。
それが 0.0 として返されてしまうということは、
「実際には空白セルではなかった」可能性が思い当たります。
ちなみに、該当する Range オブジェクトの FormulaR1C1 プロパティや
Text プロパティは、どのような値を返してきますか?
また、Application オブジェクトに対して .Evaluate("ISBLANK(Sheet1!A1)") を
呼び出したり、あるいはワークシート上の他のセルに
=ISBLANK(A1) などの数式を書いた場合に true が返されますか?
もしも ISBLANK 関数が false を返すのなら、そのセルがどういう状態なのかを
教えていただくか、検証可能なブックを用意していただけると、
原因を特定しやすくなります。
> IsEmptyをどこで使えばよいか
VBA の IsEmpty 関数のことだとしたら、今回、出番は無いと思います。
引用返信
編集キー/
編集
■82110
/ inTopicNo.3)
Re[2]: C# Excelの空白セルを判定したい
▲
▼
■
□投稿者/ ごう
(14回)-(2016/12/12(Mon) 13:54:52)
回答ありがとうございました。
検証可能なワークブックをアップロードすることができないので
当方で確認できた現象について報告させてください。
現象のスクリーンショットは以下の通りです。(firestorageサービスを利用)
http://xfs.jp/pNQzHX
G10、G11 2つのセルに対して
=ISBLANK(G10)と=ISBLANK(G11)を書いてその結果の違いを確認しました。
G10はブランクではなく、G11はブランクでした。
G10セルにカーソルを置き、値を確認すると"0"となっておりました。
これが、range.Valueが"0.0"となってしまう原因でした。
不思議なのは、G10セルの文字色を黒にしたり、
G10セルの幅を広げたりしてみましたが、"0"という数字がセル上で確認できないことです。
これも調べたら、Excelファイルの設定で「ゼロ値のセルにゼロを表示する」のチェックが外れていました。
http://www.relief.jp/itnote/archives/018327.php
引用返信
編集キー/
編集
■82111
/ inTopicNo.4)
Re[3]: C# Excelの空白セルを判定したい
▲
▼
■
□投稿者/ 魔界の仮面弁士
(1008回)-(2016/12/12(Mon) 14:51:00)
■
No82110
(ごう さん) に返信
> これも調べたら、Excelファイルの設定で「ゼロ値のセルにゼロを表示する」のチェックが外れていました。
この設定は、Excel.Window オブジェクトの DisplayZeros プロパティで確認/変更できます。
また、現在表示されている Window オブジェクト を取得するには、
Excel.Application オブジェクトの ActiveWindow プロパティを使います。
すべての Window オブジェクトを列挙するのであれば、
Workbook オブジェクト(または Application オブジェクト)の
Windows プロパティから Excel.Windows コレクションを取得します。
> セルに数値"0"を入力した場合と区別ができなくて困っています。
非表示なだけで値としては 0 なので、計算上は区別する必要は無いと思いますが、
Window オブジェクトが一つしか無い場合においては、Range オブジェクトの
Text プロパティを使うことで、G10 セルから 空文字列 を得ることができます。
しかし Window オブジェクトが複数ある場合には、Range オブジェクトからでは
正確に辿れません。[表示]リボンの[新しいウィンドウを開く]で、同じシートを表示すると、
同じシートでも、ウィンドウごとにゼロ表示の on/off を切り替えられるためです。
この場合は、現 Window の DisplayZeros プロパティの確認も必要になるでしょう。
引用返信
編集キー/
編集
■82168
/ inTopicNo.5)
Re[4]: C# Excelの空白セルを判定したい
▲
▼
■
□投稿者/ ごう
(15回)-(2016/12/14(Wed) 12:57:58)
回答ありがとうございます。
>この設定は、Excel.Window オブジェクトの DisplayZeros プロパティで確認/変更できます。
DisplayZeros プロパティを確認し、0を出力していないブックについては
セルに0が入ってきたとき空白扱いとするように対応することにしました。
(セルに"0"のみが入ることはない、と確認できたため)
解決済み
引用返信
編集キー/
編集
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
過去ログには書き込み不可
管理者用
-
Child Tree
-