技術tips保管庫

技術tips保管庫

Excel VBAを中心に、仕事で役立つあれこれを記録

【Excel VBA】値のみ貼り付けをデフォルトにする

このページで書くこと

Excelでコピペする際、[ctrl] + V で値のみ貼り付けできるようにします。
Excel以外のテキストをコピーしてExcelに張り付ける際に便利です。
もちろんExcelの関数などをコピペしたいときにも役立ちます。

経緯

たくさんのデータをExcelにコピペしたいときがたまにあります。
関数やVBAで自動化できれば一番いいのですが、コピー元ファイルの形式や入力方法によっては手作業にならざるを得ない場合も多々……。

でも、いちいち右クリックで「値のみ貼り付け」を選択するのは面倒すぎる!
なので、せめて楽に貼り付けができるよう、VBAで「値のみ貼り付け」をデフォルトにしてみました。

使用するコード

クリップボードとのデータのやり取りです。

Sub COPY_DEF()
'
    Dim cbCopy As Variant 'コピーした値
    Dim clipOjt As New DataObject
    '
    cbCopy = ""
    '
    With clipOjt
        .GetFromClipboard 'クリップボードからデータオブジェクトへ値を渡す
        cbCopy = .GetText 'データオブジェクトのデータを変数に入れる
    End With
    '
    ActiveCell = cbCopy '選択したセルに値を入れる
'
End Sub

上記のマクロを [ctrl] + V に登録してください。

備考

コピーしたデータはクリップボードに保存されます。
そのデータを一度VBAのデータオブジェクトに格納し(clipOjt.GetFromClipboard)、その後テキスト形式で変数に渡します(cbCopy = .GetText)。
変数の値を選択したセルに入力するようにしておけば(ActiveCell = cbCopy)、[ctrl] + Vでペーストする動きとうまく連動してくれます。

処理後は、このマクロの削除や拡張子の修正(xlsm→xlsx)などを忘れずに!

注意

上記のマクロをコンパイルする際、「コンパイルエラー:ユーザ定義型は定義されていません。」というエラーメッセージが表示されることがあります。

f:id:arekoretips:20210605045914p:plain
コンパイルエラー:ユーザ定義型は定義されていません。

そのメッセージの解決方法は以下のページに記載してありますので、もしエラーが出た際にはお試しください。
arekoretips.hatenablog.jp

以上です。

【Excel VBA】「コンパイルエラー:ユーザ定義型は定義されていません。」を解決する

このページで書くこと

Excel VBAで表示されるエラーメッセージ
コンパイルエラー:ユーザ定義型は定義されていません。
を解決します。

エラー内容

以下のようなメッセージで表示されることが多いです。

f:id:arekoretips:20210605045914p:plain
コンパイルエラー:ユーザ定義型は定義されていません。

データオブジェクトを扱っているときに表示されることが多いかな、と思いますが、つまり「使おうとしている型がないよ!」ということですね。

解決方法

参照設定から「Microsoft Forms 2.0 Object Library」にチェックをつけることで解決します。

必要な操作は3ステップで終わります。
なにかコードなどを書く必要はありません。
チェックボックスにチェックを入れるだけです。

また、ここではWindowsの画面を用いて説明しますが、Macでも同様の手順で設定することができます

手順1

VBE(VBAエディタ)の ツール>参照設定 で、「Microsoft Forms 2.0 Object Library」にチェックがついているか確認します(下図はチェックがついていない場合のものです)。

※既にチェックがついている場合は、「Microsoft Forms 16.0 Object Library」の下に2.0がある場合が多いので、さっと確認して見当たらなければ手順2に進んでください。

f:id:arekoretips:20210605051134p:plain
Microsoft Forms 2.0 Object Library」にチェックがついているか確認

手順2

プロジェクトエクスプローラの最上位、VBAProjectを右クリックして、「挿入」から「ユーザーフォーム」を追加します。

フォーム画面が表示されますが、気にせず標準モジュールに戻ります。

※ここでの目的は「ユーザーフォーム」を追加することのみです。

f:id:arekoretips:20210605051416p:plain
「ユーザーフォーム」を追加

手順3

再度VBE(VBAエディタ)のツール>参照設定を開き、「Microsoft Forms 2.0 Object Library」にチェックをつけます。

f:id:arekoretips:20210605051527p:plain
Microsoft Forms 2.0 Object Library」にチェックをつける

操作は以上です。
これでコンパイルできるようになったと思うので、お試しください。

【Excel VBA】全シート名を一覧化する

このページで書くこと

Excelブック内にある全シートの名前を取得し、その一覧を作成します。

経緯

たまに「このブックのシート名の一覧表がほしい!」と思うことがあります。
用途はさまざまですが、確認用のチェックシートにしたり、目次として使用することが多いです。

シート数が少なければ、1つずつシート名をコピーしていけばいいのですが、量が多いと面倒すぎてやる気になれません。
なので、VBAで解決しました。

使用するコード

Sub ALL_SHEET_NAME()
'
    Worksheets.Add Before:= Worksheets(1) 'シート名の一覧表をブックの先頭に作成
    ActiveSheet.Name = "シート名一覧"
    '
    Dim i As Long
    For i = 1 To Worksheets.Count
        Range("A" & i) = Sheets(i).Name '新規作成したシートのA列にシート名を書き出し
    Next i
    '
End Sub

備考

新規シートをブックの先頭に作成し(Worksheets.Add)、「シート名一覧」という名前にしました(ActiveSheet.Name)。
その後、自動でシート数を数え(Worksheets.Count)、A列の1行目から順番に取得したシート名を入力しています(Sheets(i).Name)。
変数 i はシート番号兼、「シート名一覧」の行番号です。

処理後は、このマクロの削除や拡張子の修正(xlsm→xlsx)などを忘れずに!

以上です。

【Excel VBA】ブック内にある全シートをA1セル選択にする

このページで書くこと

Excelブック内にある全シートを一度に左上揃い(A1セル選択状態)にします。
大量にシートが分かれているブックの体裁を整える際に便利です。

経緯

仕事でExcelを使用していると、シートの数が多くなることがよくあります。
しかもたくさんのシートを同時に使用していると、ブックを保存する時には各シートで選択しているセルも表示される位置もぐちゃぐちゃ……これでは次に使用する人もゲンナリしてしまいます。
ましてやお客さんに提出する資料ならなおさら、このあたりは綺麗に整えておきたいものです。

しかし、シートの数が多くなればなるほど、1シートずつ修正していくのはめんどくさい!
なのでVBAで解決しました。

使用するコード

Sub UPPER_LEFT()
'
    Application.ScreenUpdating = False '画面の更新を停止させる
    '
    Dim i As Long
    For i = 1 To Worksheets.Count
        Sheets(i).Activate
        ActiveWindow.ScrollColumn = 1 'A列が左側に来るように調整
        ActiveWindow.ScrollRow = 1 '1行目が一番上に来るように調整
        Range("A1").Select 'A1セルを選択
    Next i
    '
    Sheets(1).Activate '先頭のシートを表示
'
Application.ScreenUpdating = True '画面の更新を戻す
'
End Sub

備考

自動でシートの数を数え(Worksheets.Count)、その分同じ処理を繰り返します。
表示される画面を左上に修正し(ActiveWindow.ScrollColumn = 1ActiveWindow.ScrollRow = 1)、A1セルを選択しています。
処理中は画面がチカチカするので、画面の更新を止めておいた方がよいと思います(Application.ScreenUpdating = False)。

処理後は、このマクロの削除や拡張子の修正(xlsm→xlsx)などを忘れずに!

以上です。