• ベストアンサー

Excel VBAで、複数のシートのセルの列幅を一度に変更する方法は??

Excel VBAで、複数のシートのセルの列幅を一度に変更する方法は?? Excel VBAに関する質問です。 ある統計表(のようなもの)から特定の数字を抜き出し、同じファイル内の別シートに反映させる作業を一部効率化できないかと試みています。 For~Nextの構文を使って、複数のシートを作成するところまではできたのですが、その後の列幅の調整がよくわからず困っています。 列の幅については下記のような感じかなと思っているのですが、 実行しても一つのシートにしか、結果がでず(全てのシートが 選択はされるのですが)他のシートの列幅が変わりません。。。 Sub 複数シートの選択()   WorkSheets.select Columns("B:C").ColumnWidth = 15 Columns("E:H").ColumnWidth = 20 End Sub この処理の前にシートの作成をするようにしているので、 全てのシートではなく、そのときに作成したシートのみにかかる 方法でも問題ないのですが、その方法だとうまくいくのでしょうか? まだかなり勉強中の段階で、初歩的なことでしたら大変申しわけないのですが、上記で修正すべき点や参考になるサイトを教えていただければと思います。 For~Nextでやるのかも?と思うのですが、この構文が理解しきれておらず、自分でまったく思いつきません・・・ 基本にも満たない内容で申し訳ありません。 情けない話なのですが、ご教授頂けると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • nknk80
  • ベストアンサー率65% (17/26)
回答No.1

これではどうでしょうか。 Sub 複数シートの選択() For i = 1 To Worksheets.Count With Worksheets(i) .Select Columns("B:C").ColumnWidth = 15 Columns("E:H").ColumnWidth = 20 End With Next End Sub

mikan79
質問者

お礼

nknk80様 回答ありがとうございました。おかげさまでおっしゃるとおりにしてみたところうまく出来ました。処理の回数を現在のシートの数、としてやれば良いんですね。勉強になりました。 遅い時間にも関わらず、すばやいご回答くださったこと感謝します。 ありがとうございました!!!

その他の回答 (1)

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.2

実験の結果、確かに Sheets.SelectまたはWorksheets.Selectの後に Columns("B:C").ColumnsWidth=10としても全てのシートには適用されませんでしたが、 Columns("B:C").Select Selection.ColumnsWidht=10 とすると全てのシートで列幅が適用されました。 前者では、複数シートが選択されていてもColumnsWidthはアクティブシートにのみ適用になりますが 後者は選択された範囲に対して処理するため全体へ適用されるのだと思います。

mikan79
質問者

お礼

Masa2072様、ご回答ありがとうございました。検証までしていただいて、ご丁寧な対応ありがとうございます。 おっしゃるとおりにしてみたところ、確かに全てのシートにちゃんと列幅調整がかかりました。最初にシートを選択してやれば出来るのかなと思い、Masa2072様のいうような方法は思いつかなかったです。 出来るだけ自分でもこの件については調べたつもりだったのですが、 お手上げ状態だったので回答頂き助かりました。 ありがとうございました!!

