みなさん,こんにちは。
シンノユウキ(shinno1993)です。
Excelでは,セルの値と表示値の扱いが異なります。前者はRangeオブジェクトのValueプロパティで,後者はTextプロパティとして設定されます。
これらを区別して取得したい場面があるでしょう。セルの値を取得するのは比較的簡単ですので,今回はExcelでセルの表示値(書式が設定されたテキスト)を取得する方法を紹介します。
では行きましょう!
方法1:VBAでTextプロパティを使う
セルの表示値を取得するためには,VBAでTextプロパティを使用するのが便利です。Textプロパティは,Rangeオブジェクトからセルの書式設定を考慮した表示値を取得できます。たとえば,下記のように使用します:
この際,Textを入れるセル(上記の例ではB1)の書式設定は,「文字列」にしておくことをオススメします。そうしないと,Excel側で勝手に書式を変換してしまう場合があります。
なお,もしユーザ定義関数として使用する場合は,下記のようなFunctionを標準モジュールに定義するとよいでしょう:
Public Function DISPLAY_VALUE(範囲 As Range)
DISPLAY_VALUE = 範囲.Text
End Function
方法2:CSVにエクスポートする
ExcelファイルをCSVファイルとしてエクスポートすることで,表示値のまま利用することができます。
手順は,[ファイル] → [エクスポート] → [ファイル種類の変更] → 「CSV(コンマ区切り)~」です。
これで,ExcelファイルをCSVファイルとして変換・エクスポートすることができます。
方法3:Googleスプレッドシートの「書式なしテキスト」を適用する
Googleスプレッドシートの「書式なしテキスト」を使用することで,表示値に変換することができます。
Googleスプレッドシートには,「書式なしテキスト」という書式があります。Excelでいうところの文字列に該当する書式と思っていましたが,すでに書式が設定されているセルに適用する場合,やや挙動が異なります。
Googleスプレッドシートでは,すでに書式が設定されているセルに「書式なしテキスト」を適用すると,書式が反映されたテキスト(表示値)がセルの値として適用されるのです。少し分かりづらいかもしれませんので,実際の画像で説明します。
下記では,数値にカッコを付す書式設定をしています。値は「100」で,表示値は「(100)」です。
このセルに「書式なしテキスト」を適用してみましょう:
すると,値および表示値の両方が「(100)」になっています。素晴らしい!
この機能はデータの整合性を保つためには,とても便利だと思います。常時Googleスプレッドシートを使うのはツラいかもしれませんが,この機能のためだけに使ってもよいかなと感じるくらい,素晴らしい機能だと感じました。
まとめ
今回は,セルの表示値を得るための方法について紹介しました。3つの方法を使用しましたが,もう少しスマートな方法があるのではと感じているところです。もしご存知の方がいらっしゃれば,ご連絡いただけると嬉しいです。