質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

2373閲覧

VBA Val関数で文字列を数値に変換 型が一致しません

hm6

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/02/07 16:48

編集2021/02/07 17:24

前提・実現したいこと

CSVから取り込んだシートの内、文字列になっている数値(K:M列)をVal関数で数値に再変換したいのですが、オブジェクト変数の部分でエラーが出ます。

一方で、エラーが出ている割に途中までは処理されるのですが、下記U2のセルで処理が止まるようです。
初歩的な質問で申し訳ありませんが、対処法をご教授いただけますと幸いです。

![イメージ説明

発生している問題・エラーメッセージ

型が一致しません。

該当のソースコード

VBA

1Option Explicit 2 3Sub 文字列を数値変換2() 4 5 Dim i As Long '行カウンタ 6 Dim j As Long '列カウンタ 7 Dim ActCell As Range 8 9 Range("A2").CurrentRegion.Select 10 11 For i = 0 To Selection.Rows.Count - 1 12 For j = 0 To Selection.Columns.Count - 1 13 Set ActCell = ActiveCell.Offset(i, j) 14 **ActCell = Val(ActCell)** 'ここでエラーが出ます 15 Next j 16 Next i 17 18End Sub

試したこと

https://macvba.net/val-moji-suchi
お恥ずかしながら、このページのコードをほぼそのまま使っています。

https://oshiete.goo.ne.jp/qa/7877706.html?from=recommend
ここに書かれているIf文とEnd(xlUp).Rowを組み合わせて自分なりのコードも書いてみましたが、うまく行きませんでした。

https://vbabeginner.net/error-13-correspondence-method-type-does-not-match/
対処法としてこのページを読みましたが、あまり理解できませんでした。

補足情報(FW/ツールのバージョンなど)

Windows10 64bit
Excel 2019

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daregada

2021/02/07 23:31 編集

> 文字列になっている数値(K:M列)を と質問文に書いているのに、実際のコードはA2セルからCurrentRegionで「空白セルで囲まれた範囲」を取得して選択し、それらすべてを数値に変換しようとしています。 実際に文字列になっている列は、どこからどこまでなのでしょうか。
hm6

2021/02/08 15:57

実際はK:M列以外にもいくつか文字列になっている列があるのですが、うまくK:M列のみを対象にできなかったため、やむなくCurrentRegionを使ってデータが入っているセル全体を対象にしています。 問題は解決しましたが、ご指摘を踏まえて質問内容と処理結果が矛盾しないよう今後は気を付けます。ありがとうございました。
guest

回答3

0

ベストアンサー

U2のセルは見たところ緑のマークがついているので文字列になっていると思います。
Val関数では"0.96%"の文字列を数値に変換することはできません。

実際に選択範囲にどのような値が入るのかわからないのでなんとも言えませんが、
一案としてセルの書式を「標準」に戻してから再代入してみてはどうでしょうか?
数値変換可能なものは自動的に数値になると思います。

具体的には

vba

1ActCell = Val(ActCell)

の部分を

vba

1ActCell.NumberFormatLocal = "G/標準" 2ActCell.Value = ActCell.Value

に修正します。

投稿2021/02/07 18:53

errormaker74

総合スコア230

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hm6

2021/02/08 15:31

こちらで解決できました!ありがとうございます!
guest

0

ここを修正しました。
>Range("A2").CurrentRegion.Select<
コード
Sub 文字列を数値変換2()

Dim i As Long '行カウンタ Dim j As Long '列カウンタ Dim ActCell As Range Range("K2").CurrentRegion.Select For i = 0 To Selection.Rows.Count - 1 For j = 0 To Selection.Columns.Count - 1 Set ActCell = ActiveCell.Offset(i, j) ActCell = Val(ActCell) 'ここでエラーが出ます MsgBox ActCell Next j Next i

End Sub

![イメージ説明](63e80bb83db9952005817e79a0b13e9e.png)

投稿2021/02/08 02:45

syousuke.33

総合スコア312

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hm6

2021/02/08 15:59

コメントありがとうございます。すみません、実際はA列からデータが入っています。説明が足りず申し訳ありませんでした。
guest

0

ワークシート関数を使う方法もありそうです。

vba

1'ActCell = Val(ActCell) 2ActCell = WorksheetFunction.Value(ActCell)

投稿2021/02/08 00:27

radames1000

総合スコア1923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hm6

2021/02/08 15:33

こんな関数もあるのですね。ご教示いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問