- ベストアンサー
VBAで文字列を数値に変換させるには?
VBA初心者です。 当事務所の事務システム(オラクル)をバージョンアップした際、出力帳票をエクセルのワークシートで出すようにしました。 以前は翼システムの帳票印刷用ソフトに連動させ、すぐ印刷できるものにしていたのですが、今後は出力結果から、合計行を後で(エクセルの段階で)だして付け加えたりなどしなければなりません。 事務所には年配の職員のかたもおられ、やはり自動でできるようにして欲しいとの要望があり、いくつかマクロを作りました。 しかし、各帳票エクセルに出力された際、数字が全て文字列で表示されてしまうので、まずこれを数値に直さなければなりません。 (ココから下) 帳票全部が数字ならば、Ctr+Aで範囲選択し、エクセルのツールで数値に直せばいいのですが、そうではないため、範囲選択するところから含めてマクロにしたいのです。 しかし、「文字列→数値」ができません。マクロのツールを使ってでは、それに値する行が作られませんでした。 Format関数をつかうのでしょうか? ????? 初心者的質問で申し訳ありません。 よろしくお願いします。 Sub Macro会費納入状況表データ() ' ' Macro状況表データ Macro ' マクロ記録日 : 2005/11/17 ユーザー名 : sn ' ' Columns("C:C").Select Selection.Insert Shift:=xlToRight Rows("5:5").Select Selection.Insert Shift:=xlDown Range("D6").Select Selection.CurrentRegion.Select (ココになにかいれるとおもうのですが) Columns("C:C").Select Selection.Delete Shift:=xlToLeft Range("A6").Select Selection.CurrentRegion.Select Selection.Copy End Sub
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。KenKen_SP です。 取り合えず、こんな感じのコードを試してみて下さい。 IsNumeric 関数で数値化できるか調べてから、Cdbl 関数で数値化 しています。ただ、セルをひとつずつ調べるのではなく、配列内 で処理してますので、セルの表示形式等に影響されるかもしれません。 Sub TESTMACRO() Dim BUF As Variant Dim vntE As Variant Columns("C:C").Insert Shift:=xlToRight Rows("5:5").Insert Shift:=xlDown Range("D6").CurrentRegion.Select BUF = Selection.Value For Each vntE In BUF If IsNumeric(vntE) Then vntE = CDbl(vntE) End If Next vntE Selection.Value = BUF Columns("C:C").Delete Shift:=xlToLeft Range("A6").CurrentRegion.Select Selection.Copy End Sub
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
概ねこんな感じで・ 数値が入っているのに、文字列として表示されてしまうのは、セルの書式が文字列になっているためだと思います。 それで、書式を標準にしています。 valはいらないかもしれません Dim r As Range, x As Range Set r = Selection.CurrentRegion For Each x In r If IsNumeric(x.Value) Then x.NumberFormatLocal = "G/標準" x.Value = Val(x.Value) End If Next
お礼
ありがとうございました。出来ました。内容については少し勉強しなければなりません。がんばります。