色々なことをメモします。パソコン(Excel)とか、音楽(ピアノ、エアロフォン、エレクトーン)とか。
 【Excel】文字列の中の数字(文字列)を取り出したい
2021年08月25日 (水) | 編集 |
GetNum関数

Excelで文字列の中の数字を取り出したいという場面がありました。
例えば、「at215-00008g785」という文字列があったとします。
そこから、「215」「00008」「785」という数字を取り出したいという感じです。

どうしたらいいかなぁと思い、ユーザー定義関数でやってみることにしました。
VBAの標準モジュールに下記のように入力しました。
Function GetNum(txt As String, Optional n As Long = 1) As String
    Dim reg As Variant
    Dim regmth As Variant
    Dim num As String
    
        Set reg = CreateObject("VBScript.RegExp")

        With reg
            .Pattern = "\d+"
            .Global = True
            
            Set regmth = .Execute(txt)
            
            num = regmth(n - 1)
        End With
        
        Set reg = Nothing
        Set regmth = Nothing
        
        GetNum = num
End Function
GetNumという関数にしました。
第1引数は、数字が含まれている文字列を指定します。
第2引数は、何個目の数字を取り出すかを指定します。
省略すると、1つ目になります。

B列に数式を入力します。
B1=GetNum(A1)
B2=GetNum(A2,2)
B3=GetNum(A3,3)
B4=GetNum(A4,4)
とりあえずは思ったようには出来たのでよかったのですが、これがベストな答えかどうかはわかりません(^_^;)

久々のExcel記事でした。


関連記事

 【Excel VBA】楽器練習記録帳を作りました
2020年05月25日 (月) | 編集 |
楽器練習記録帳

私は楽器を弾くのが趣味で、練習を続けています。
腕前は全然ダメダメなのですが、とても楽しいです。
その練習の記録を残すために、Excelで楽器練習記録帳というものを作りました。
音声・動画をコメント付きでメモしていく感じのものです。
音声・動画は、シートに配置したWindowsMediaPlayerで再生します。
これを作ったのは、だいぶ前の話なのですが、ちょっと機能の追加や変更がしたくなり、手を加えることにしました。

表には、日付、曲名、アーティスト名、コメント、ファイルパスという項目があります。
ファイルパスは、セルをダブルクリックするとファイルを選択するダイアログが開くので、ファイルを選択します。
ファイルを選択すると、ファイルのフルパスが入力されます。

オートフィルタをかけて、日付や曲名、アーティスト名、ファイル形式などで曲を絞り込み、再生することができます。
[連続再生]は、アクティブにした行から順番に連続再生されます。
[1曲再生]は、アクティブにした行の曲が再生されます。
再生中は再生されている曲の行に色が付きます。
[早送り]のチェックボックスをチェックすると、早送り再生されます。
あらかじめWindowsMediaPlayerの方で視覚エフェクトが設定されていると、音声ファイルを再生したときにエフェクトが表示されます。

やっと完成した!と思い、もう一台の他のPCで動かしてみたら、、、
WindowsMediaPlayerのサイズが指定してあるにもかかわらず、動画再生時にサイズが大きくなってしまいました。
ファイル形式がwmvだからかなと思い、mp4に変換してみたのですが、関係ありませんでした。
自分なりに、色々とやってみたのですが、なかなか上手くいきません。
片方のPCでは上手くいくのに、もう片方がダメだぁ・・・の繰り返し。
両方のPCで同じ動きにしたいのです。
もう、ギブアップだ・・・と諦めかけていた時、やっとなんとかできたのです。

私のPCの環境
Windows 10 Pro 64bit(1909)
WindowsMediaPlayer(12.0)
Excel(2019)

もう一台のPCの環境
Windows 10 Home 64bit(1909)
WindowsMediaPlayer(12.0)
Excel(2013)

2台のPCの一番の違いはExcelのバージョンだと思うのですが、そのせいかどうかは私にはわかりません。

変更したところをメモします。

WindowsMediaPlayerのオブジェクト名は「WMP1」です。
シートの名前は「記録」です。
WMP1のサイズは縦164.25、横240です。

WMP1のプロパティ設定は以下の通りです。
AutoLoad: False
enableContextMenu: False
Enabled: True
fullScreen: False
Height: 164.25
Left: 0
Locked: True
Placement: 2
PrintObject: True
Shadow: False
stretchToFit: True
Top: 0
uiMode: none
URL:
visible: True
Width: 240
windowlessVideo: False

WMP1のPlayStateChangeイベントに以下のコードを追加しました。
With Worksheets("記録").WMP1
    .Height = 164.25
    .Width = 240
    DoEvents
End With

再生ボタンのURL指定、再生の部分を以下のようなコードに変更しました。
With Worksheets("記録").WMP1
    .Visible = False
    .URL = 音声・動画ファイルのフルパス
    .Visible = True
    t = [Now() + "00:00:00.5"]
    Do
        DoEvents
    Loop Until Now() > t
    .Controls.Play
End With

参考にならないかもしれませんが、こんな感じでなんとかできあがりました。
自分の希望通りには、一応なりました。
これでしばらく使ってみます。

楽器練習記録帳のデータを見てみると、Merry Christmas Mr. Lawrence(アヴェクピアノ)の練習を始めたのが、2015年4月。
5年も練習しているのに、まだ満足のいく演奏ができないのです。
この曲は絶対に弾きたいので、これからも練習を続けていきたいと思います(^^♪

関連記事