助けてください VBA初心者です
Excel VBAでA列の4からj行目までの文字列(例:"12345678” 8桁固定)、k行目までの数字以外の文字列(例:AB12345678 9桁以上ある)のうち、j行目までの文字列をVal関数で数値に変換したいのですが、どうやっていいのか分かりません j+1行目からk行目までは数字以外の文字列が入っています
1セルだけの変換はできます(例:A4セルに"12345678”がある場合、Val(range("A4"))で12345678が出ます)
※仮にj=98と固定しました
Sub Value_num()
J = 98
'A列を値→数字に変換
Columns("A").Select
'Range("A4").Value = val(Range("A4")) これは動く
Range(Cells(4, 1), Cells(J , 1)).Value = val(Range(Cells(4, 1), Cells(J, 1))) 'これが動かない
End Sub
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]
で、一発で数値化できます。
回答ありがとうございます
数値12345678のみがJ列まであり、数値を含むAB12345678がK列まであるという場合で、文字列になっている数値のみJ列まで数値に変換したいという希望でした(J+1からK列までは文字列のまま)
EXCEL上で変換するのは確認しました こんな方法もあるんですね
でもVBAでどうしてもやりたかったので、回答No.4のMarcoRossiItalyさんの回答をベストアンサーとしました
No.4ベストアンサー
- 回答日時:
No.2 です。
No.3さんは NumberFormatLocal プロパティにおいて、セルの書式を「G/標準」に設定していらっしゃいます。もしも、これさえも必要ないという場合は、コードは更に短く書けますね。Sub Value_num()
Range("A:A").Value = Range("A:A").Value
End Sub
回答ありがとうございます
このコードでも無事変換できました!
一番この方法が簡単なので、これで行きたいと思います
本当にありがとうございました
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
回答ありがとうございます このコードで無事変換できました!
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/vb …
このコードで無事変換できました! ありがとうございます
あとは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/vb …
回答ありがとうございます 分かりやすいFor~Next例文も参考になりました ただこのコードは使用しないで下さいとあるので、実行してません
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 正規表現を用いての並び替え 7 2022/04/04 09:27
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
VBAで文字列を数値に変換したい
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
-
4
別のシートから値を取得するとき
Visual Basic(VBA)
-
5
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
6
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の文字がある行以外を削除...
-
excelのデータで色つき行の抽出...
-
直近の5個の平均を求めたい
-
[EXCEL]ボタン押す→時刻が表に...
-
【Excel関数】UNIQUE関数で"0"...
-
アクティブになっている行をマ...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
【EXCEL】連続データの個数を抽...
-
エクセルで特定の文字列が入っ...
-
Excel 時刻の並び替え
-
エクセルのセルに指定画像(.jpg...
-
チェックボックスをクリックし...
-
セルの色によって条件文をつけ...
-
エクセル マクロ オートフィ...
-
エクセル2016で時間を入力して...
-
電話番号の入力方式が違うデー...
-
このような複雑な表をワードで...
-
エクセルで、ポインタのある行...
-
Excel マクロで特定のセルに入...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
[EXCEL]ボタン押す→時刻が表に...
-
結合されたセルをプルダウンの...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
AのセルとB行を比較して、一致...
-
エクセル 上下で列幅を変えるには
-
Excel ウインドウ枠の固定をす...
-
特定の文字がある行以外を削除...
-
excelのデータで色つき行の抽出...
-
エクセル2016で時間を入力して...
-
excel 小さすぎて見えないセル...
-
EXCELで最後の行を固定
-
エクセルVBA 最終行を選んで並...
-
VBAで色の付いているセルの行削除
-
エクセルマクロで偶数行(又は...
-
エクセルのセルに指定画像(.jpg...
-
罫線の斜線を自動で引くマクロ
おすすめ情報