今日を乗り切るExcel研究所

Excel に働かされていませんか

Excel表で内側の罫線のみを引きたい

表の罫線を引くときに、内側罫線のみ線種を指定してを引く方法と、それを自動化するマクロを検討します。

罫線のボタンがたりない

Excel のリボンに罫線を引くボタンがありますが、パターンがいろいろ足りないと感じることはありませんか。

特に、表の内部(内側)罫線だけを引いたり消したりするパターンがありません。

格子の内側の罫線だけを消したい時に、「線なし」を選ぶと、外枠の罫線まで消されてしまいます。

表内部のタテ線とヨコ線で線種と変えたい場合、タテだけ/ヨコだけを別々に設定するボタンもありません

Ctrl+1で「セルの書式設定」>「罫線」タブを開けば、内側罫線を編集する事は出来るのですが、操作が細かくて面倒です。

簡単に内側だけ罫線を引く方法なないのでしょうか。

内部罫線を設定する手順

手作業で内部罫線を効率よく設定する方法をがないか、調べてみました。

キー操作で罫線を引いてみる

キー操作だけで手早く内部罫線を引けないものでしょうか。

罫線を引くショートカットとしては外枠を引くCtrl+Shift+&があるだけで、そのほかの罫線を引いくショートカットは存在しないようです。

リボンコマンドにユーザ定義の罫線パターンを追加きれば、アクセスキーでたどれるのですが、そのようなカスタマイズはゆるされていません。

一応、「セルの書式設定」ダイアログの「罫線」タブでは、各罫線ボタンにアクセスキーが割り当てられてあるにはあります。

