• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAで列幅設定)

エクセルVBAで列幅設定

cj_moverの回答

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.5

#3、4、cjです。 #4投稿して30分後に新たに#3補足欄が投稿されたのを受けて#3補足欄へのレスです。 たぶん、#4を見る前に書かれたものなのかな?と思っていますけれど、 こちらの主旨が伝わっていない、ということだけは、よりハッキリしましたので、 相も変わらず下手な説明しか出来ませんが、もう少し書いてみます。 > すみません、以下のようにやってみました。 > 結合セル(C~F)の各セルColumnWidth合計と一つのセル(M)のColumnWidthは同一です。 はい、そのようにした時の、 "各セルColumnWidth合計と一つのセル(M)のColumnWidthは同一"ですが、 【結合セル(C~F)全体】の横幅 > 【単セル(M)】の横幅、 この、実際の横幅の違い、引いては、1行で表示可能な文字数の違い、に目を向けて貰いたい、 ということを伝えようと一連の回答を投稿しているのです。 > フォント種類サイズも同一です。しかし、不完全なものになってしまいます。 単純にColumnWidth合計を基準にしている限りは避けられない不完全さ、と思いますが、 確かに私の環境でも、#3補足欄のコードを走らせた結果は、 行高が合わないですし、それ以前に列の幅が違っていますので。 当初の質問文と#3補足欄でご提示の記述では正しい列の幅がトレース出来ていません。 まず「Excel用語としての列の"幅"=ColumnWidth」の数値を見るのではなくて 「絶対的な列の幅」がきちんとトレース出来ているか視覚的に確認してみてはどうですか? 簡単な確認方法として(#3でも触れているように)C:F列の結合セルをひとつ選んで色付けしてコピーして、 それをA列なりM列なりに[図]として貼り付ければ、「絶対的な列の幅」の合否を視認できると思うのですけれど。 「Excel用語としての列の"幅"=ColumnWidth」 と 「Excel用語としての(列の幅に関する)"ピクセル"∝Width」 とでは、単位が違うということだけではなくて算出方法が違う、ということなのです。 例えば #3で示したC:F列については、{5,3,6,7}という「Excel用語としての列の"幅"=ColumnWidth」 になっていますので、【それぞれの列】に表示可能な文字数を合計すると、21、になります。 ところが、C:F列にセルの結合を適用した場合は、C:F列全体に表示可能な文字数は、23弱、です。 なので、A列なりM列なりに「絶対的な列の幅」をトレースする必要があって、 その値をColumnWidthに換算すると、凡そ、22.88、になります。 つまり、(今回のように複数列を扱う場合は) 「Excel用語としての列の"幅"=ColumnWidth」を単純に加算したものを列の"幅"に指定しただけでは、 「絶対的な列の幅」よりも小さな幅になってしまう、ということです。 #3での提案の繰り返しになってしまいますが、 【結合セル(C~F)全体】の「Excel用語としての(列の幅に関する)"ピクセル"∝Width」を基準に 【単セル(M)】の.ColumnWidthに換算した上で設定する方が、楽なのでは? C:F列の結合セル全体の、「Excel用語としての(列の幅に関する)"ピクセル"∝Width」、を取得して、 この∝(比例)関係(フォント由来)を、/ 8 PixelとScreenのXSize(横方向サイズ)の∝(比例)関係を逆数で、* 4 / 3 元々セルの[余白]としてのサイズを、-5 のように演算して求めた結果を A列なりM列なりの「Excel用語としての列の"幅"=ColumnWidth」として設定してあげる、 という例を示したつもりなのです。 それぞれのパラメータを汎用的に取得することは可能でしょうけれど、 そもそもが"もっと簡単な方法はないでしょうか?"というご質問を受けての回答ですから、 あとは調整、修正、運用、の範疇でこなして貰えたら、って思うのです。 まぁ、こちら説明が下手で話が噛み合わないようでもあるので、同じ話はこれぐらいにしておきますが、 どうしても「Excel用語としての列の"幅"=ColumnWidth」だけで実現させたい?という特別なお考えでしたら、 "簡単"ではないにしろWeb上に情報はあるようですし、私の回答に際しての内規からは逸れてしまいますので、 本当にすみませんが、お応えするつもりはありませんので、あしからず。 ただ何ていうか、この課題、Excelクンの一般機能面がもう少し易しい設計だったら悩まずに済むのになぁ、 と思うことが何点かあって、そういう意味では、考えさせられる事が多くて刺激的でありました。 では、また。

