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

エクセルVBAで列幅設定

cj_moverの回答

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

#3、cjです。お礼欄のみ投稿されている時点でのお礼欄へのレスです。 > 正しくは、列幅というより表示出来る文字数でした。 #3の回答主旨に沿って言えば、仕様(1)絶対的な幅(ピクセル幅)ということのようです。  [列幅](Excelの用語) = (フォントの種類とサイズに準じて)表示可能な文字数によって表す列の幅  [文字数](便宜上の用語) = 表示可能な文字数  [文字幅単位](便宜上の用語) = (フォントの種類とサイズに準じて)基準となる1文字に割り振られる[ピクセル]値  [余白](便宜上の用語) = 表示に必要な幅に加える余地。1列にひとつ設定される。   ※何れも[表示100%]を基準にしますが、異なるズーム表示したもの同士を比較した場合に表示可能な文字数が変化するだけで、   [列幅]と[ピクセル]の相対関係はズームに係りません。 という風に定義したとすると、   [列幅]で表す[文字数] * [文字幅単位] + [余白] という風に絶対的な幅が【各列毎に】決まっているので、 "複数列[列幅]の合計"から"単列の[列幅]"を設定しようとすると、列数に比例した[余白]の分の誤差が出てしまいます。 > 実は、レイアウトの都合上、どうしても一部の行で複数列を結合した表をつくらなければなりません。そしてそこに自動表示させるのは、計算によって求められらたある値に対応する長文の文字列なのです。 > この長文文字列を折り返して表示させるのですが、表示させるのは数種類のうちの1つなので、行の高さをあらかじめ固定できません。 > しかし行の高さの自動調整は結合セルでは使えません。そこで同じ行に、結合させる複数列と同じ幅の1列を作って、そこにいったん長文を折り返して表示させ、そこで行の高さの自動調整をかける仕掛けを作っていたのです。 "数種類"というのがよく解りませんが、セル内で何行分文表示させる([折り返して全体を表示する]の仕様に準)か、 実行前に予測ができない、という意味かと思います。 フォントサイズが統一されているなら、とか、等幅フォントを使っているなら、とか、 条件によっては、簡単にできる部分もあるでしょうけれど、この手の課題は汎用性を考えることで、 周りからは手が付けられない課題になってしまうことが多いです。 「結合セルについて[折り返して全体を表示する]機能の自動に準じた行の高さを設定する」ということでしたら、 それはそのテーマで質問してみてもいいかも知れません。 その場合は、環境や条件を限定するか、または汎用型を求めているとハッキリ意思表示するかすれば、 役立つ回答も付き易いと思います。 [折り返して全体を表示する]機能も実は必要以上の行高を返したり(1行分多かったり)する場合が多いので、 必要十分な行高を返すように書く他のアプローチでも結構悩んだ覚えがあります。 また、印刷した時の仕上がり、とか、ページレイアウトへの影響とか、も考慮するべきかも知れません? 不得手な私には何が必要でどこまでやれば十分か判断がつきませんです。 簡易簡略、という方向で、とりあえず、#3の主旨にそって、 「ざっくり手抜き版」の仕様(1)に書き加えると、以下のような感じでも、まぁ、使えるのではないでしょうか? こちらの環境では、 A列の単セルとC:F列の結合セルで、[折り返して全体を表示する]機能による見かけ上の改行ポイントを揃えられること を確認しています。  4 / 3  5  8 などのパラメータはPC環境、フォントに合わせて変える必要がありますが、 書式としては共通している、と思います。 ' ' /// Sub Re8490019n()   Dim i As Long   i = 3   Columns("A").ColumnWidth = (Range("C1:F1").Width * 4 / 3 - 5) / 8   With Cells(i, "A")     .WrapText = True     .Value = Cells(i, "C")   End With End Sub ' ' ///

emaxemax
質問者

お礼

ありがとうございました。 たすかりました。

関連する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メソッドの使い方で何か注意点があるのでしょうか? よろしくお願いします。