VBAサンプル集
「セルの結合」をショートカットに登録(OnKey)

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
最終更新日:2013-05-15

「セルの結合」をショートカットに登録(OnKey)


「値の貼り付け」をショートカットに登録 が好評だったので(本当かな)、
コピーペーストの質問で、よく目にするのは、値の貼り付けが面倒だというものです。どうも、ショートカットが無いからのようです。ネットを調べて見たのですが、どれもしっくりこないので、作ってみました。いろいろな方法が考えられるのですが、簡単かつ直ぐに使えて、他の人にも配布可能なものが良いと思います。

その第二弾! セルの結合をショートカットに登録します。

作り方は、前回の、「値の貼り付け」をショートカットに登録 と同様です。
コピーペーストの質問で、よく目にするのは、値の貼り付けが面倒だというものです。どうも、ショートカットが無いからのようです。ネットを調べて見たのですが、どれもしっくりこないので、作ってみました。いろいろな方法が考えられるのですが、簡単かつ直ぐに使えて、他の人にも配布可能なものが良いと思います。

コードのみ紹介します。

VBEで、ブックモジュールに



Private Sub Workbook_Open()
  Application.OnKey "^m", "CellMerge"
  Application.OnKey "^M", "CellMerge2"

End Sub


"^m"は、Ctrl+M


"^M"は、Ctrl+Shift+M

がショートカットになります。

Ctrl+Mが、通常のセル結合(中央寄せ等の書式が設定されます。)

Ctrl+Shift+Mが、書式が設定をしないセルの結合です。

次に、標準モジュールに



Sub CellMerge()
  Dim myRange As Range
  Dim blnMerge
  On Error Resume Next
  blnMerge = False
  For Each myRange In Selection
    If myRange.MergeCells = True Then
      blnMerge = True

      Exit For
    End If
  Next
  If blnMerge = True Then
    With Selection
      .HorizontalAlignment = xlGeneral
      .VerticalAlignment = xlCenter
      .WrapText = False
      .Orientation = 0
      .AddIndent = False
      .IndentLevel = 0
      .ShrinkToFit = False
      .ReadingOrder = xlContext
      .MergeCells = True
      .UnMerge
    End With
  Else
    With Selection
      .HorizontalAlignment = xlCenter
      .VerticalAlignment = xlCenter
      .WrapText = False
      .Orientation = 0
      .AddIndent = False
      .IndentLevel = 0
      .ShrinkToFit = False
      .ReadingOrder = xlContext
      .MergeCells = False
      .Merge
    End With
  End If
End Sub
Sub CellMerge2()
   Dim myRange As Range
  Dim blnMerge
  On Error Resume Next
  blnMerge = False
  For Each myRange In Selection
    If myRange.MergeCells = True Then
      blnMerge = True
      Exit For
    End If
  Next
  If blnMerge = True Then
    Selection.UnMerge
  Else
    Selection.Merge
  End If
End Sub


CellMerge


は、マクロの記録をそのまま使用しています。

不要な記述が多いのですが、通常操作と同じにする為に、そのままにしています。

CellMerge2

は、セルの結合のみを実行しています。

強制的に、中央寄せを解除したければ、

Selection.HorizontalAlignment = xlGeneral
をいれれば良いでしょう。

For Each myRange In Selection
  If myRange.MergeCells = True Then
    blnMerge = True
  End If
Next
この部分で、選択範囲に、結合セルが含まれるかの判定をしています。

結合セルが含まれている場合は、セル結合の解除、

結合セルが含まれていない場合は、セル結合しています。

あとは、「値の貼り付け」をショートカットに登録 と同様に、
コピーペーストの質問で、よく目にするのは、値の貼り付けが面倒だというものです。どうも、ショートカットが無いからのようです。ネットを調べて見たのですが、どれもしっくりこないので、作ってみました。いろいろな方法が考えられるのですが、簡単かつ直ぐに使えて、他の人にも配布可能なものが良いと思います。

アドインで保存し、そのアドインを有効にして下さい。

これで、

Ctrl+Mで、通常のセル結合。

Ctrl+Shift+Mで、中央寄せにしないセル結合

の出来上がりです。




同じテーマ「マクロVBAサンプル集」の記事

時刻になったら音を鳴らして知らせる(OnTime)
指定文字、指定数式でジャンプ機能(Union)
「値の貼り付け」をショートカットに登録(OnKey)
「セルの結合」をショートカットに登録(OnKey)
半角カナのみ全角カナに変換する
計算式の元となる数値定数を消去する(Precedents)
Beep音で音楽(Beep,Sleep)
日付の検索(配列の使用)
ストップウォッチ(1/100秒)(Timer)
ストップウォッチ改(1/100秒)(Timer)
重複の無いユニークなデータ作成


新着記事NEW ・・・新着記事一覧を見る

Variantの数値型と文字列型の比較|エクセル雑感(7月1日)
VBAのVariant型について|VBA技術解説(6月30日)
VBAのString型の最大文字数について|エクセル雑感(6月20日)
VBAで表やグラフをPowerPointへ貼り付ける|VBAサンプル集(6月19日)
アクティブシート以外の表示(Window)に関する設定|VBA技術解説(6月17日)
マクロ記録での色のマイナス数値について|エクセル雑感(6月16日)
ツイッター投稿用に文字数と特定文字で区切る|エクセル雑感(6月15日)
日付の謎:IsDateとCDate|エクセル雑感(6月14日)
IFステートメントの判定|エクセル雑感(6月13日)
インクリメンタルサーチの実装|ユーザーフォーム入門(6月12日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