CSVをインポートしたらSUMで合計が出ない。見た目は数字なのに、計算に使えない。
こうなると原因を探すだけで時間が取られますよね。実はCSVや外部システムから取り込んだ数字は「文字列」として扱われていることが多いんです。
そんなときに使うのがVALUE関数です。文字列として格納された数字を、計算できる「数値」に一発変換してくれます。
この記事では、スプレッドシートのVALUE関数の基本から*1・--との違い、エラー別の対処法まで解説します。
VALUE関数とは?文字列を数値に変換する関数
VALUE関数(読み方: バリュー関数)は、文字列を数値に変換する関数です。
名前は英語の「value(値)」からきています。Googleスプレッドシートでは「他の表計算アプリケーションとの互換性のために用意された関数」と説明されています。
VALUE関数で変換できる文字列は次の5種類です。
- 半角数字の文字列(例: “123”、”1.5″)
- カンマ区切りの数値(例: “1,234”)
- パーセント文字列(例: “75%”)→ 0.75に変換
- 日付文字列(例: “2024/3/15″)→ シリアル値に変換
- 時刻文字列(例: “12:30:00″)→ 0〜1の小数に変換
NOTE
シリアル値とは、日付や時刻を数値で表したものです。日付は1899年12月30日を起点にした通し番号、時刻は1日を1とした小数で表されます。
VALUE関数の基本的な使い方
構文と引数
=VALUE(テキスト)
引数はひとつだけです。変換したい文字列をカッコの中に入れます。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| テキスト | 必須 | 数値に変換したい文字列、またはセル参照 |
使用例:CSVデータの文字列数値を合計できるようにする
CSVインポートで取り込んだ売上データがA列に入っているとします。見た目は数字ですが、セルの左寄せになっていて文字列扱いです。
=VALUE(A2)
A2が「12500」という文字列なら、結果は数値の12500です。これでSUMやVLOOKUPの対象として使えるようになります。
カンマ付きの文字列もそのまま変換できます。
=VALUE("1,234") → 1234
=VALUE("75%") → 0.75
=VALUE("2024/3/15") → 45366(日付のシリアル値)
文字列→数値変換の3つの方法を比較|VALUE・*1・–
スプレッドシートで文字列を数値に変換する方法は、VALUE関数だけではありません。*1(1を掛ける)や--(二重マイナス)も使えます。
3つの比較表
| 方法 | 書き方 | 特徴 | 日付・時刻文字列 | 主な用途 |
|---|---|---|---|---|
| VALUE関数 | =VALUE(A1) | 意図が明確で読みやすい | 変換できる | 文字列→数値の汎用変換 |
| *1(乗算) | =A1*1 | 短く書ける | エラーになる場合あり | 数値文字列のかんたん変換 |
| –(二重マイナス) | =--A1 | 配列数式でよく使う | エラーになる場合あり | TRUE/FALSE→1/0の変換 |
*1と--は短く書けて便利です。ただし日付や時刻の文字列はエラーになることがあります。
VALUE関数なら日付・時刻の文字列もシリアル値に変換できます。「何の文字列が入っているかわからない」ときはVALUE関数が安全です。
--は主にIF関数やCOUNTIF関数の条件結果(TRUE/FALSE)を1/0に変換する用途で使われます。文字列の数値変換にも使えますが、本来の用途はブール値変換です。
実務でよくある場面別の使い方
CSVインポートデータがSUMできない
もっとも多いパターンです。CSVや外部システムから貼り付けたデータは文字列になりがちです。
SUM関数で合計しても「0」になったら、文字列が原因かもしれません。セルが左寄せになっていないか確認してみてください。
=VALUE(A2)
B列にVALUE関数を入れて数値に変換し、SUMで集計すればOKです。
データが大量にあるときは、B2に数式を入れてからB列全体にコピーしましょう。変換後の値だけ残したい場合は、B列をコピーして「値のみ貼り付け」すると数式が消えてすっきりします。
TEXT関数で変換した文字列を数値に戻す
TEXT関数で日付や数値を表示用に整えたあと、その値を再び計算に使いたいことがあります。
=TEXT(45366, "YYYY/MM/DD") → "2024/03/15"(文字列)
=VALUE("2024/03/15") → 45366(シリアル値に戻る)
TEXT関数の結果は文字列です。計算に使うにはVALUE関数で数値に戻す必要があります。
文字列形式の日付をシリアル値に変換する
外部システムから取り込んだ日付が「2024/3/15」のように文字列で入っていることがあります。このままでは日付の計算ができません。
=VALUE(A2)
A2が「2024/3/15」なら、シリアル値(整数)が返ります。あとはセルの表示形式を「日付」に変更すれば、見た目も日付になります。
#VALUE!エラーの原因と対処法
VALUE関数で変換できない文字列を渡すと#VALUE!エラーが出ます。原因は大きく5つです。
全角数字が混入している
Googleスプレッドシートでは全角数字を変換できません。「123」のような全角数字は#VALUE!エラーになります。
=VALUE("123") → #VALUE!エラー
ASC関数で半角に変換してからVALUE関数に渡しましょう。
=VALUE(ASC(A1))
NOTE
ExcelのVALUE関数は全角数字もそのまま変換できます。スプレッドシートではASC関数との組み合わせが必須です。
通貨記号・単位が含まれている
「100円」「50個」のように単位付きの文字列は変換できません。
=VALUE("100円") → #VALUE!エラー
SUBSTITUTE関数で単位を除去してから変換します。
=VALUE(SUBSTITUTE(A1, "円", ""))
英字や記号が混入している
「123abc」のように英字が混じった文字列も変換できません。
=VALUE("123abc") → #VALUE!エラー
SUBSTITUTE関数で英字部分を除去するか、そもそも英字が混入しないよう入力規則で防ぐのが根本解決です。
見えないスペース・制御文字がある
見た目は数字なのにエラーが出るときは、スペースや制御文字が混入している可能性があります。
TRIM関数とCLEAN関数で前処理してから変換しましょう。
=VALUE(TRIM(CLEAN(A1)))
TRIM関数は余分なスペースを除去します。CLEAN関数は印刷できない制御文字を除去します。両方組み合わせるとほとんどのケースに対応できます。
IFERRORで安全に変換する
変換できない文字列が混在しているときは、IFERRORで囲むとエラーを回避できます。
=IFERROR(VALUE(A1), "")
エラーのときは空白を返します。これなら大量データを一括変換しても、エラーで止まることがありません。
原因別の対処法をまとめます。
| 原因 | 例 | 対処法 |
|---|---|---|
| 全角数字 | “123” | =VALUE(ASC(A1)) |
| 単位付き | “100円”、”50個” | =VALUE(SUBSTITUTE(A1,"円","")) |
| 英字混在 | “123abc” | =VALUE(SUBSTITUTE(A1,"abc","")) または入力規則で防ぐ |
| スペース・制御文字 | ” 123 “ | =VALUE(TRIM(CLEAN(A1))) |
| 複数の原因が重なる | “ 100円” | =VALUE(SUBSTITUTE(ASC(TRIM(A1)),"円","")) |
| 原因不明 | — | =IFERROR(VALUE(A1),"") で回避 |
日付文字列の変換にはDATEVALUEも検討
VALUE関数は日付文字列もシリアル値に変換できます。ただし、日付専用のDATEVALUE関数もあります。
| 関数 | 入力 | 出力 | 使う場面 |
|---|---|---|---|
| VALUE | 数値/日付/時刻すべて | 数値(シリアル値含む) | 入力の形式が不明なとき |
| DATEVALUE | 日付文字列のみ | 日付のシリアル値 | 確実に日付とわかっているとき |
=VALUE("2024/3/15") → 45366
=DATEVALUE("2024/3/15") → 45366
結果は同じです。ただしDATEVALUE関数を使うと「この列は日付データ」という意図が数式を見た人に伝わります。確実に日付とわかっている列にはDATEVALUEを使うのがおすすめです。
一方、数値も日付も混在している列にはVALUE関数が向いています。どちらの形式でも変換してくれるからです。
まとめ
VALUE関数は、文字列として格納された数字を計算できる数値に変換する関数です。
ポイントを整理します。
- 構文は
=VALUE(テキスト)の1引数だけ - CSVインポートでSUMが効かないときの定番の解決策
*1や--と違い、日付・時刻の文字列もシリアル値に変換できる- 全角数字はASC関数、単位付きはSUBSTITUTE関数で前処理
- #VALUE!エラーはIFERRORで回避できる
- 日付専用の変換にはDATEVALUE関数も検討
まずは =VALUE(A2) でCSVデータの文字列数値を変換するところから試してみてください。

