[[20160120114912]] 『VBA 文字を含む摘要列から5桁の数字を抽出』(どう) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA 文字を含む摘要列から5桁の数字を抽出』(どう)

摘要列に文字を含む5桁の数字が不規則に入力されているデータがあります。
最終列に数字5桁のみ抽出するにはどうしたらいいでしょうか。
よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


文字列が含まれるパターンに規則性はありますか? 文字列はくっついているとか、数字はくっついているとか。
(???) 2016/01/20(水) 12:01

 文字列中に現れる、最初の連続した数字を既に存在するレイアウトの最終列に記載します。
 (関数でもできると思いますが)
 5桁という縛りはいれていません。(もちろん入れることはできますが)

 なお、1行目がタイトル行、データは2行目からという前提です。

Sub Sample1()

    Const RMKCOL As String = "B"        '適用列記号 実際のものに
    Dim re As Object
    Dim col As Long
    Dim c As Range

    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = "\d+"
    col = ActiveSheet.UsedRange.Cells(ActiveSheet.UsedRange.Count).Column       '使用領域の最後の列
    Columns(col).Resize(Rows.Count - 1).Offset(1).ClearContents

    For Each c In Range(RMKCOL & 2, Range(RMKCOL & Rows.Count).End(xlUp))
        If re.test(c.Value) Then c.EntireRow.Columns(col).Value = CLng(re.Execute(c.Value)(0))
    Next

End Sub

(β) 2016/01/20(水) 13:06


1/21文字文字11111
文字文字11111 1/21
11111文字文字文字1/21
等、入力規則はなく文字数もばらばらです。
(どう) 2016/01/20(水) 14:12

5桁並んでいない数字は無視するんですね。

 Sub test()
    Const RMKCOL As String = "B"
    Dim i As Long
    Dim j As Long
    Dim cw1 As String
    Dim cw2 As String

    For i = 1 To Cells(Rows.Count, RMKCOL).End(xlUp).Row
        cw1 = StrConv(Cells(i, RMKCOL).Value, vbNarrow)
        For j = 1 To Len(cw1) - 4
            cw2 = Mid(cw1, j, 5)
            If cw2 Like "#####" Then
                Cells(i, RMKCOL).Offset(0, 4).Value = cw2
                Exit For
            End If
        Next j
    Next i
 End Sub
(???) 2016/01/20(水) 14:20

 UDF

 セルに =GetNum(A1,5) 等として使用

 Function GetNum(txt As String, myNum As Long)
    With CreateObject("VBScript.RegExp")
        .Pattern = "\d{" & myNum & "}"
        GetNum = .Execute(txt)(0)
    End With
End Function
(seiya) 2016/01/20(水) 14:45

どうもありがとうございました。
とても勉強になりました。
(どう) 2016/01/20(水) 15:23

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.