• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Val関数をVBAで使うには?)

Val関数をVBAで使うには?

このQ&Aのポイント
  • Excel VBAでVal関数を使って、文字列を数値に変換する方法を教えてください。
  • A列の4からj行目までの文字列をVal関数で数値に変換したいですが、どうすればいいですか?
  • j行目までの文字列をVal関数を使用して数値に変換したいのですが、j+1行目からk行目までは数字以外の文字列が入っています。

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

  • ベストアンサー
回答No.4

No.2 です。No.3さんは NumberFormatLocal プロパティにおいて、セルの書式を「G/標準」に設定していらっしゃいます。もしも、これさえも必要ないという場合は、コードは更に短く書けますね。 Sub Value_num() Range("A:A").Value = Range("A:A").Value End Sub

t2grp
質問者

お礼

回答ありがとうございます このコードでも無事変換できました! 一番この方法が簡単なので、これで行きたいと思います 本当にありがとうございました

その他の回答 (4)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.5

 [Val 関数] は、文字列中に数字以外の文字が見つかると、読み込みを中止します。  つまり、 Val("12345678AB") = 12345678 ですが、 Val("AB12345678") = 0 ということになります。  数字の前の文字列も消してしまって、セル内を数字のみにする、つまり「"AB1234CD5678EF"」を「12345678」に変えたいというような場合は、正規表現で、数字以外を消してしまうのがよいかと存じます。 Sub Value_num()   Dim objRE As Object   Dim j As Integer   Set objRE = CreateObject("VBScript.RegExp")   With objRE     .Global = True     .Pattern = "[^0-9]"     For j = 4 To 98       Range("A" & j).Value = .Replace(Range("A" & j).Value, "")       Next   End With End Sub  ちなみに、j行目までの文字列には「数字以外」は含まれない、つまり、j行目までの文字列は「数字のみ」でできている、ということでしたら、VBAを使わなくても 1)ワークシート上の何も入力されていないセルを選択し、コピー([Ctrl] + [C]) 2)A列のj行目までを選択 3)[編集(E)] - [形式を選択して貼り付け(S)...] - [加算(D)] - [OK] で、一発で数値化できます。

t2grp
質問者

お礼

回答ありがとうございます 数値12345678のみがJ列まであり、数値を含むAB12345678がK列まであるという場合で、文字列になっている数値のみJ列まで数値に変換したいという希望でした(J+1からK列までは文字列のまま) EXCEL上で変換するのは確認しました こんな方法もあるんですね でもVBAでどうしてもやりたかったので、回答No.4のMarcoRossiItalyさんの回答をベストアンサーとしました

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! Val関数を使用する場合 仮にあるセル(A4セル)に 1201AB というデータがあるとすると Val(Range("A4")) とすれば 1201 という値を返しますが、 今回の場合4~j行目まではすべて8桁固定の数値で、 それ以降はアルファベットを含んだ数値だというコトですので、 とありますので、 単純に Sub Sample1() With Range("A:A") .NumberFormatLocal = "G/標準" .Value = .Value End With End Sub ではダメですか?m(_ _)m

t2grp
質問者

お礼

回答ありがとうございます このコードで無事変換できました! NumberFormatLocalって初めて見たので、調べました 便利なプロパティがあるのですね

回答No.2

No.1 です。「No.1 のコードは使わないでください」。申し訳ありません、ミスしました。 A 列には数値の他に、文字列のセルも含まれるのでしたね。No.1 のコードでは、文字列をゼロで上書きしてしまいます。If の行だけ次のとおり修正しました。失礼しました。 Option Explicit Sub Value_num() Dim J As Integer For J = 4 To 98  If Val(Cells(J, 1)) > 0 Then  Cells(J, 1).Value = Val(Cells(J, 1))  End If Next J End Sub または、If の行は No.1 のままにしておいても、その 2 行下の「Val(Cells(J, 1))」を「Cells(J, 1).Value」に書き換え、Val を使わなければ、文字列をゼロで上書きしません。お手元のシートの状況がこちらの想定どおりなら、それでも数値文字列を数値にしてくれると思います。 参考 URL は、ただの No.1 の再掲(繰り返しの構文)です。

参考URL:
http://www.eurus.dti.ne.jp/yoneyama/Excel/vba/vba_for_next.html
t2grp
質問者

お礼

このコードで無事変換できました! ありがとうございます あとはJが98固定ではなくて、J>4なので、 98より大きめの数値をいれてFor~Next文を回してみたいと思います 

回答No.1

「Val(string)」という書式なのに、Range で複数セルを入れてしまっているからでは。 J の値を動かして、逐次、セルに値を入れていけば。繰り返しのステートメントは好きなの選べばいいでしょうけど、例えば For ~ Next。参考 URL などご覧ください。 あと、できれば Dim も入れときましょう。As Integer が難しいという場合は、Dim J のみでもいいです。 Option Explicit Sub Value_num() Dim J As Integer For J = 4 To 98  If Cells(J, 1) <> "" Then  Cells(J, 1).Value = Val(Cells(J, 1))  End If Next J End Sub

参考URL:
http://www.eurus.dti.ne.jp/yoneyama/Excel/vba/vba_for_next.html
t2grp
質問者

お礼

回答ありがとうございます 分かりやすいFor~Next例文も参考になりました ただこのコードは使用しないで下さいとあるので、実行してません