- 締切済み
Excelのマクロについて
文字列から数値だけを抽出するマクロを見つけたのですが、抽出するデータを選択してから実行しなければなりませんでした。 抽出するデータはAセル以下にしかないので、データを選択しないでも実行できるようにするにはどうしたら良いのでしょうか? 宜しくお願いします。 以下見つけたマクロです。 Sub test() Dim mydata As String Dim c As Range Dim i As Integer For Each c In Selection mydata = "" For i = 1 To Len(c) If Mid(c, i, 1) >= 0 And Mid(c, i, 1) <= 9 Then mydata = mydata & Mid(c, i, 1) End If Next c.Offset(0, 1) = mydata Next End Sub
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
(1)手動で範囲指定してから、このまま実行すれば、目的のようになります (2)範囲が決まっているなら、 Range("A1:A10").Select を最初行に入れても良い. (3)最終行が色々の場合に、そのまま使いたいなら、 Sub test() Dim mydata As String Dim c As Range Dim i As Integer d = Range("A65536").End(xlUp).Row Range("A1:A" & d).Select For Each c In Selection mydata = "" For i = 1 To Len(c) If Mid(c, i, 1) >= 0 And Mid(c, i, 1) <= 9 Then mydata = mydata & Mid(c, i, 1) End If Next c.Offset(0, 1) = mydata Next End Sub というのもあります。 ーー Sub test02() Dim mydata As String Dim c As Range Dim i As Integer Range("A1").CurrentRegion.Columns(1).Select For Each c In Selection mydata = "" For i = 1 To Len(c) If Mid(c, i, 1) >= 0 And Mid(c, i, 1) <= 9 Then mydata = mydata & Mid(c, i, 1) End If Next c.Offset(0, 1) = mydata Next End Sub など色々表現できます。 特殊なケースでは、微妙に差があるかもしれませんが。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 このように範囲をくくります。 Range("A1", Range("A65536").End(xlUp)) そして、数字を探すのは、以下のように、IsNumeric を使います。 また、マクロで、画面の上を移動するときは、必ず、画面をとめるScreenUpdating を使用します。 '標準モジュールがベター Sub testR() Dim Mydata As String Dim c As Range Dim i As Integer Application.ScreenUpdating = False For Each c In Range("A1", Range("A65536").End(xlUp)) Mydata = "" For i = 1 To Len(c.Value) If IsNumeric(Mid$(c.Value, i, 1)) Then Mydata = Mydata & Mid$(c.Value, i, 1) End If Next c.Offset(, 1).Value = Mydata Next Application.ScreenUpdating = True End Sub なお、文字の中を一括で取る場合は、正規表現を使用します。
- ka_na_de
- ベストアンサー率56% (162/286)
これでどうですか? Sub test2() Range("A1:A" & Range("A65536").End(xlUp).Row).Select Call test End Sub
お礼
有難う御座います!
お礼
ありがとう御座います! 無事解決できました。