• ベストアンサー

【Excel VBA】列幅の設定

こんばんは。 Excel2003を使用しています。 あるシステムからのデータをCSVで出力、Excelで表示させると、セルの幅が合っていないので、見づらいのですが、これを解消するためにそれぞれの列幅を決めて、マクロで設定したいと思っています。 連続しない列の列幅の設定のコードの書き方がわからないので、教えていただけないでしょうか?ひとつの列や連続した列幅の設定であれば、手元にある参考書でわかるのですが。。。 例えば A列、C列、D列、G列、I列、J列の列幅を14 B列、F列、H列の列幅を10 に設定するコードはどのように書いたらいいのでしょうか? マクロ勉強中です。よろしくお願いします。

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

  • ベストアンサー
  • ape5
  • ベストアンサー率57% (85/148)
回答No.1

2通りあります。 (1)は各列の中で一番幅を取るセルの大きさに合わせて自動的に幅が設定されます。 (2)は各列の幅を直接指定してやる方法です。 ----------------------------------------------- (1) Worksheets(1).Range("A:D").EntireColumn.AutoFit (2) With Worksheets(1)  .Range("A1").ColumnWidth = 3  .Range("B1").ColumnWidth = 10  .Range("C1").ColumnWidth = 12  .Range("D1").ColumnWidth = 5 End With ------------------------------------------------

rx-z5815
質問者

補足

おはようございます。 回答ありがとうございます。 (1)の方法は、手元の参考書にも記載されていましたが、これだと不都合な点があるので、(2)の方法でいきたいと思います。 ひとつの列や連続した列の列幅を指定する書き方はわかるのですが、質問文中の例に挙げたような連続しないセルの列幅が同じ場合でも、ひとつずつ書く方法しかないのでしょうか? (コンマで区切る?などして、まとめて書けないのでしょうか?) もし、ご存知なら教えていただけると助かります。 よろしくお願いします。

その他の回答 (4)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.5

>マクロ勉強中です であればマクロ記録を頻繁にとることをお勧めします。 今回のもコントロールを押しながら、 セル、A1、C1、D1、G1、I1、J1を選択するマクロ記録をとると   Range("A1,C1:D1,G1,I1:J1").Select となります。 これで複数選択する方法がわかりますので、自ずと、Wendy02さんの回答のように(変数でとるかどうかは別として)なりますよね。   Range("A1,C1:D1,G1,I1:J1").ColumnWidth = 14 このようにある程度のことはマクロ記録をとることで分かりますので 頻繁にマクロ記録をとってみることをお勧めします。  

rx-z5815
質問者

お礼

おはようございます。 マクロの記録…すっかり忘れていました(^_^;) おっしゃるとおり、マクロの記録を利用すれば、ある程度のことは分かりますよね。 アドバイスありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 通常は、 UsedRange で、列それぞれを、AutoFit させてしまうのが早いと思いますね。 ただ、#1/#3 さんの書いたとおりで、何の問題もないと思うのですが。 >ひとつずつ書く方法しかないのでしょうか?(コンマで区切る?などして、まとめて書けないのでしょうか?) それは、可能なのですが、マクロというのは、裏方の仕事でワークシートのように「スマート?=スリム」とはいかないものです。だから、その内容がどんなに複雑で書くのは大変だとしても、それ自体は表に出てこないのですから、あまり、そういうことは、考えないほうがよいと思います。マクロの勉強中でしたら、そうしたコードを、何百、何千と書いていく上で、経験として身についていくものなのだと思うのです。 VBAの究極の求められるものは、単なる出てきた結果にしか過ぎませんから、#3 のコードと優劣なんて存在しないことだけは分かってくださいね。 Sub ColumnWidthsArrange() 'A列、C列、D列、G列、I列、J列の列幅を14  Const W14 As String = "A1,C1,D1,G1,I1,J1" 'B列、F列、H列の列幅を10  Const W10 As String = "B1,F1,H1"  Range(W14).ColumnWidth = 14  Range(W10).ColumnWidth = 10 End Sub

rx-z5815
質問者

お礼

