VBAの勉強を始めてみた

色々試しています。

ある行の高さや列幅を、他の行または列に適用する

エクセルを使用していると、行の高さや列の幅をコピーして他の行・列に適用したいときがあります。
そんなときはどうすればいいでしょうか?

 目次

 

形式を選択して貼り付けする方法

数式や書式のみをコピーして貼り付けできるのと同じように、列幅のみをコピーして貼り付けることができます。

f:id:kouten0430:20190816150633p:plain

 

・・・・・・あれ?行高さは?
なぜか、形式を選択して貼り付けする方法には行高さのみをコピペする機能がありません。

 

高さや幅を確認してから、他の行・列に設定する方法

これが一番原始的な方法です。お手本にしたい行や列の境目あたり(カーソルの形が変わる所)でクリックして、値を確認し

f:id:kouten0430:20190816150834p:plain

 

次に、値を同じにしたい行または列を選択した状態で右クリック→「行の高さ(または列の幅)」で同じ値を入力してOKします。

f:id:kouten0430:20190816150859p:plain

 

ただし、値を確認し、入力する手間があります。

 

マクロで適用する方法

上の方法でも十分なのですが、ちょっとだけ(ほんのちょっとだけ)簡単にできるマクロを作ってみました。

Sub 行の高さや列幅を他の行または列に適用する()
    '適用先の行全体または列全体を選択した状態で実行する
    'インプットボックスで適用元の行または列を指定する
    Dim 列番号 As String
    Dim 列幅 As Double
    Dim 行番号 As Long
    Dim 行高さ As Double
    
    If Selection.Address = Selection.EntireColumn.Address Then
        列番号 = InputBox("列幅の適用元となる列番号をアルファベットで指定")
        列番号 = StrConv(列番号, vbNarrow)
        
        If 列番号 Like "*[!A-Za-z]*" Then GoTo エラー処理
        
        On Error GoTo エラー処理
            列幅 = Columns(列番号).ColumnWidth
        On Error GoTo 0
        
        Selection.ColumnWidth = 列幅
        
    ElseIf Selection.Address = Selection.EntireRow.Address Then
        行番号 = InputBox("行高さの適用元となる行番号を指定")
        
        On Error GoTo エラー処理
            行高さ = Rows(行番号).RowHeight
        On Error GoTo 0
        
        Selection.RowHeight = 行高さ
    
    End If
    
    Exit Sub

エラー処理:
    MsgBox "存在しない行または列です。"
End Sub

※コードの使用方法

SubからEnd Subまでをコピーし、標準モジュール等に貼り付けて使用して下さい。なお、マクロで実行した処理は「元に戻す」ことができません。実行前に一旦保存しやり直しのできる状態にしておいて下さい。標準モジュールにコードを貼り付けてマクロを使用する方法はこちら

 

実行手順

  1. 高さや幅を変更したい行または列を選択した状態でマクロを実行。
  2. InputBoxが表示されるので、お手本にしたい行または列を入力してOKする。※行は数字、列はアルファベットで入力する。

 

・・・・・・ここまで書いてアレですが、マクロを用意するほどでもなかったかも。