関連する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番最後の列までです。)、任意の幅に指定できないのですが、原因がよくわかりません。どなたか、お力添えください。

  • エクセルVBAで列幅設定

    A列の幅を、C~F列の幅(同一ではありません)に設定しようと思いました。 ところが Columns("A").ColumnWidth = Range("C1:F1").Width とすると、ColumnWidthとWidthの単位がまったく違うのでエラーになります。 同じ単位で設定するには Columns("A").ColumnWidth = Columns("C").ColumnWidth + Columns("D").ColumnWidth + Columns("E").ColumnWidth + Columns("F").ColumnWidth とするか、 Sub test02() Dim c As Range Dim x As Single For Each c In Range("C1:F1") x = x + c.ColumnWidth Next Columns("A").ColumnWidth = x End Sub などのように手の込んだことをするしか思いつきません。 もっと簡単な方法はないでしょうか?

  • Excel の複数シートの列幅を同じにするには?

    よろしくお願いします。 Excel2000についての質問です。 一つのブック内にある複数のシートの列幅や 行幅を一度に同じにしたいと考えています。 ただし、すべてのシートにはすでにデータや 表が存在します。 可能でしょうか。 可能であれば方法をご指導願えますでしょうか。 どうぞ宜しくお願い致します。

  • EXCEL VBA作成方法

    職場で頭の痛いことがありまして・・・ 月合計をEXCELで1つのシートに出すことは出来ますが、それを日付ごとに(1日~31日)複数シートにする方法がわかりません。 内容は自分で工夫をして見ましたがうまくできません。ご教授をいただけますでしょうか? Sub 月別シート分割() Dim 元シート As Worksheet Dim 列幅() As Variant Dim 条件列 As Integer Dim 月 As Long Dim 条件1 As String, 条件2 As String Dim i As Integer, j As Long Set 元シート = ActiveSheet ActiveCell.CurrentRegion.Select ReDim 列幅(Selection.Columns.Count) For i = 1 To Selection.Columns.Count 列幅(i) = Selection.Cells(, i).ColumnWidth Next 条件列 = 1 月 = Month(ActiveCell.Offset(1, 条件列 - 1)) If Selection.AutoFilter Then Selection _ .AutoFilter For i = 1 To 31 Sheets.Add Before:=Sheets(i) ActiveSheet.Name = i & "" 条件1 = ">=" & DateSerial(月, i, 1) 条件2 = "<" & DateSerial(月, i + 1, 1) 元シート.Activate ActiveCell.CurrentRegion.Select Selection.AutoFilter Field:=条件列 _ , Criteria1:=条件1 _ , Operator:=xlAnd _ , Criteria2:=条件2 Selection.SpecialCells( _ xlCellTypeVisible).Copy Sheets(i).Range("A1").PasteSpecial For j = 1 To Selection.Columns.Count Sheets(i).Cells(, j).ColumnWidth _ = 列幅(j) Next j Next i Selection.AutoFilter Sheets(1).Activate End Sub

  • Excel VBAで複数シートをコピーする

    Excel VBAで複数のシートを新たらしいブックにコピーする方法が分かりません。 一応、Selectで全てのシートを選択し コピーする方法は分かるのですが 出来ればSelectなどの画面遷移をプログラム内に含ませたくありません シートは n件存在します。 ご存知の方がおられましたら ぜひ、教えて頂けないでしょうか?

  • エクセル2003,2007 複数のシートを同時に変更したいのです。

    エクセル2003,2007 複数のシートを同時に変更したいのです。 (1)全てのシートを選択して、余白、改ページなどを全て変更しました。   しかし、列を広げようとしても矢印が動かず列幅の変更が出来ませんでした。  やり方が悪かっただけでしょうか?  全シートを選択しても更新されないことは、あるのでしょうか? (2)行挿入をすると、罫線も一緒に挿入してほしいのですが、うまくいく時といかない時が  あります。確実に列と罫線が一緒に挿入される方法をおしえていただけないでしょうか。   (3)後、全てのシートを選択して印刷をかけたのですが、  右上にNo.1~番号がついてしまいました。  シートそれぞれには、Noがつくように設定したのですが、  全シートの合計Noは必要としないので、はずす方法をおしえていただけないでしょうか。 お手数をおかけしてすみませんが、どうぞ宜しくお願い致します。

  • Excel VBAで選択したシートの表を一つのシートに転記する方法

    こんばんは。 Excel VBAで、 複数のシートを選択した状態で、 マクロを実行すると、最後のシートに、選択したシートの表が 転記され、1つのシートにまとまる便利なマクロが組めないでしょうか。 よく全てのシートを1つのシートにまとめるのは見るのですが、 選択した複数のシートの名前を書き出す方法がわかりません。 良い方法をご存知でしたら教えていただけないでしょか。 宜しくお願い致します。

  • VBAで特定のシートを複数選択する方法

    エクセルのマクロで複数のシートから特定の文字のみが入力されているシートを全て選択したいのですが、どのようにプログラムすればよいのでしょうか? 最近勉強し始めたばかりでVBAについての知識が乏しく、完全に行き詰ってしまいました。

  • 土日に加えた日の列幅変更マクロを教えてください。

    エクセルで行事入力表を毎月作成しています。 D4からAG4までに1日から31日の日付を入れ、土日は行事がないので、 教えていただいた下のマクロの実行で列幅を縮小しています。   Sub Macro1()   Dim idx As Integer   For idx = 4 To 34  If Weekday(Cells(4, idx).Value) = vbSunday Or _   Weekday(Cells(4, idx).Value) = vbSaturday Then   Columns(idx).ColumnWidth = 1.5   End If   Next   End Sub これに、お盆や正月の行事のない日(会社の休日)を加えたいのですが、出来るでしょうか。 行事のない日付は、AK4からAK15に予め入力しています。 どなたか、よろしくお願いいたします。

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

    お世話になります。 現況では 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 というような語句で短縮させることが出来るマクロ文を お教えください。

専門家に質問してみよう