しかし、「罫線」タブをキー操作だけで編集するのは無理があり、効率化は望めません。

  • 内側格子の追加(Alt + I
  • 内側ヨコの追加と削除 (Alt + H
  • 内側タテの追加と削除 (Alt + V

f:id:shego:20170531000640p:plain

【参考】セルの罫線を設定するためのキーボード ショートカット - Microsoft サポート

クイックアクセスツールバー「罫線」ボタンを追加する

実は、各罫線の機能は全てコマンドボタンとして用意されていて、リボンやクイックアクセスツールバーに個別に追加することができます。

よく使う罫線のコマンドボタンをそれだけリボンやクイックアクセスツールバーに配置しておけば、罫線タブを開く必要もありません。

罫線関連のコマンドは「ファイル」>「オプション」>「クイックアクセスツールバー」>「リボンにないコマンド」の中に見つけられます。

f:id:shego:20170531130043p:plain

  • 内側罫線
  • 縦罫線(内側)
  • 横罫線(内側)
  • 上罫線の表示/非表示
  • 下罫線の表示/非表示
  • 左罫線の表示/非表示
  • 右罫線の表示/非表示
  • 斜め罫線(右上がり)
  • 斜め罫線(右下がり)

この中から使いたいコマンドをクイックアクセスツールバーに追加すればワンクリックで罫線を引く事が出来るようになります。

ショートカットでも、例えばクイックアクセスツールバーの4番目のアイコンに配置されたのなら、Alt+4の一発で実行できるので、だいぶ楽になります。

f:id:shego:20171009192922p:plain

使いたいコマンドはいくつでも追加できますが、筆者のクイックアクセスツールバーはすでに多くのアイコンが並んでいて、もうこれ以上増やしたくありません。

そこで、クイックアクセスツールバーのスペースを節約するために、罫線コマンドをグループ化して、1個のアイコンからサブコマンドを選べるようにしたいと思います。

そのためには、いったんユーザ定義のタブを作成して罫線ボタンのグループ化し、そのグループをクイックアクセスツールバーに登録するという手順を踏みます。

  1. 「Excel のオプション」ダイアログを開きます
    • キー操作: Alt + TO (あるいはAlt + FT
  2. 「リボンのユーザ設定」画面を開きます
  3. 「新しいタブ」でタブを追加し、「名前の変更」で適当な名前(ここでは「Myタブ」)に変更します
    • 右の下三角▼ボタンで、追加した「Myタブ」をなるべく下(後ろ)に移動しておきます
  4. 「Myタブ」内の「新しいグループ(ユーザー設定)」を選択し、「名前の変更」で適当な表示名(ここでは「My罫線」)に変更します
    • 「表示名」だけでなく「アイコン」も分かりやすい(罫線っぽい)ものを選択してください
  5. 「コマンドの選択」で「リボンにないコマンド」(あるいは「すべてのコマンド」)を選択します
  6. コマンドボタンのリストから、使いたい罫線コマンドを選択し、「追加」で「My罫線」に追加します
    • コマンドはたくさんあって探すのが大変ですが、アイコンの絵柄や以下の順序(だいたい50音順)を参考にしてください
    • 「リボンにないコマンド」内の表示順
      • 右罫線の表示/非表示
      • 横罫線(内側)
      • 下罫線の表示/非表示
      • 罫線(内側)
      • 左罫線の表示/非表示
      • 斜め罫線(右下がり)
      • 斜め罫線(右上がり)
      • 縦罫線(内側)
      • 上罫線の表示/非表示
    • 「すべてのコマンド」内の表示順
      • 右罫線
      • 右罫線
      • 横罫線(内側)
      • 下罫線
      • 下罫線
      • 下太罫線
      • 下二重罫線
      • 外枠
      • 外枠太罫線
      • 格子
      • 罫線(内側)
      • 左罫線
      • 左罫線
      • 斜め罫線(右下がり)
      • 斜め罫線(右上がり)
      • 縦罫線(内側)
      • 上罫線+下罫線
      • 上罫線+下太罫線
      • 上罫線+下二重罫線
      • 上罫線
      • 上罫線
      • 枠なし
    • そのほか便利そうなコマンドがあれば追加します
      • 「すべてのコマンド」で「線のスタイル」など
  7. 「OK」ボタンを押します

f:id:shego:20170531143538p:plain

これで、リボンに「Myタブ」が追加され、「My罫線」グループに登録したボタンが使用できるようになります。

筆者の環境では、追加されたタブへのショートカットは Alt + Y になります。 また罫線コマンド本来のアクセスキーがそのまま使えるので、たとえば「横罫線(内側)」を実行するには、Alt + YH になります。

「Myタブ」が気に入ったらそのまま使ってもかまいませんが、これはクイックアクセスツールバーへの足がかかりにすぎません。

「My罫線」をクイックアクセスツールバーに移動します

  1. 「Excel のオプション」ダイアログを開きます
    • キー操作: Alt + TO (あるいはAlt + FT
  2. 「リボンのユーザ設定」画面を開きます
  3. 「Myタブ」を非表示にします(任意)
    • 「Myタブ」のチェックを外します
  4. 「クイック アクセス ツール バー」画面を開きます
  5. 「コマンドの選択」で「すべてのコマンド」を選択します
  6. コマンドのリストから「My罫線」を選択して「追加」します
  7. 「OK」ボタンを押します

f:id:shego:20170531171158p:plain

これでクイックアクセスツールバーに「My罫線」ボタンが追加され、罫線コマンドが選択できるようになります。 こうするとショートカットは、たとえば Alt + 4H で実行できます。

罫線コマンドだけでなく、「線のスタイル」を追加すれば線の太さも変えられます。

内側罫線コマンドの動作はセルの状態により線を引いたり消したりするので(十字の内側罫線は消せない?)、ちょっと操作にクセがあり慣れるまでは思い通りにならないかもしれません。



見出し区切りで内部罫線を引くマクロ

内側罫線をすべて同じ線種にするなら、通常のやり方でもいいのですが、項目の階層によって線種を分けたり、飛び飛びで罫線を引きたいときには作業が煩雑になります。

選択範囲の内部の罫線を自動で設定するマクロを作成しました。

本マクロは見出し行・列のセルに値のあるなしを基準して内側罫線を引きます。

罫線を引きたいセル範囲を選択して、このマクロVBAを実行すると、選択範囲の1列目に値のある行の上側と1行目に値のある列の左側の罫線を引きます。選択範囲の外枠の線種は変更しません。

線種は、「極細」、「細」、「太」を用意しました。また、内側罫線をすべて削除する「なし」も用意しました。

方眼紙 Excelで表を書かなければならないときなどには重宝します。

Option Explicit

Sub 罫線_内側_なし()
    If TypeName(Selection) <> "Range" Then Beep: Exit Sub
    With Selection.Cells
        .Borders(xlInsideHorizontal).LineStyle = xlNone
        .Borders(xlInsideVertical).LineStyle = xlNone
    End With
End Sub

Sub 罫線_内側_極細()
    If TypeName(Selection) <> "Range" Then Beep: Exit Sub
    Application.ScreenUpdating = False
    drawInsideBorders Selection, borderLineStyle:=xlContinuous, borderWeight:=xlHairline
    Application.ScreenUpdating = True
End Sub

Sub 罫線_内側_細()
    If TypeName(Selection) <> "Range" Then Beep: Exit Sub
    Application.ScreenUpdating = False
    drawInsideBorders Selection, borderLineStyle:=xlContinuous, borderWeight:=xlThin
    Application.ScreenUpdating = True
End Sub

Sub 罫線_内側_太()
    If TypeName(Selection) <> "Range" Then Beep: Exit Sub
    Application.ScreenUpdating = False
    drawInsideBorders Selection, borderLineStyle:=xlContinuous, borderWeight:=xlMedium
    Application.ScreenUpdating = True
End Sub


Private Sub drawInsideBorders(target As Range, borderLineStyle As Integer, borderWeight As Integer, Optional borderColorIndex As Integer = 1)
    Dim area As Range
    Dim i As Integer
    For Each area In target.Areas
        For i = area.Rows.Count To 2 Step -1
            If Not IsEmpty(area.Cells(i, 1)) Then
                With area.Rows(i - 1).Borders(xlEdgeBottom)
                    .LineStyle = borderLineStyle
                    .ColorIndex = borderColorIndex
                    .Weight = borderWeight
                End With
            End If
        Next
        For i = area.Columns.Count To 2 Step -1
            If Not IsEmpty(area.Cells(1, i)) Then
                With area.Columns(i - 1).Borders(xlEdgeRight)
                    .LineStyle = borderLineStyle
                    .ColorIndex = borderColorIndex
                    .Weight = borderWeight
                End With
            End If
        Next
    Next
End Sub

【使用方法】

  1. 上記マクロVBAを標準モジュールにコピー&ペーストします
  2. 罫線を引きたい領域の1行目と1列目の適切な位置にのセルに見出しとなる値を入力しておきます
    • ヨコ線だけやタテ線だけを引きたいときには、1行目や1列目を空にしておきます
  3. 対象領域を範囲選択します
    • 複数領域の選択が可能です
  4. 引きたい線種のマクロを選んで実行します
  5. 見出し行・列に従った内部罫線が設定されます

【注意】本マクロの動作結果は取り消し(Undo)できませんのでご注意ください。

まとめ

罫線は、見た目に過ぎないわりには手間のかかる作業なので、効率よく片付けたいところです。Excel 標準の罫線ツールは使いずらいですが、諦めずにクイックアクセスツールバーのカスタマイズやマクロを使うことで、効率を上げることも可能となります。

本記事の内容は Excel 2013 で動作確認しています。

関連記事

www.shegolab.jp

www.shegolab.jp

www.shegolab.jp