Access

EXCEL「数値が文字列として保存されています」を一気に数値変換する方法

記事内に商品プロモーションを含む場合があります

私の場合、よくAccessからExcelにデータ出力をします。

何らかの事情で数値が格納されているフィールドの型が文字列だったりすると

Excelに出力した際、「このセルにある数値が、テキスト形式か、またはアポストロフィで始まっています。」という警告が表示されます。

↓↓セルの左上に緑マークが表示されています↓↓

カーソルをあてると「数値が文字列として保存されています」という警告が表示されます。

エラーではないにしてもその後の処理に影響するのでこのままにはしておきたくありません。そこでこの警告を一気に数字に変換する方法をご紹介します。

AccessからExcelへ
AccessからVBAでEXCELへ帳票出力するVBAでAccessからExcelにデータ出力する方法は、エクスポートする方法とレコードセットをEXCELファイルにコピーする方法があります。コピーする際も新規ファイルに出力する・テンプレートに出力する方法があります。また1行ずつデータを加工しながら出力する方法もあります。...

参考プログラムは自己責任でご利用お願いします。ご利用の前に元データのバックアップを強くおすすめします!

「数値が文字列として保存されています」を一気に数値変換する方法

今回は「数値が文字列として保存されています」を一気に数値変換する方法を3通りご紹介します。

必要に応じて使い分けてくださいね!

手動で変換する

手動で警告を解除するためには警告が表示されている該当のセルを範囲指定して選択し、

警告マークをクリックして「数値に変換する」でOKです。

ただし、範囲指定する際警告が表示されている最初のセル(範囲の左上)から指定する必要があります。

目視で確認しながら手動で行う場合は問題ないですね!

マクロで変換する

データが可変でどのセルから最初に警告が表示されるか不明な場合(目視で確認せずに一気に処理したい場合)はマクロで一気に処理したいですね。

実は警告アイコンから処理する以外に列を選んで「区切り位置」を設定する方法もあります。

これを手動で実行する場合、以下の手順となります。

  1. 対象の列を選択
  2. データタブの【区切り位置】をクリック
  3. 完了ボタンをクリック(諸々の設定は不要)

この方法は複数列を指定することができないので列数が多い場合は面倒です。

複数列を指定すると、「一度に変換できるのは1列だけです。範囲には複数の行を選択できますが、列は1列しか選択できません。1列だけのセル範囲を選択し、再度実行してください。」とエラーが表示されます。

そこで、一気にマクロでやってしまいます。

サンプルコードをコピペでご利用くださいね。

Sub AllStrtoInt()
    Dim colcnt  As Integer

    '全列文字列で保存されている数値を数値に変換
    colcnt = 1
    While Cells(1, colcnt) <> ""
        Columns(colcnt).TextToColumns Comma:=True
        colcnt = colcnt + 1
    Wend
        
End Sub

 

このマクロを実行すると、文字列として格納された数値列をすべて数値に変換することができます。

尚、途中に文字列のセルがあっても問題ないです。

この方法は列を選んで区切り位置を設定しているだけです。

【cells(〇,〇).value = cells(〇,〇).value】のように

値をセットしなおすという方法でも解決できますがとても遅いのでおすすめできません。

Accessから変換する

この方法を利用して、AccessからExcelにデータ出力した直後にAccess側から処理を実行してしまうと、Excelのマクロも使わず処理を完了できます。

Excelのマクロとほとんど変わりないコードですが参考までにサンプルを掲載しておきます。

    'EXCELアプリケーションを起動
    Set xlapp = CreateObject("Excel.Application")
    
    Set myCn = CurrentProject.Connection
    
    With xlapp
        .Worksheets("Sheet1").Select

        '列幅自動調整
        .Cells.EntireColumn.AutoFit
        
        '全列文字列で保存されている数値を数値に変換
        colcnt = 1
        While Nz(.Cells(1, colcnt)) <> ""
            .Columns(colcnt).TextToColumns Comma:=True
            colcnt = colcnt + 1
        Wend

    End With

※列幅自動調整はおまけです(^▽^)/

▼▼以下の記事でも利用しています▼▼

【ACCESS VBA】Excelファイルを取り込んで必要な項目のみに整形したExcelファイルを出力する今回は『ベースとなるExcelファイル(列項目可変)を加工して必要なフィールドだけに整形して新しいExcelファイルを作成する方法』をご...

 

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。