Excel VBA 「列幅をテーブルに記録」「テーブルの列幅設定値を用いて列幅を変更する」(利用
Excel VBA 「列幅をテーブルに記録」「テーブルの列幅設定値を用いて列幅を変更する」(利用方法)
・利用方法
手順1
シート「データ」のテーブルに列を追加したい場合、追加する前に、テーブルの列数(列記号)を確認し、
シート「データ列幅」のテーブル「列幅」(列記号)の範囲にあるか確認する。
シート「データ列幅」のテーブル「列幅」(列記号)の範囲にない場合は、テーブル「列幅」(列番号)の連番を追加し、
列番号を列記号に変換する関数式「=SUBSTITUTE(ADDRESS(1,A5,4),1,"")」テーブル「列幅」(列記号)のセルに
入れて、列記号に該当する列記号を求める。この列記号が、シート「データ」のテーブルの列記号が含まれるように
する。
手順1
シート「データ」のテーブルに列を追加したい場合、追加する前に、テーブルの列数(列記号)を確認し、
シート「データ列幅」のテーブル「列幅」(列記号)の範囲にあるか確認する。
シート「データ列幅」のテーブル「列幅」(列記号)の範囲にない場合は、テーブル「列幅」(列番号)の連番を追加し、
列番号を列記号に変換する関数式「=SUBSTITUTE(ADDRESS(1,A5,4),1,"")」テーブル「列幅」(列記号)のセルに
入れて、列記号に該当する列記号を求める。この列記号が、シート「データ」のテーブルの列記号が含まれるように
する。
手順2
シート「データ列幅」のボタン「シート「データ」の列幅を取得しテーブル「列幅」の列幅取得列に記入する」を押し、
テーブル「列幅」(列幅取得)に取得した列幅が表示されることを確認する。
シート「データ列幅」のボタン「シート「データ」の列幅を取得しテーブル「列幅」の列幅取得列に記入する」を押し、
テーブル「列幅」(列幅取得)に取得した列幅が表示されることを確認する。
手順3
テーブル「列幅」(列幅取得)の値をテーブル「列幅」(列幅設定値)に値を貼り付けする。
そして、テーブル「列幅」(列幅設定値)にこれからシート「データ」に追加する列記号の
行が空白になるように、以降の行のデータを1行下にずらす。
テーブル「列幅」(列幅取得)の値をテーブル「列幅」(列幅設定値)に値を貼り付けする。
そして、テーブル「列幅」(列幅設定値)にこれからシート「データ」に追加する列記号の
行が空白になるように、以降の行のデータを1行下にずらす。
手順4
シート「データ」のテーブルに目的のカラムを追加し、列幅を調整する。
手順3の空白にしたセルに調整した列幅を記入する。
手順3の空白にしたセルに調整した列幅を記入する。
手順5
シート「データ列幅」のボタン「テーブル「列幅」の列幅設定値を用いてシート「データ」の列幅を変更する」
を押して、シート「データ」の列幅が調整されたことを確認する。(手順4でテーブルに列を追加した時に
列幅が勝手変更されたのが、修正されたことを確認する。)
シート「データ列幅」のボタン「テーブル「列幅」の列幅設定値を用いてシート「データ」の列幅を変更する」
を押して、シート「データ」の列幅が調整されたことを確認する。(手順4でテーブルに列を追加した時に
列幅が勝手変更されたのが、修正されたことを確認する。)
end
Excel VBA 「列幅をテーブルに記録」「テーブルの列幅設定値を用いて列幅を変更する」
Excel VBA 「列幅をテーブルに記録」「テーブルの列幅設定値を用いて列幅を変更する」
Exclのテーブルを利用していて、テーブルに列(カラム)を挿入するとすると、列(カラム)を挿入した右側の列幅が勝手に変更されてしまう。
いろいろ調べたが、勝手に変更されないような設定はできなさそうなので、VBAで何とかならないかやってみた。
シート「データ」にテーブル「データ」がある。
新たにシート「データ列幅」を追加し、カラム(A:列番号、B:列記号、C:列幅取得、D:列幅設定値)としたテーブル「列幅」を4行目から作成する。
列番号 | 列記号 | 列幅取得 | 列幅設定値 |
1 | A | 3.00 | 3 |
2 | B | 3.29 | 3.22 |
3 | C | 7.43 | 7.4 |
4 | D | 9.86 | 9.81 |
5 | E | 10.29 | 10.34 |
6 | F | 4.57 | 4.62 |
7 | G | 4.71 | 4.68 |
8 | H | 11.43 | 11.43 |
9 | I | 11.43 | 11.43 |
10 | J | 11.43 | 11.43 |
・列記号は列番号ごとにに関数式を利用して取得する。
=SUBSTITUTE(ADDRESS(1,A5,4),1,"")
・テーブル「列幅」の列幅取得に取得したシートデータの列幅を記入する
Sub テーブル列幅の列幅取得に取得したシートデータの列幅を記入する()
Dim coldata As Variant
Dim i As Integer
Dim dmr As Integer
Dim i As Integer
Dim dmr As Integer
coldata = ActiveSheet.ListObjects("列幅").DataBodyRange
'次元要素数を入れる
dmr = UBound(coldata, 1)
'Debug.Print dmr
dmr = UBound(coldata, 1)
'Debug.Print dmr
'列幅を調べ配列に格納する
For i = 1 To dmr
coldata(i, 3) = Sheets("データ").Columns(i).ColumnWidth
' Debug.Print coldata(i, 1), coldata(i, 2), coldata(i, 3), coldata(i, 4)
Next i
coldata(i, 3) = Sheets("データ").Columns(i).ColumnWidth
' Debug.Print coldata(i, 1), coldata(i, 2), coldata(i, 3), coldata(i, 4)
Next i
'テーブル列幅(A5からテーブル「列幅」の末尾まで)に配列データを書き込む
'テーブル「列幅」が4行目からなので+4する
Range("A5:" & "D" & dmr + 4) = coldata
Range("A5:" & "D" & dmr + 4) = coldata
End Sub
・テーブル「列幅」の設定値を用いてシート「データ」の列幅を変更する
Sub テーブル列幅の設定値を用いてシートデータの列幅を変更する()
Dim coldata As Variant
Dim i As Integer
Dim dmr As Integer
Dim i As Integer
Dim dmr As Integer
coldata = ActiveSheet.ListObjects("列幅").DataBodyRange
'次元要素数を入れる
dmr = UBound(coldata, 1)
'シートデータの列幅を設定する
For i = 1 To dmr
Sheets("データ").Columns(i).ColumnWidth = coldata(i, 4)
Next i
Next i
End Sub