• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。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

hinahiyo
質問者

お礼

ありがとうございました。出来ました。内容については少し勉強しなければなりません。がんばります。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

概ねこんな感じで・ 数値が入っているのに、文字列として表示されてしまうのは、セルの書式が文字列になっているためだと思います。 それで、書式を標準にしています。 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