おはようございます。 >マクロというのは、裏方の仕事でワークシートのように「スマート?=スリム」とはいかないものです。 あとで、コードを見直したときにわかりやすいように、「スマート?=スリム」にしておきたいと思ってしまいました。 おっしゃるとおり、マクロの内容は表には出てこないわけですから、結果さえきちんとしていれば、問題ないですね。 ただ、いろんな方から回答をいただくことで、それぞれ違った書き方を拝見できるのは参考になりますし、その質問とは関係ない部分でも、役に立ったこともありましたので、つい補足を投稿してしまった次第です。 貴重なお言葉ありがとうございました<(_ _)>

  • ape5
  • ベストアンサー率57% (85/148)
回答No.3

一度に指定する方法はちょっと自分は知らないです。 もしやるなら以下のような方法が普通かと。 ---------------------------------------------------- With Worksheets(1) .Range("A1").ColumnWidth = 14 .Range("C:D").ColumnWidth = 14 .Range("G1").ColumnWidth = 14 .Range("I:J").ColumnWidth = 14 .Range("B1").ColumnWidth = 10 .Range("F1").ColumnWidth = 10 .Range("H1").ColumnWidth = 10 End With ------------------------------------------ ちょっとトリッキーなのは以下のような方法もあるかと思います。 下の例だとE列は幅が14になりますが、そこは自分で指定してください。 ------------------------------------------ With Worksheets(1) .Range("A:J").ColumnWidth = 14 .Range("B1").ColumnWidth = 10 .Range("F1").ColumnWidth = 10 .Range("H1").ColumnWidth = 10 End With ------------------------------------------

rx-z5815
質問者

お礼

おはようございます。 再度の回答ありがとうございます。 丁寧に説明してくださり、助かりました。 ありがとうございました。

回答No.2

こんにちは。 そういった場合は、Select Caseステートメントがいいかも知れませんね。 ●(処理内容)   A、C、Eの列幅を 14   B,D、Fの列幅を 10 列番号を数字で扱うか、見た目の通り文字で扱うかでコードがちょと違います。 (1)列番号を数字(左から、1,2,3・・)で処理する方法 ---------------------------------------------------------- Sub Test222()   Dim Clm As Integer      For Clm = 1 To 256     Select Case Clm       Case 1, 3, 5         Columns(Clm).ColumnWidth = 14       Case 2, 4, 6         Columns(Clm).ColumnWidth = 10       Case Else     End Select   Next Clm End Sub ---------------------------------------------------------- (2)列番号を文字(A,B,C・)で処理する方法 ----------------------------------------------------------- Sub Test333()   Dim Clm As Integer   Dim Moji As String   For Clm = 1 To 256     Moji = Columns(Clm).Address(False, False)     Moji = Left(Moji, InStr(Moji, ":") - 1)     Select Case Moji       Case "A", "C", "E"         Columns(Moji).ColumnWidth = 14       Case "B", "D", "F"         Columns(Moji).ColumnWidth = 10       Case Else     End Select   Next Clm End Sub ------------------------------------------------------------ 上記からもお分かりのように (2)の列番号を文字(A,B,C・・)で扱う方が どの列を処理してるか一目瞭然なのでベターかな、と。 それから、For Clm = 1 to 256 と全列を回しているのは どれの列が対象になってもここは変えなくてもいいようにです。 以上です。  

rx-z5815
質問者

お礼

おはようございます。 丁寧に説明していただき、ありがとうございます。 Select Case は、参考書等で目にしたことはありますが、あまり使用したことがなかったので、勉強になりました。 回答ありがとうございました。

