QRコード作成方法!VBAでクリップボードのURLを変換できる?

Excel

パソコンで検索していたページをスマホでも見たいときって有りますよね。URLをスマホで打ち直したり、ページにたどり着いた検索キーワードを思い出して、スマホで再検索することもできますが少々面倒くさい。。。

そんなとき、こんな感じでURLをQRコードに変換できたら…

QRコード

だいぶ作業が捗るのではないでしょうか?

今回は今までの記事に比べて少し複雑になりますが、ExcelマクロでQRコードを生成する方法を紹介します。

Sponsored Link

QRコードを表示するフォームを作成する

今回のExcelマクロではQRコードを生成するためにMicrosoft BarCode Controlというコントロールを使用します。

このコントロールは初期状態では使用できない(ツールボックスに表示されていない)ので、まずはツールボックスに表示されるように設定を変更します。

Microsoft BarCode Controlを追加する。

プロジェクトにUserFormを追加したら、以下の手順でツールボックスにBarCode Controlを貼り付けます。

QRコード

 

ツールボックス上で右クリックをして、「その他のコントロール」をクリックします。

QRコード

コントロールの追加ダイアログで「Microsoft BarCode Control」探しチェックしたら、OKを押してダイアログを閉じます。

ツールボックスにバーコードのアイコンが追加されていればOKです。

QRコード

BarCode Controlをユーザーフォームに配置する

バーコードのアイコンをクリックして、ユーザーフォームに貼り付けます。

QRコード

このコントロールは標準のコントロールと同様に、画面上で様々なパラメータの設定変更ができるのですが、本筋から外れるので詳細な説明は省きます。

見た目がバーコードですが、次の章でQRコードに変更します。

また、画面上で変更した設定はVBAのコードとして顕れてこないので、プログラム修正などのメンテナンス性を考えた場合、設定変更はVBAのコードとして書いた方がベターです。

Sponsored Link

クリップボードのURL(文字列)をQRコードに変換する

ユーザーフォームの準備が整ったら、いよいよ「クリップボードにコピーした文字列をQRコードに変換するマクロを書いていきます。

まずは、VBAでクリップボード使う方法から

クリップボードの状態を判定する(ClipboardFormatsプロパティ)

Excelマクロでクリップボードを操作するには、以下のようにClipboardFormatsプロパティを使います。

ClipboardFormatsプロパティは、現在クリップボードにあるオブジェクトで使用できる形式を、数値の配列として返します。値の取得のみ可能です。バリアント型 (Variant) の値を使用します。

次の例では、クリップボードの状態を判定し、中身が空であればメッセージを表示し、中身が文字列であれば処理を抜けます。

Dim CF As Variant
CF = Application.ClipboardFormats
If CF(1) = True Then
    MsgBox "クリップボードは空です。", vbExclamation
    Exit Sub
End If

Dim fmt As Variant
For Each fmt In CF
    'クリップボードの中身が文字列の場合はループを抜ける
    If fmt = xlClipboardFormatText Then
        Exit For
    End If
Next fmt

クリップボードの中身を取り出す(GetFromClipboardとGetTextメソッド)

クリップボードの中身を取り出すには、MSForms.DataObjectオブジェクトの変数を用意し、GetFromClipboardメソッドを使用します。

更にDataObjectオブジェクトからデータを取得するにはGetTextメソッドを使用します。

次の例では、クリップボードの中身を取り出し、更に文字列を取得してBarCodeControlのValueに設定しています。

BarCodeControlはユーザーフォームを表示する前にStyleを設定し、表示形式をバーコードからQRコードに変更しています。

Dim cbData As MSForms.DataObject
Set cbData = New MSForms.DataObject

cbData.GetFromClipboard
With UserForm1.BarCodeCtrl1
    'BarCode Controlの表示形式をQRコードにする
    .Style = 11
    'クリップボードから文字列を取り出して、BarCode Controlに渡す
    .Value = cbData.GetText
End With
UserForm1.Show

Set cbData = Nothing

マクロを完成させる

以上を踏まえて、クリップボードのURL(文字列)をQRコードに変換するマクロを完成させます。

Sub ClipbordToQRCode()
    Dim CF As Variant
    CF = Application.ClipboardFormats
    If CF(1) = True Then
        MsgBox "クリップボードは空です。", vbExclamation
        Exit Sub
    End If

    Dim cbData As MSForms.DataObject
    Set cbData = New MSForms.DataObject
    cbData.GetFromClipboard
    
    Dim fmt As Variant
    For Each fmt In CF
        'クリップボードの中身が文字列の場合はループを抜ける
        If fmt = xlClipboardFormatText Then
            
            With UserForm1.BarCodeCtrl1
                'BarCode Controlの表示形式をQRコードにする
                .Style = 11
                'クリップボードから文字列を取り出して、BarCode Controlに渡す
                .Value = cbData.GetText
            End With
            UserForm1.Show
            
            Exit For
        End If
    Next fmt
    
    Set cbData = Nothing

End Sub
Sponsored Link

QRコード生成マクロの実行結果

実行結果は以下のとおりです。
※このブログのトップページのURL(https://morelearn.work/)をクリップボードにコピーした状態。

QRコード

表示されたQRコードは、[Alt]+[PrintScreen]でユーザーフォームごとコピーできます。

作成したマクロは、こちらの記事の手順でリボンに登録しておくと便利ですね。

QRコード

また、BarCode Controlに渡す文字列に全角文字が含まれていると、QRコードに変換できません。改造案として、文字列のチェック関数を追加したり、QRコードやフォームの大きさを調整したり、QRコードのみをクリップボードにコピーする機能を追加すれば更に実用的になりますが、今回はこのへんで終わります。

にほんブログ村 IT技術ブログへ
にほんブログ村

コメント

タイトルとURLをコピーしました