いつもお世話になっております。
以前、全て空白のセルの列を非表示にする方法をこちらで教わりました。
この度、それを応用して非表示ではなく列の幅を4に指定したいのですが、方法が分かりません。
以下、前回教わった非表示バージョンのマクロです。
Sub Sample()
Dim ur As Range, tr As Range
Dim rwC As Long, c As Long, flg As Boolean
Set ur = ActiveSheet.UsedRange
Set tr = Intersect(ur, Rows(5).Resize(Rows.Count - 4))
If tr Is Nothing Then Set tr = Rows(5)
rwC = tr.Rows.Count
For c = ur.Column To ur.Column + ur.Columns.Count - 1
flg = WorksheetFunction.CountBlank(Intersect(Columns(c), tr)) = rwC
Columns(c).Hidden = flg And Cells(1, c).Value = ""
Next c
End Sub
列幅を指定するには、
Columns(c).Hidden = flg And Cells(1, c).Value = ""
の
Columns(c).Hidden を
Columns(c). ColumnWidth = 4
とすれば良いのかと思ったのですが、思うように動かないのです。
イコールが多すぎるのが問題なのでしょうか。
マクロを書き換えるにも、そもそも
Columns(c).Hidden = flg And Cells(1, c).Value = ""
の部分の理解が出来ていないため、どこをどうしてよいかわからない状態です。
ご教示のほど、どうぞよろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
No2です。
自分と同じ発想の記述方法だなと思いながら回答していました。
どうりで、ですね(笑)
申し訳ありませんが、一週間も経過すると回答内容はすっかり忘れてしまいますので、前回質問のご提示が無い限りは、知らない内容として回答することになってしまいます。
>試したところ条件①の判定がされず、~~
No2の説明のところでお断りしておきましたように、判断条件を変数flgの内容でしか行っていないためでしょう。
ご提示のコードと同じ条件で処理したいのであれば、条件の記述を同じに代えればよいだけです。
If flg And Cells(1, c).Value = "" Then Columns(c).ColumnWidth = 4
※ 上記の記述の場合、「条件に合致したらセル幅を4にする」処理しか行いません。
それ以外の場合にはセル幅を広く設定するなどの処理も併せて行いたいような場合には、Else以下に記述するようにしてください。
ご回答いただき、ありがとうございます。
ご教示いただいた方法で、無事に動作しました。
次回応用したいことが出てきた際は自分で解決できるよう、教わった内容をしっかり身につけたいと思います。
またお知恵を拝借することがあるかもしれませんが、よろしくお願いいたします。
ありがとうございました。
No.2
- 回答日時:
こんにちは
判断対象とするセル範囲などはご提示の内容で良いものとして・・・
(単純に列全体を判断してはいませんので)
>Columns(c).Hidden = flg And Cells(1, c).Value = ""
>の部分の理解が出来ていないため
列の表示/非表示は通常
Columns(c).Hidden = True (または False)
で指定しまうよね?
ご提示のコードでは、(flg And Cells(1, c).Value = "")の計算結果がTrueかFalseかによって表示/非表示になるという意味になっています。
変数flgにはその1行上で、「対象列範囲のCountBlank関数がその行数と同じか否か」が代入されていますので、結果的に「対象列範囲が全部空白ならTrue」となるということです。
ご説明文の内容だけからだと
Columns(c).Hidden = flg
で良さそうに思われますが、 そうせずにCells(1, c)も併せて判断するようにしているので、項目名(か何かが1行目にあって)が無い場合に非表示といったようにしているのかも知れません。(対象のシート内容がわからないので実際の意味は不明です)
さて、列幅を指定するのは
Columns(c). ColumnWidth = 4
で良いですから、条件が合致した時だけこれが実行されるようにするには、
If flg Then Columns(c). ColumnWidth = 4
のようにすることで、対象列範囲が空白ならセル幅が指定されることになります。
※ 1行目も含めて条件判断をするのかどうかがわからないので、とりあえず、変数flgだけの判断にしてあります。
No.1
- 回答日時:
こんばんは!
お示しのコードは考慮せずこちらで勝手にやってみました。
Sub Sample1()
Dim j As Long, myRng As Range
Dim myStart As Long, myEnd As Long
With ActiveSheet
myStart = .UsedRange.Column
myEnd = .UsedRange.Columns.Count + myStart - 1
If myStart <> myEnd Then
For j = myStart To myEnd
If WorksheetFunction.CountA(.Columns(j)) = 0 Then
If myRng Is Nothing Then
Set myRng = .Cells(1, j)
Else
Set myRng = Union(myRng, .Cells(1, j))
End If
End If
Next j
If Not myRng Is Nothing Then
myRng.EntireColumn.ColumnWidth = 4
End If
End If
End With
End Sub
こんな感じではどうでしょうか?
※ 「空白」というのはデータがない!としています。
すなわち数式が入っていて、「空白に見えているセル」がある場合は
コードが変わってきます。m(_ _)m
早速のご回答ありがとうございました。
できれば今あるコードを活かしたかったので、別の回答者の方をベストアンサーとさせていただきました。
新しくコードを書く際には、ご回答いただいた内容を参考にさせていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
excelのデータで色つき行の抽出...
-
[EXCEL]ボタン押す→時刻が表に...
-
excel 小さすぎて見えないセル...
-
A1に入力された文字列と同じ文...
-
Excel グラフのプロットからデ...
-
エクセル 上下で列幅を変えるには
-
【Excel関数】UNIQUE関数で"0"...
-
エクセル2016で時間を入力して...
-
エクセル マクロで数値が変っ...
-
特定の文字がある行以外を削除...
-
エクセルのセルに指定画像(.jpg...
-
結合しているセルへのオートフィル
-
Excel 時刻の並び替え
-
このような複雑な表をワードで...
-
電話番号の入力方式が違うデー...
-
エクセル 時間の表示形式AM/PM...
-
結合されたセルをプルダウンの...
-
VBA アクティブ行の削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
【Excel関数】UNIQUE関数で"0"...
-
エクセル マクロ オートフィ...
-
[EXCEL]ボタン押す→時刻が表に...
-
AのセルとB行を比較して、一致...
-
特定の文字がある行以外を削除...
-
エクセル 上下で列幅を変えるには
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
excelのデータで色つき行の抽出...
-
結合されたセルをプルダウンの...
-
アクティブになっている行をマ...
-
VBAで色の付いているセルの行削除
-
セルの色によって条件文をつけ...
-
excel 小さすぎて見えないセル...
-
電話番号の入力方式が違うデー...
-
Excelでカタカナ・ひらがな・英...
-
エクセルVBA 最終行を選んで並...
-
EXCELマクロを使い、空白行では...
-
EXCELで最後の行を固定
おすすめ情報
前回ご教示頂いた方から再びご回答頂いているようです!
https://oshiete.goo.ne.jp/qa/10689982.html
何度も教えていただき本当にありがとうございます。
説明が足りず申し訳ありません。
条件は前回と同様に、
1行目に入力がなく、5行目以降に入力がない(最終行は開いたファイルによって変わります)場合、その列の幅を調整する内容です。
If flg Then Columns(c). ColumnWidth = 4
は、
Columns(c).Hidden = flg And Cells(1, c).Value = ""
の代わりに入れるのでしょうか。
試したところ条件①の判定がされず、
1行目に入力があり5行目以降が空白の列の幅が4センチになってしまいました。
理解力が低く本当に申し訳ありません。
ご回答お待ちしております。