関連するQ&A

  • 【Excel】CSVファイルの表示

    こんにちは。 Excel2003を使用しています。 CSVファイルをExcelで表示させると、セルの列幅が合っていないので、見づらいのですが、この列幅を自動で調整・設定することはできないでしょうか? 例えば、それぞれの列で、一番列幅が広くなるセルの列幅に設定するといったようなことができるといいのですが。。。 あるシステムのデータをCSVで出力→Excelで表示→プリントアウトまでしたいのですが、データ数(CSVでの出力数)が多くなるので、列幅の設定が自動でできればと思い、質問させていただきました。 よろしくお願いします。

  • 【Access】リストボックスの列幅設定

    アクセスのリストボックスの列幅設定について教えてください。 リストボックスの列数が34あり、それぞれ、プロパティの「列幅」で 列の幅を設定しています。 33列目までは設定した列幅で表示されるのですが、最後の列だけが 指定した列幅になりません。 20cmくらいの広い列幅になっていて、どう設定しても幅が変わりません。 最終列の幅を設定するにはどうしたらいいのでしょうか。 教えてください。よろしくお願いします。

  • エクセルでの列幅の自動設定

    何百行のデータがあるエクセルの表があります。ある列には文字列が入っているのですが、この文字列長が短いのから長いのまでいろいろあります。列幅を適当に決めて印刷してみると、文字が長くてその列幅からはみ出てしまし、再度列幅を設定して印刷してみるなんてことをやってます。これを全ての文字列がちゃんと入るような列幅を自動的に設定することはできないでしょうか?文字列は1行で表示したいので、書式→セルの「折り返して全体を表示する」は使いたくありません。よろしくお願いします。

  • 表の列幅を設定できません。

    表の列幅を設定できません。 5行×4列の表を挿入します。 各セルに文字列を入力します。 その後に、「属性」ダイアログの「表」タブで、「表の幅」を650ピクセルにします。 そして「枠表示を1ピクセルにし、「セル内の余白」を5ピクセルにします。 また、「表の列」タブで、1列目:120ピクセル、2列目:120ピクセル、3列目:150ピクセルに設定します。 この設定で、1列目と2列目の幅が違います。 2列目が狭く、約半分ぐらいしかありません。 この理由は何が考えられるでしょうか。 どこか確認するところはあるでしょうか。 尚、モニターの解像度は、1024×768ピクセルにしています。 よろしくお願いします。

  • Excel97の列幅について

    知り合いに聞かれたのですが、Excel97で表を作ってA列のみ列幅を変更したら全体の列幅がA列と同じ幅になってしまったそうです。選択している列はA列のみらしいのですが、Excel97を使用したことがないのでわかりません。 Excel97にはそのような設定があるのでしょうか?

  • Excelでの列幅の変更

     Excelで列幅を変更したいのですが、ある列全体(例えばA列)ではなく、その中の複数のセルだけ(例えばA2,A3だけ)の幅を変更することはできますか?今まで、そんなシチュエーションに出会ってないので、困ってます。

  • エクセル 上下で列幅を変えるには

     エクセルで同じシート内の上下で違う表を作る場合に、上の表の列の幅と下の表の列の幅を別々に設定したい場合はどうすればいいですか。上の列幅を変えるとシート下の表の同じ列の幅も一緒に変わってしまいますよね。これを例えば下の表の列幅が上の列幅の変化に影響されない様にしたいんですが、これは無理ですか?やっぱり別のシートに作るしかないのでしょうか?

  • テーブルの列幅を固定にしたい

    お世話になります。テーブルの列幅を固定にしたいのですが、どうも上手くいきません。 それぞれの列幅をwidthで設定すると、空白の列は(正確には全角スペースが入っている列は)正しい列幅で表示されるのですが、列幅より長い文言が入っている列は、列幅が狭くなってしまいます。・・・逆だとまだマシなんですけど; 私の希望としては、列幅は完全固定にして、列幅より長い文言がセルに入った場合は、行幅を広げて表示して欲しいんです。 試しに値を消したときは正しい列幅で表示されて、長い文言を入れたとたん狭くなります(T.T) HTMLの仕様なのでしょうか?

    • ベストアンサー
    • HTML
  • エクセルの列幅について

    エクセル2000またはXPを使っています。 行の高さや列幅を変更した後、もとのサイズに戻したい ときの質問です。行の場合はセルのデータを消して 自動調整やダブルクリックで標準の高さに戻ります。 一方、列幅は手動で標準の幅に戻すしかないのでしょうか? どうして、列も同じ操作ができないのか疑問なのです。 ダメならダメでいいのですが、自信がないので 教えてください。

  • 一定数の列幅の同じにする

    エクセルで例えば10個のセルの列幅を一度に均等にすることってできますか? 10個のセル列幅の合計を測って1/10すればできないことはないですが めんどうです。 A4縦でデフォルトでは9個のセルが並んでいますがが これを13個に均等な幅で増やしたいのです。

専門家に質問してみよう