こんばんは。
Excel2003を使用しています。
あるシステムからのデータをCSVで出力、Excelで表示させると、セルの幅が合っていないので、見づらいのですが、これを解消するためにそれぞれの列幅を決めて、マクロで設定したいと思っています。
連続しない列の列幅の設定のコードの書き方がわからないので、教えていただけないでしょうか?ひとつの列や連続した列幅の設定であれば、手元にある参考書でわかるのですが。。。
例えば
A列、C列、D列、G列、I列、J列の列幅を14
B列、F列、H列の列幅を10
に設定するコードはどのように書いたらいいのでしょうか?
マクロ勉強中です。よろしくお願いします。
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
------------------------------------------------
この回答への補足
おはようございます。
回答ありがとうございます。
(1)の方法は、手元の参考書にも記載されていましたが、これだと不都合な点があるので、(2)の方法でいきたいと思います。
ひとつの列や連続した列の列幅を指定する書き方はわかるのですが、質問文中の例に挙げたような連続しないセルの列幅が同じ場合でも、ひとつずつ書く方法しかないのでしょうか?
(コンマで区切る?などして、まとめて書けないのでしょうか?)
もし、ご存知なら教えていただけると助かります。
よろしくお願いします。
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
このようにある程度のことはマクロ記録をとることで分かりますので
頻繁にマクロ記録をとってみることをお勧めします。
おはようございます。
マクロの記録…すっかり忘れていました(^_^;)
おっしゃるとおり、マクロの記録を利用すれば、ある程度のことは分かりますよね。
アドバイスありがとうございました。
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
おはようございます。
>マクロというのは、裏方の仕事でワークシートのように「スマート?=スリム」とはいかないものです。
あとで、コードを見直したときにわかりやすいように、「スマート?=スリム」にしておきたいと思ってしまいました。
おっしゃるとおり、マクロの内容は表には出てこないわけですから、結果さえきちんとしていれば、問題ないですね。
ただ、いろんな方から回答をいただくことで、それぞれ違った書き方を拝見できるのは参考になりますし、その質問とは関係ない部分でも、役に立ったこともありましたので、つい補足を投稿してしまった次第です。
貴重なお言葉ありがとうございました<(_ _)>
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
------------------------------------------
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 と全列を回しているのは
どれの列が対象になってもここは変えなくてもいいようにです。
以上です。
おはようございます。
丁寧に説明していただき、ありがとうございます。
Select Case は、参考書等で目にしたことはありますが、あまり使用したことがなかったので、勉強になりました。
回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) excelの列幅高さが勝手に変わる(特定のPCだけ) 8 2022/07/14 16:51
- Visual Basic(VBA) vbaで条件付き書式を設定したときの適用範囲について 1 2023/07/17 23:14
- Excel(エクセル) エクセルについて教えてください。 3 2023/03/24 08:34
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Excel(エクセル) Excelのテーブルについて 6 2023/07/07 08:37
- Excel(エクセル) 別シートの表の値を参照したい 2 2022/03/30 15:11
- その他(Microsoft Office) Excel2019と365、2021 2 2023/07/08 06:22
- Visual Basic(VBA) Excel VBA 書式変更で困ってます。 オートフィルターの日付フィルターを用いて データの絞り込 2 2022/07/26 22:16
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) エクセルでセルの日付を和暦表示設定にしたらおかしなことに? 3 2022/05/25 11:47
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
VBA 指定した列にある日時デー...
-
Excelの行数、列数を増やしたい...
-
VLOOKUPの列番号の最大は?
-
LEFT関数とIF関数の組み合わせ...
-
VBAで別ブックの列を検索し、該...
-
エクセルでセル12個間隔で合...
-
VBA 配列について
-
エクセルで複数列の検索をマク...
-
エクセル マクロ 範囲指定で...
-
データシートビューのタイトル...
-
CSVファイルの「0落ち」にVBA
-
列方向、行方向の定義
-
リストからデータを紐付けしたい
-
VBAで結合セルを転記する法を教...
-
マクロ 降順のソートをすると全...
-
横軸を日付・時間とするグラフ化
-
最終行に合計(最終行が列によ...
-
Alt+Shift+↑を一括で行うには、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
LEFT関数とIF関数の組み合わせ...
-
Excelの行数、列数を増やしたい...
-
VBA 指定した列にある日時デー...
-
列方向、行方向の定義
-
エクセルで最初の行や列を開け...
-
VBAで結合セルを転記する法を教...
-
エクセルマクロの組み方
-
エクセルのソートで、数字より...
-
エクセル マクロ 範囲指定で...
-
Excel文字列一括変換
-
データシートビューのタイトル...
-
エクセルマクロPrivate Subを複...
-
Alt+Shift+↑を一括で行うには、...
-
横軸を日付・時間とするグラフ化
-
エクセルで複数列の検索をマク...
-
リストからデータを紐付けしたい
-
Accessのレポートで繰り返し表...
おすすめ情報