私の場合、よくAccessからExcelにデータ出力をします。
何らかの事情で数値が格納されているフィールドの型が文字列だったりすると
Excelに出力した際、「このセルにある数値が、テキスト形式か、またはアポストロフィで始まっています。」という警告が表示されます。
↓↓セルの左上に緑マークが表示されています↓↓
カーソルをあてると「数値が文字列として保存されています」という警告が表示されます。
エラーではないにしてもその後の処理に影響するのでこのままにはしておきたくありません。そこでこの警告を一気に数字に変換する方法をご紹介します。
参考プログラムは自己責任でご利用お願いします。ご利用の前に元データのバックアップを強くおすすめします!
「数値が文字列として保存されています」を一気に数値変換する方法
今回は「数値が文字列として保存されています」を一気に数値変換する方法を3通りご紹介します。
必要に応じて使い分けてくださいね!
手動で変換する
手動で警告を解除するためには警告が表示されている該当のセルを範囲指定して選択し、
警告マークをクリックして「数値に変換する」でOKです。
ただし、範囲指定する際警告が表示されている最初のセル(範囲の左上)から指定する必要があります。
目視で確認しながら手動で行う場合は問題ないですね!
マクロで変換する
データが可変でどのセルから最初に警告が表示されるか不明な場合(目視で確認せずに一気に処理したい場合)はマクロで一気に処理したいですね。
実は警告アイコンから処理する以外に列を選んで「区切り位置」を設定する方法もあります。
これを手動で実行する場合、以下の手順となります。
- 対象の列を選択
- データタブの【区切り位置】をクリック
- 完了ボタンをクリック(諸々の設定は不要)
この方法は複数列を指定することができないので列数が多い場合は面倒です。
複数列を指定すると、「一度に変換できるのは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
※列幅自動調整はおまけです(^▽^)/
▼▼以下の記事でも利用しています▼▼