emaxemax
質問者

お礼

すみません、回答4があるのを気づかないで書いてしまいました。 注意不足のうえ理解が悪くすみません。 Columns("A").ColumnWidth = (Range("C1:F1").Width * 4 / 3 - 5) / 8 この換算式でうまくいきました! なんどもありがとうございます。 これでうまくいったと思ったら、また難題が一つ。 それは別質問といたします。 ありがとうございました。

関連するQ&A

  • エクセルのブックを開く度にシートの列幅を指定したいのですが・・・

    稚拙な質問お許しください。 エクセルでブックを開いたときに、すでにシートの列幅が任意の幅になっているよう、VBAで「ThisWorkbook」というところに、 Private Sub Workbook_Open() Sheet1.Columns("a:a").Select Selection.ColumnWidth = 7 Sheet1.Columns("b:b").Select Selection.ColumnWidth = 8 Sheet1.Columns("c:c").Select Selection.ColumnWidth = 10 Sheet1.Columns("e:e").Select end sub といった感じで記述したのですが、「F8」キーで処理の過程をみながら追っていくとどうしても、Eの列を過ぎるとEの列だけでなくそれ以降の列も選択してしまい(シート上に表があるのですが、その表の1番最後の列までです。)、任意の幅に指定できないのですが、原因がよくわかりません。どなたか、お力添えください。

  • エクセルマクロ 同じ操作をする複数の列の記述は?

    列の幅を調整するときに、同じ幅の列をまとめて記述する方法を教えてください。 個別に記述し、やりたいことはできているのですが、まとめて記述する方法が知りたいです。 Columns("A").ColumnWidth = 4.63 '各列の幅を変更 Columns("b").ColumnWidth = 8.38 Columns("C").ColumnWidth = 12.75 Columns("D").ColumnWidth = 6.38 Columns("e").ColumnWidth = 4.13 Columns("F").ColumnWidth = 4.63 Columns("g").ColumnWidth = 8.38 Columns("H").ColumnWidth = 12.75 AとF列=4.63 をどのように記述したらいいのでしょうか

  • Excel VBAで、B列の幅を、既存のグラフの幅に設定したい。

    VBA初心者です。 ワークシート上にグラフを作成した後(例えば「グラフ1」とします)、B列の幅を作成したグラフの幅と同じに設定するには、どのように記述すればよいのしょうか? Columns("B").ColumnWidth = ActiveSheet.Shapes("グラフ1").Width Columns("B").Width = ActiveSheet.Shapes("グラフ1").Width Columns("B").ColumnWidth = ActiveSheet.Shapes("グラフ1").ColumnWidth どれもうまくいきませんでした。よろしくお願いします。

  • Excelにて、列の幅をマクロで変えるには?

    今、提出用の資料作成にて、 従業員の稼動実績を記載した表部分を隠して A3にかたち良く収まるように印刷できるよう列の調整をしようと マクロの記録を行い、下記のようなプログラムを得ました。 ところが、実行すると("U:AD")の部分は隠れているのですが、 それ以外は全て、列の幅が"20"になってしまいます。 一体どのようにすれば列の幅を記載通りに調整できるのでしょうか? お教え下さい。宜しくお願いします。 * * * * * * * * * * * * * * * * * Sub 稼動実績を隠す() ' ' 稼動実績を隠す Macro ' マクロ記録日 : 2007/9/27 ユーザー名 : ######## ' ' Columns("A:M").Select Range("A2").Activate Selection.ColumnWidth = 8 Columns("N:O").Select Selection.ColumnWidth = 16 Columns("P:P").Select Selection.ColumnWidth = 20 Columns("R:T").Select Selection.ColumnWidth = 20 Columns("U:AD").Select Selection.ColumnWidth = 0 Columns("AE:AF").Select Selection.ColumnWidth = 20 Columns("AG:AG").Select Selection.ColumnWidth = 8 Columns("AH:AH").Select Selection.ColumnWidth = 54 Columns("AI:AP").Select Selection.ColumnWidth = 20 Columns("AQ:AQ").Select Selection.ColumnWidth = 8 Columns("AR:AS").Select Selection.ColumnWidth = 20 Range("A2").Select End Sub

  • エクセル VBA

    A1,A2,A3→RAND()*99+1 B1→MAX(A1:A3) Sub test() Worksheets("sheet1").Calculate Dim x As Integer x = Range("B1") Range("C1").Value = x End Sub このように記述すると、B2とC2で結果が変わってしまうのですが、どうしてでしょうか?結果を同じにするにはどうすればいいですか?

  • 【VBA】範囲選択し降順で並び替え

    A列の最初の行から、F列の最終行迄を範囲選択し、C列降順で並べ替えをしたいです。最終行は、C列の最終行を指定します。 下記、「Rangeから始まる行」でエラーとなる為、ご教示宜しくお願いします。 Sub 使用頻度で並べ替え() Dim FastRow As Integer Dim LastRow As Integer FastRow = Cells(1, 1).End(xlDown).Row LastRow = Range("C" & Rows.Count).End(xlUp).Row Range("A & FastRow:F" & LastRow).Sort Columns("C"), xlDescending, Header:=xlNo End Sub

  • 列幅変更文の短縮が出来ますでしょうか?

    お世話になります。 現況では C2セルからX2セルに 1 或いは 2 を記入し 1ならば列幅を14 それ以外ならば列幅を0 と表示させる方法として、マクロ入門者の為に下記語句を置いて指示しています。 ActiveSheet.Select IF Ranbe("C2").value=1 then Columns("C").ColumnWidth =14 else Columns("C").ColumnWidth=0 end if 以下D列からX列まで同様の文書を置いてあります。 簡単に Range("C2:X2").select というような語句で短縮させることが出来るマクロ文を お教えください。

  • エクセルVBA

    A列を基準にBC列が空白ならAの数値を入れて、A>BならB列を更新、A<CならC列を更新 A列が数値以外ならその行をスキップ、という処理をしたいのですが Option Explicit Dim A As Range, B As Range, C As Range Dim i As Long Sub test() For i = 1 To 10 Set A = Cells(i, 1) Set B = A.Offset(0, 1) Set C = A.Offset(0, 2) If IsNumeric(A) Then Else Exit Sub End If If B.Value = "" Then B.Value = A.Value If C.Value = "" Then C.Value = A.Value If A.Value > B.Value Then B.Value = A.Value If A.Value < C.Value Then C.Value = A.Value Next i End Sub とすると数値以外の行の時点で停止してしまいます。 その行を飛ばして次の行に進むにはどうしたらいいのでしょうか?

  • excelのマクロが上手く動作しません

    excel2013で、シートのレイアウトを整えるマクロを以下のように作成しました。 しかし、いざ他のシートで試すと、そのシートと同時に特定のシートにもなぜかマクロが実行されてしまいます。(恐らく作ったときに使っていたシート) どうしたら今見ているシートだけにマクロを実行することができるでしょうか? ActiveWindow.Zoom = 85 ActiveWindow.Zoom = 70 Columns("A:A").ColumnWidth = 10.13 Columns("A:A").ColumnWidth = 10.63 Columns("B:B").ColumnWidth = 6.63 Columns("D:D").ColumnWidth = 20 Columns("D:D").ColumnWidth = 23.75 Columns("D:D").ColumnWidth = 24.63 Columns("E:E").ColumnWidth = 10.38 Range("E1").Select ActiveCell.FormulaR1C1 = "インボイス金額" ActiveCell.Characters(7, 2).PhoneticCharacters = "キンガク" Columns("F:F").Select Selection.Delete Shift:=xlToLeft Columns("G:G").Select Selection.Delete Shift:=xlToLeft Range("H9").Select Columns("G:G").ColumnWidth = 11.38 Columns("I:K").Select Selection.Delete Shift:=xlToLeft Range("J9").Select Columns("I:I").ColumnWidth = 15 Columns("J:J").ColumnWidth = 9.75 Columns("K:K").ColumnWidth = 9.5 Range("L2").Select Columns("L:L").ColumnWidth = 5.5 Columns("O:O").Select Selection.Delete Shift:=xlToLeft Selection.ColumnWidth = 13.88 Columns("P:P").Select Selection.Delete Shift:=xlToLeft Selection.ColumnWidth = 12.13 Selection.ColumnWidth = 13.25 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 11 ActiveWindow.ScrollColumn = 12 Columns("Q:Q").Select Selection.ColumnWidth = 5.5 Columns("S:S").Select Selection.ColumnWidth = 6.75 Columns("T:T").ColumnWidth = 9.75 Columns("Q:T").Select Range("T1").Activate Selection.Style = "Comma [0]" Columns("U:U").Select Columns("V:V").ColumnWidth = 5.5 Columns("V:V").ColumnWidth = 6 Columns("W:Z").Select Selection.Delete Shift:=xlToLeft Columns("X:Z").Select Selection.Delete Shift:=xlToLeft Range("X10").Select Columns("X:X").ColumnWidth = 12.25 Columns("X:X").ColumnWidth = 11.13 Columns("Y:Y").ColumnWidth = 6.75 Columns("Z:Z").ColumnWidth = 11.63 Columns("AA:AA").ColumnWidth = 6.75 Columns("AB:AB").Select Selection.Delete Shift:=xlToLeft Range("AB2").Select Columns("AB:AB").ColumnWidth = 11 Columns("AD:AO").Select Selection.Delete Shift:=xlToLeft Range("AF14").Select Columns("AD:AD").ColumnWidth = 11 Columns("AE:AE").Select Selection.Delete Shift:=xlToLeft Range("AG7").Select Columns("AE:AE").ColumnWidth = 20.38 Columns("AF:AJ").Select Selection.Delete Shift:=xlToLeft ActiveWindow.ScrollColumn = 21 ActiveWindow.ScrollColumn = 1 Rows("2:2").Select ActiveWindow.FreezePanes = True Range("A2").Select ActiveWorkbook.Worksheets("11").Sort.SortFields.Clear ActiveWorkbook.Worksheets("11").Sort.SortFields.Add Key:=Range("D2:D137"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("11").Sort.SortFields.Add Key:=Range("A2:A137"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("11").Sort .SetRange Range("A1:AE137") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .Apply End With End Sub よろしくお願い致します。

  • エクセルVBA FindNextについて

    エクセル2002使用です。 VBAのFindNextメソッドについて教えていただけますでようか?不定期の行ごとに存在する○から△までの表を抽出するために次のようなコードをつくりました。   A  B  C  D 1 ○ × × 2 × × × 3 △ × × 4 5 ○ × × 6 × × × 7 △ × × Sub 表の抜き出し() Dim myr1 as range Dim myr2 as range Dim firstmyr1 as String Set myr1 = Columns("A").Find(What:="○") firstmyr1 =myr1.adress Set myr2 = Columns("A").Find(What:="△") Do  処理・・・・ Set myr1 = Columns("A").FindNext(after:=myr1) Set myr2 = Columns("A").FindNext(after:=myr2) Loop until myr1.adress = firstmyr1 End Sub 上記のようなコードで、処理の後のSetステートメントでFindNextを使うと、A5の○とA7の△を見つけてほしいのに、1回目の処理・・・の後の読み込みでウオッチで見るとmyr1値が△になってしまって2回目の読み込みにいけません。Setステートメントが2つ以上あるときのFindNextメソッドの使い方で何か注意点があるのでしょうか? よろしくお願いします。