質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

4298閲覧

PowerShellでエクセルのセル内数値0を変数に格納しようとするとnull値のエラーが発生する

dragonemox

総合スコア7

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/04/03 07:13

編集2020/04/03 07:21

前提

PowerShellでエクセルのセル内の数字を抜き出し、計算するプログラムを書いてます。
セルに入った数値を変数に格納する機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

null 値の式ではメソッドを呼び出せません。 発生場所 C:\Users\~~~.ps1:36 文字:13 + $prospect = $sheet.Cells.Item($x,$w) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) []、RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull null 値の式ではメソッドを呼び出せません。 発生場所 C:\Users\~~~.ps1:44 文字:17 + $sheet.Cells.Item($x,$w+1) = $sur_pros + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) []、RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull

該当のソースコード

#行ごとに処理 for ($x=15; $x -le 68; $x++){ ###中略### #列ごとに処理 for ($w=9; $w -le 89; $w+=6){ #該当するセル内の値を変数$prospectに保存 $prospect = $sheet.Cells.Item($x,$w) if ($prospect -eq $null){ continue }else{ #月の余剰(surplus)と増減見込み時間(prospect)を掛け算する。それを地域毎に繰り返す。 $sur_pros = $surplus * $prospect #上記掛け算結果をセルに記録する。 $sheet.Cells.Item($x,$w+1) = $sur_pros } } }

実現したいこと

ここでは、セル内に 0 という数値が書かれていてもnullが返ってしまう事で悩んでいます。
($prospectで参照したセルに 0 が入っているとnullのエラーが返ってきます)
PowerShellで処理するとエクセルの空白も 0 も同じようにnullとして認識されますが、
0 が記入されている場合はnullではなく素直に 0 という数値を返して変数に格納したいというのがここで実現したいことです。

補足情報(FW/ツールのバージョンなど)

以前、空白セルを含んだエクセルの処理を考えていた際に
if (変数 -eq $null){
continue
}else{~
という処理をいれたらnullの時は処理をスキップして上手くいった事がありますが
これは空白セルのスキップだった(数値0とはまたケースが違う)から
上手くいったのかな...と思っています。
※この時はセルに1が入っているか空白のセルしかない場合の処理をしていました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました(とんでもないケアレスミスでした)。

上記

$prospect = $sheet.Cells.Item($x,$w)

と記載されていますが、末尾に.Value()を付けて解決しました。

#正しい記述 $prospect = $sheet.Cells.Item($x,$w).Value()

投稿2020/04/03 08:12

dragonemox

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問