Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Home : 指定なし)
第19回マクロ実行時の余計な画面を消すについて。
投稿日時: 22/10/24 12:16:43
投稿者: 佐藤武典

エクセルの表にVBAのボタンを登録し実行しています。マクロは思った通りの作業をしてくれますが、VBAのコードが全画面を占領します。
標記にある Application.ScreenUpdating=False と同 True を追記して試しましたが効果がありません。
 
どこが間違っているのでしょうか。

回答
投稿日時: 22/10/24 12:54:24
投稿者: QooApp

可能ならソースコードを貼っていただけるとわかります。
自分もやらかしたことで自戒になりますが、文言からソースコードを想像するのは難しいのと、不必要な時間と労力が発生します。
 

引用:
VBAのコードが全画面を占領します。

 
これはVBを編集するMicrosoft Visual Basic for Applicationのウィンドウが出現するということですか?
 
また、VBAのボタンを登録とありますが、開発タブの挿入→ボタン(フォームコントロール)のことでよろしいですか。
またはActiveXコントロールまたはその他でしょうか。

回答
投稿日時: 22/10/24 13:00:30
投稿者: QooApp

すみません。もしかしてなんですけど、モーグ公式コラムの以下のことを指示しておりますか?
https://www.moug.net/vba/beginners/exvba019-1.html
 
お手数ですがおそらくここの質問者・回答者の中でモーグ運営に直接かかわるような人はいても1人2人ではないでしょうか。
 
少なくとも私は一般人なのでたまたま発見したにすぎませんので可能であれば何ページ目のどの部分でしょうか。
詳しく教えてください。

回答
投稿日時: 22/10/24 13:06:14
投稿者: QooApp

なんどもすみません。
話をまとめるとこのような認識であってますでしょうか。
 
前述リンクのモーグ公式コラム内、
4ページ目の「ボタンが作成できたら、正しくマクロが実行されるか確認しましょう。」でテスト実行した時、
 
3ページ目「マクロを編集する」のScreenUpdating = Falseを設定しても
Microsoft Visual Basic for Applicationのウィンドウが画面を占有する。
 
ということでしょうか。

回答
投稿日時: 22/10/24 13:27:50
投稿者: Suzu

ボタンを押した際、コード自体は希望通りの動作をし、終了しているのでしょうか?
 
コードの実行が 途中で止まっていませんか?
その場合、考えられるのは、以下の4つでしょうか。
 
A)STOPステートメント 記載しており、そこでコード実行が止まっている。
  → STOPステートメントをコメントアウトするなり、消す
 
B)ブレイクポイントを設定しており、そこでコード実行が止まっている。
  → ブレイクポイントの設定を解除する
 
https://www.moug.net/tech/exvba/0150019.html
https://kabu-macro.com/detail.php?dir=word&dir2=ha-ho&uri=breakpoint#:~:text=%E3%83%96%E3%83%AC%E3%83%BC%E3%82%AF%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%81%A8%E3%81%AF%E3%80%81%E3%83%97%E3%83%AD%E3%82%B7%E3%83%BC%E3%82%B8%E3%83%A3,%E8%A7%A3%E9%99%A4%20%5D%E3%82%92%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99%E3%80%82
あたりを参考にどうぞ。
 
C) 以前、ブレイクポイントを設定しており、そこでコード実行が止まっている。
  → B) でブレイクポイントの設定を解除しても 実行時に以前ブレイクポイントを設定した位置で
     コード実行が止まる事があります。
     この場合は、コードのとこでも良いので、改行等を入れ、その改行を「DEL」や「BackSpace」で
     削除後、「デバック」-「VBA Project のコンパイル」を実行し、上書き保存します。
 
D) エラーが発生し、「コードの実行が中断されました。」の表示がされ『デバッグ』を押した。
  エラーが発生する原因を取り除きましょう。

回答
投稿日時: 22/10/24 22:31:48
投稿者: WinArrow
投稿者のウェブサイトに移動

私も、QooAppさん、レスの
https://www.moug.net/vba/beginners/exvba019-1.html
ではないかと、考え
ダウンロードして、マクロを実行してみました。
実行はシートに設定した「ボタン」クリックです。
 
質問者さんのおしゃっているような現象は、再現できませんでした。
 
もし、マクロを自分で作成していると仮定し、
コードの問題ならば、比較すると違いが分かるかもしれません。
また、起動方法がちがっていることも考えられます。
(ボタンクリックではなくて、VBEの「実行」だったり)

投稿日時: 22/10/25 22:23:21
投稿者: 佐藤武典

私はこのファイル“辞書.xlsm”をNetで調べた単語の記録に使っています。
 
済みません、PrtScで取ったファイルを添付できません。
単なるエクセルのファイルです。マクロを実行済の状態の画面と、マクロ実行前のコピ・ペの画面です。
 
この画面の最後の2行は、ネットの辞書をコピ・ペしたものです。
これを見やすくするためのマクロを上部ボタン「成形」に登録しています。
このマクロは、エクセルを動作させるときマクロを記録したものがベース(と言うよりほぼ記録そのもの)です。
画面の上の部分は成形ボタンを実行した結果です。
 
このボタンに記録してあるコードは以下の通りです。
(Application.ScreenUpdating = Falseは相談後追加しました。)
 
 
Sub ボタン3に登録() '2022年5月11日最終行+1で保存
'
' Module1() 辞書.xlsm
' ボタン3に登録済:保存設定済み。
' 2022-Oct-24 ボタン実行時のVBAプロhグラム表示の禁止プログラム追加
     
    Application.ScreenUpdating = False
 
    Dim nlast As Long
        nlast = Cells(Rows.Count, 1).End(xlUp).Row
    With Selection.Font
        .Name = "MS Pゴシック"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
        .Bold = True
' .Bold = False
        .ColorIndex = xlAutomatic 'フォント色決定
        .TintAndShade = 0
    End With
         
' 行の高さ自動調整 2022/7/14 追加
    With Selection
      Selection.Rows.AutoFit
      Application.Goto Reference:="行高さ自動調整"
    End With
 
' セルを折り返しに設定する  2021/5/20
       With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlCenter
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
     
' 選択した行を指定したいが・・・・
' Range("C401").Select
' 2022/7/14 上記挿入したので次の行を停止
' Application.Goto Reference:="行高さ自動調整"
     
' Selection.Font.Bold = True
' Cells(nlast, 1).Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlHairline
    End With
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlHairline
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlHairline
    End With
     
     
    '2022/9/22 罫線修正を追加
     
     With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlHairline
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlHairline
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlHairline
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlHairline
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlHairline
    End With
     
    '2022/9/22 追加分終わり
     
     
              
' Selection.Font.Bold = True
 
' ”保存”2021年11月26日追加
     
    Cells(nlast + 1, 1).Select
    ActiveWorkbook.Save
     
    Application.ScreenUpdating = True
     
End Sub
 
 
以下頂いたコメントへの回答です。
 
問:「すみません。もしかしてなんですけど、モーグ公式コラムの以下のことを指示しておりますか?」
答:はい、見ておりそのまま追記しました。
 
問:「話をまとめるとこのような認識であってますでしょうか。」
答:内容は詳しくは見ておりません。”Application.ScreenUpdating = False/True”を追加しただけで実行しました。結果、おっしゃる通りウィンドウ画面が占領されました。
 
問:「ボタンを押した際、コード自体は希望通りの動作をし、終了しているのでしょうか?」
答:はい、希望通りの動作をしました。A)-D)迄の現象はありません。
 
 
質問させて頂いた時説明しなかった環境が1件有ります。
それは、関係のない全く別の.xlsm ファイルを扱っていました。
この時は、画面をVBAコードに占領されることはありませんでした。
そのファイルがメモリーの中でどのようなポジションであったかは、浅学の為全く説明できません。
 
長くなりましたが、宜しくお願い致します。
 
2022年10月25日    佐藤武典

回答
投稿日時: 22/10/25 22:50:51
投稿者: simple

確認します。
(Q1)
>' 2022-Oct-24 ボタン実行時のVBAプロhグラム表示の禁止プログラム追加
これはどういう内容のことでしょうか?
説明をお願いします。
 
(Q2)
Application.Goto Reference:="行高さ自動調整"
この「行高さ自動調整」は何ですか?
もしプロシージャ名なら、VBE画面が表示され、そのプロシージャのところに飛びますよ。

投稿日時: 22/10/25 23:30:20
投稿者: 佐藤武典

ご連絡有難うございます。以下回答致します。
 
(Q1)
>' 2022-Oct-24 ボタン実行時のVBAプロhグラム表示の禁止プログラム追加
これはどういう内容のことでしょうか?
説明をお願いします。
 
A1: モーグ公式コラム第19回にあった「 Application.ScreenUpdating = False/True」を追加した事です。
 
(Q2)
Application.Goto Reference:="行高さ自動調整"
この「行高さ自動調整」は何ですか?
もしプロシージャ名なら、VBE画面が表示され、そのプロシージャのところに飛びますよ。
 
A2:マクロ実行時の記録其の侭で、どういう動作をするのか判りませんが、
 「ホーム」→「セル」→「書式」→「行の高さの自動調整(A)」の操作が記録された内容其の侭です。
 

回答
投稿日時: 22/10/26 09:27:42
投稿者: WinArrow
投稿者のウェブサイトに移動

佐藤武典 さんの引用:

ご連絡有難うございます。以下回答致します。
 
(Q1)
>' 2022-Oct-24 ボタン実行時のVBAプロhグラム表示の禁止プログラム追加
これはどういう内容のことでしょうか?
説明をお願いします。
 
A1: モーグ公式コラム第19回にあった「 Application.ScreenUpdating = False/True」を追加した事です。
 
(Q2)
Application.Goto Reference:="行高さ自動調整"
この「行高さ自動調整」は何ですか?
もしプロシージャ名なら、VBE画面が表示され、そのプロシージャのところに飛びますよ。
 
A2:マクロ実行時の記録其の侭で、どういう動作をするのか判りませんが、
 「ホーム」→「セル」→「書式」→「行の高さの自動調整(A)」の操作が記録された内容其の侭です。
 

回答に対すしてコメントします。
 
A1の「Application.ScreenUpdating = False/True」は、
VBA実行中(VBAでセル代入じにシート画面がチラつくことがる)に
シートのチラツキを制御する命令で、VBE画面表示を制御するものではありません。
 
A2の「Application.Goto 」は、引数で指定したセルにk−ソルを移動する命令です。
 
> 「ホーム」→「セル」→「書式」→「行の高さの自動調整(A)」の操作が記録された内容其の侭です。
この操作をマクロの記録でコードを作成しても、「Application.Goto」は記録されません。
 
なにか勘違いしていませんか?

回答
投稿日時: 22/10/26 09:39:53
投稿者: WinArrow
投稿者のウェブサイトに移動

そもそもですが、
>https://www.moug.net/vba/beginners/exvba019-1.html
のページに異才されているファイルは「会員情報_完成版.xls」です。
でも、あなたが記述したコードの説明は「辞書.xlsm」です。
 
どのような関係なんでしょうか?
 
違うものを見ていたのでは、質問と回答がかみ合いません。
 
そして、
>答:はい、希望通りの動作をしました。A)-D)迄の現象はありません。
と、いう解決とも受け取れる回答があります。
 
 

回答
投稿日時: 22/10/26 10:13:05
投稿者: WinArrow
投稿者のウェブサイトに移動

もう一つの
そもそも
 
質問タイトルにある「モーグ公式コラム」のページは、
>VBAのコードが全画面を占領します。
を解消するための方策を探して、辿り着いたURLではないかと思います。
そのページにあった
>Application.ScreenUpdating=False と同 True
で、その現象が解決するのではないかと考えたものと思われます。
 
質問者さんが取り組んでしいる、マクロと、「「モーグ公式コラム」のマウロとは無関係と判断します。
ところで
>Application.ScreenUpdating=False
は、前レスにも書きましたが、ワークシートのチラツキを抑止するもので、
VBE画面を非表示にする機能はありません。
 
先頭の
>Applicationオブジェクト
は、端的にいえば、ワークシートや、ワークブックの親であるExcelそのものを指します。
VBEは、Excelとは別物で、Applicationには、含まれません。
 
コードの意味をキチンと理解しないまま使用すると、
勘違いの質問につながります。
 
質問する際は、現象だけではなく、その現象が発生した経緯などを、
簡単明瞭に書いてほしいですね。
回答者が再現できる情報を掲示した方が、早い解決に繋がると思います。
 
 
 

回答
投稿日時: 22/10/26 10:20:19
投稿者: simple

回答ありがとうございました。
既に指摘いただいていますが、
行高を自動調整する動作をマクロ記録すると、
AutoFitメソッドを使ったコードが記録されるはずです。
 
"行高さ自動調整"というプロシージャがどこかにありませんか?
そこにジャンプしているだけだと思いますけどねえ。
その結果VBEが表示されることになっているというだけではないですか?

回答
投稿日時: 22/10/26 11:03:02
投稿者: WinArrow
投稿者のウェブサイトに移動

simpleさんへ
 
>"行高さ自動調整"というプロシージャがどこかにありませんか?
 
"行高さ自動調整"というプロシージャを作成し、テストしましたが、
そのプロシジャは、実行されません。
 
セルに、"行高さ自動調整"という名前を設定して、
下記を実行してみました。
 
Sub test()
Application.Goto Reference:="行高さ自動調整"
MsgBox ActiveCell.Address
End Sub
 
 
従って、プロシジャは、無理です。
ところで、マクロの記録で
>Application.Goto Reference:="行高さ自動調整"
が記録される操作が分かりません。
ご存知ですか?
 
 

回答
投稿日時: 22/10/26 11:29:09
投稿者: simple

コメントありがとうございます。
ええ、私は
Application.Goto Reference:="行高さ自動調整"
が、行の高さを調整する機能を果たしているとは一言も申し上げていません、
そのプロシージャのある行に飛びますとだけ申し上げています。

引用:
' 行の高さ自動調整 2022/7/14 追加
    With Selection
      Selection.Rows.AutoFit
      Application.Goto Reference:="行高さ自動調整"
    End With
とあるように、
Selection.Rows.AutoFitで機能は果たされているんです。
しかし、
カーソルは、
Application.Goto Reference:="行高さ自動調整"
によってそこに飛び、
しかも実行は、
Application.Goto Reference:="行高さ自動調整"
の次の行から継続されるので、
実行結果にはなんら支障は起きないのです。
ただ、カーソルだけがVBEの行高さ自動調整に飛ぶことになるのです。

投稿日時: 22/10/26 13:21:50
投稿者: 佐藤武典

WinArrow様 以下回答致します。
 
問 そもそもですが、
>https://www.moug.net/vba/beginners/exvba019-1.html
のページに異才されているファイルは「会員情報_完成版.xls」です。
でも、あなたが記述したコードの説明は「辞書.xlsm」です。
  
どのような関係なんでしょうか?
 
回答 会員情報_完成版.xlsに記載されていたコマンドが「辞書.xlsm」での問題の解決に役立つコマンドだと思って使用しました。
 
 
問    A1の「Application.ScreenUpdating = False/True」は、
VBA実行中(VBAでセル代入じにシート画面がチラつくことがる)に
シートのチラツキを制御する命令で、VBE画面表示を制御するものではありません。
 
回答 このコマンドでは解決できない事を了解致しました。
 
問 A2の「Application.Goto 」は、引数で指定したセルにk−ソルを移動する命令です。
> 「ホーム」→「セル」→「書式」→「行の高さの自動調整(A)」の操作が記録された内容其の侭です。
この操作をマクロの記録でコードを作成しても、「Application.Goto」は記録されません。
 
回答 VBEの書き方等全く分かりませんので、一つ一つの動作をマクロとして記録したものを夫々のマクロ名として記録された物の Sub Endsub を除いたものを繋ぎ合わせて作っています。その中に記録されたコマンドがどういう動作をするのか殆ど理解しておりません。「Application.Goto」も私が書き加えたものでは無く、記録された文字がそのまま残っていると言うだけで、どういう働きをするのかも全く分かっておりません。
 
 
Simple様 以下回答致します。
    問 AutoFitメソッドを使ったコードが記録されるはずです。
  
"行高さ自動調整"というプロシージャがどこかにありませんか?
 
    回答 申し訳ありませんが「AutoFitメソッドを使ったコード」と言う言葉を今初めて知りました。
"行高さ自動調整"と言うプロシジャーはありました。
 
辞書ファイルに記録するデータは、辞書.xlsmと言うファイルを作って置き、調べたい単語が出る度にネットの辞書を検索し、コピペで辞書に「調べるべき言葉の欄」と「ネットで調べた結果の欄」に記録しています。其のままだと非常に見辛くなりますので、これを解消するプログラムを作ろうとしているわけです。
 
この見辛さを解消するExcelコマンドを一つづつマクロの記録に取りながら、最後に夫々のマクロのSub/Endsubを除きながら一つにまとめて作りました。個々のマクロを記録する時の名前を判りやすくするため、例えば"行高さ自動調整"の様に名前を変えて記録しています。このため"行高さ自動調整"と言うプロシジャーが残っていました。
 
この名を Sub行高調整()に変えて試しました。
しかしものモジュール内にもApplication.Goto Reference:="行高さ自動調整"の記載が有るためか、結果は同じです。
「AutoFitメソッド」とは、Excelを表そのもので操作する時のコマンドの事ですか。
ホームから辿って行って、行の高さ調整の所に同じ文字列の選択肢が有りました。
これが原因なら「行高さ自動調整」と言う言葉を他の言葉に言い換えなければならないと思いますが、
どの時点でVBAのコードが顔を出すのかF9で試してみました。するとプログラムの1行目はDimである為F9は使えず2行目に設定したところ、そこでプログラムの画面が出てしまいました。
 
このままで我慢できない事はありませんが、何か他の方法はないでしょうか。
宜しくお願い致します。

回答
投稿日時: 22/10/26 14:25:00
投稿者: Suzu

佐藤武典 さんの引用:
個々のマクロを記録する時の名前を判りやすくするため、例えば"行高さ自動調整"の様に名前を変えて記録しています。このため"行高さ自動調整"と言うプロシジャーが残っていました。
 
この名を Sub行高調整()に変えて試しました。
しかしものモジュール内にもApplication.Goto Reference:="行高さ自動調整"の記載が有るためか、結果は同じです。
「AutoFitメソッド」とは、Excelを表そのもので操作する時のコマンドの事ですか。
ホームから辿って行って、行の高さ調整の所に同じ文字列の選択肢が有りました。
これが原因なら「行高さ自動調整」と言う言葉を他の言葉に言い換えなければならないと思いますが、
どの時点でVBAのコードが顔を出すのかF9で試してみました。するとプログラムの1行目はDimである為F9は使えず2行目に設定したところ、そこでプログラムの画面が出てしまいました。
 
このままで我慢できない事はありませんが、何か他の方法はないでしょうか。
宜しくお願い致します。

 
 
simpleさんが 何度もおっしゃってくださっているのは、
 
Application.Goto Reference:="行高さ自動調整"
 
上記の命令の動作として、
 
『行高さ自動調整』と、名のついているオブジェクト
今回であれば、プロシージャ「行高さ自動調整」 の プロシージャ が含まれるモジュールを表示させなさい
という命令なのです。
 
そのプロシージャを実行するのではなく、単に表示だけ。
VBEが開いていなければ、VBEを開き、「行高さ自動調整」を表示させます。
表示させたら、次の
 
  End With

' セルを折り返しに設定する  2021/5/20
  With Selection
    .HorizontalAlignment = xlGeneral

に進むのです。
 
ですから、プロシージャの動作には影響を与えません。
 ※「行高さ自動調整」と言う名のプロシージャや、名前定義されたセルが 無ければ
   そんな名前のものが見つからないとエラーになります。
 
VBE画面を表示されているのが、その命令ですから
 
Application.Goto Reference:="行高さ自動調整"
 
を消すなり、コメントアウトすれば、VBE画面がアクティブになる事はありません。

回答
投稿日時: 22/10/26 14:40:15
投稿者: sk

引用:
マクロ実行時の記録其の侭で、どういう動作をするのか判りませんが、
「ホーム」→「セル」→「書式」→「行の高さの自動調整(A)」の操作が
記録された内容其の侭です。

引用:
' 行の高さ自動調整 2022/7/14 追加
    With Selection
      Selection.Rows.AutoFit
      Application.Goto Reference:="行高さ自動調整"
    End With

(再現手順 1 )
----------------------------------------------------
 
1. 任意のセル範囲に対して "行高さ自動調整" という名前を
   あらかじめ定義しておく。
 
2. マクロの記録を開始する。
 
3. [ホーム]タブ -> [セル]グループ -> [書式] ->
   [行の高さの自動調整(A)]をクリックする。
 
4. 名前ボックス、もしくは[ジャンプ]機能を使用して
   名前付き範囲[行高さ自動調整]にジャンプする
 
5. マクロの記録を終了する。
 
----------------------------------------------------
 
(再現手順 2 )
----------------------------------------------------
 
1. 標準モジュールに "行高さ自動調整" という名前の
   Sub プロシージャをあらかじめ作成しておく。
 
2. マクロの記録を開始する。
 
3. [ホーム]タブ -> [セル]グループ -> [書式] ->
   [行の高さの自動調整(A)]をクリックする。
 
4. [開発]タブ -> [コード]グループ -> [マクロ]を開き、
   マクロリストから[行高さ自動調整]を選択して
   [編集]ボタンをクリックし、Visual Basic Editor を開く
 
5. Excel のアプリケーションウィンドウを
   アクティブにして、マクロの記録を終了する。
 
----------------------------------------------------
 
もし本当にマクロの記録によって Application.Goto メソッドが追記されたなら、
記録中に上記のいずれかと同様の操作が行なわれたこと以外の原因は考えられません。
 
引用:
エクセルの表にVBAのボタンを登録し実行しています。
マクロは思った通りの作業をしてくれますが、
VBAのコードが全画面を占領します。

ワークシート上のボタンをクリックしてマクロを実行されたことによって
VBE がアクティブになるならば、"行高さ自動調整" という名前を
付けられたセル範囲は存在しないが、"行高さ自動調整" という
名前を付けられたマクロは存在する、ということになるはず。
(両方とも存在する状況なら、前者へのジャンプが優先されるからです)
 
引用:
' 選択した行を指定したいが・・・・
' Range("C401").Select
' 2022/7/14 上記挿入したので次の行を停止
' Application.Goto Reference:="行高さ自動調整"

何故にそのような操作が行なわれたかについては
上記のコメントアウトされた箇所から何となく推測できますが、
いずれにしても「余計な Application.Goto メソッドを書くな」
という結論にしかならないでしょう。

回答
投稿日時: 22/10/26 15:41:49
投稿者: WinArrow
投稿者のウェブサイトに移動

skさん、丁寧なコメントありがとうございました。
Application.Goto メソッドがマクロ記録されたことが理解できました。
 
Application.Goto でセルに設定した名前が指定できることも初めて知りました。
 
また、
Application.Goto プロシジャ名
も初めて知りましたが、動きもしないプロシジャを指定する意図がよくわかりません。

回答
投稿日時: 22/10/26 16:00:45
投稿者: Suzu

質問の内容とは関係ありませんが、
コードを拝見する限り、セルの 書式設定 と 罫線 の設定 と思われます。
 
 
スタイルに希望の設定を登録してしまえば、
 
・スタイルの適用
・行の高さ設定
・A列の最終セルの下のセル選択
 
のステップで済みますよ。
VBAで悩むのであれば、上記手順なら手動でも良さそうですね。

回答
投稿日時: 22/10/26 16:54:34
投稿者: WinArrow
投稿者のウェブサイトに移動

アドバイス
  
コードを見ると
表示形式や罫線をセル毎に設定しているような感じを受けます。
違っていたらごめんなさい。
 
個々のセルを対象に処理しているならば・・・という前提で
セルの書式は、セル範囲(例えば、列単位とか)で一括設定したほうが、
ファイル容量が小さくなる、ブックを開く/閉じるの処理時間が短縮されるにつながります。
手操作/VBAでも同じです。
但し、データ件数、数式の量に依存するので、目視で感じられないかも?・・

回答
投稿日時: 22/10/26 17:31:08
投稿者: sk

WinArrow さんの引用:
Application.Goto プロシジャ名
も初めて知りましたが、動きもしないプロシジャを指定する意図がよくわかりません。

それは恐らく、そもそも佐藤武典さんが意図したものとは
異なる操作が行なわれた結果だからではないかと推測します。
 
引用:
' 行の高さ自動調整 2022/7/14 追加
    With Selection
      Selection.Rows.AutoFit
      Application.Goto Reference:="行高さ自動調整"
    End With

引用:
' 選択した行を指定したいが・・・・
' Range("C401").Select
' 2022/7/14 上記挿入したので次の行を停止
' Application.Goto Reference:="行高さ自動調整"

・コメントの文脈を読み解いた限り、前者のコードが追加される前に
 [マクロの記録]機能によって生成されていたのが、コメントアウト
 された後者のコード(以下『修正前コード』と呼ぶ)と考えられる。
 
佐藤武典 さんの引用:
この見辛さを解消するExcelコマンドを一つづつマクロの記録に取りながら、
最後に夫々のマクロのSub/Endsubを除きながら一つにまとめて作りました
個々のマクロを記録する時の名前を判りやすくするため、
例えば"行高さ自動調整"の様に名前を変えて記録しています。
このため"行高さ自動調整"と言うプロシジャーが残っていました。

・『修正前コード』が[マクロの記録]機能によって生成されたものである
 とするならば、[行高さ自動調整]プロシージャはそのコードが生成される
 よりも前から、同じく[マクロの記録]機能によって作成されていたことになる。
 
佐藤武典 さんの引用:
マクロ実行時の記録其の侭で、どういう動作をするのか判りませんが、
「ホーム」→「セル」→「書式」→「行の高さの自動調整(A)」の操作が
記録された内容其の侭です。

・マクロの記録中の操作内容やプロシージャの命名意図から判断した限り、
 [行高さ自動調整]プロシージャには Selection.Rows.AutoFit メソッドが
 記述されている蓋然性が高い。
 
・以上のことから、『修正前コード』の記録時に行なおうとしていたのは
 「 C401 セルを選択し、[行高さ自動調整]プロシージャを実行して
 その行の高さを自動調整する」という操作であったと考えられる。
 
sk さんの引用:
4. [開発]タブ -> [コード]グループ -> [マクロ]を開き、
   マクロリストから[行高さ自動調整]を選択して
   [編集]ボタンをクリックし、Visual Basic Editor を開く。

・ところが、上記の手順において[実行]ボタンをクリックするべきところを
 誤って[編集]ボタンがクリックしたことにより、Application.Run メソッドではなく
 Application.Goto メソッドが記録されることとなった。
 
・更に佐藤武典さんご自身にもその自覚がなく、また記録された
 コードの意味も理解できていないため、そのまま流用される形となった。
 
----------------------------------------------------------------------
 
ある程度納得のいきそうな筋書きをこじつけるとしたら
以上のような感じでしょうか。

回答
投稿日時: 22/10/26 19:59:15
投稿者: WinArrow
投稿者のウェブサイトに移動

skさん、さすがです。
  
私も、少しづつマクロ記録で作成したコードを
上のEnd SUb と 下のSubを削除して、プロシジャをくっつけることをしています。
自分でコード記述が面倒なこともあり、應訳しています。
そして、コードの不要部分を削除したり、記述を変更したりすることで、
コードの意味や使い方を理解するようにしています。
そのままでは、コード修正ミスがありうるので、テスト(デバッグ)します。
パラメータを変更すると、思わぬことに出くわすこともあります。
  
  
しかし、
Application.Goto プロシジャ名
には、遭遇したことはありません。
通常のGoto line名もあまり使わないようにしていますが、
このコードは、どの様な場面で使用すると考えたらよいのでしょうか?
  
  

回答
投稿日時: 22/10/26 20:10:16
投稿者: simple

そうそう使うものではないでしょうね、ご指摘のとおりでしょう。
(私は、質問掲示板で「VBE画面に飛びたいのですが」と尋ねられた時に
  これを巡る議論をした覚えがあります。)
 
用途をあえて言えば、
大きなコードを作成・検証する際に、
特定のところにダイレクトにジャンプすることが何度もある場合、
ボタン一つで、なんていう利用の仕方はあるかもしれません。
 
また、これは開発に関する経緯からきているのかもしれません。
というのは、
・ワークシートの名前定義されたセル(範囲)も、
・コードのプロシージャ名も、
比較的類似の管理方法になっており、
開発者が前者にジャンプ命令を書くなら後者にも、といった感覚で挿入したものが
残ってしまっているのかもしれません。
(よくあるじゃないですか、エンジニアの追求心がそのまま残ってしまうなどという話)
 
よく使うかどうかは別として、ヘルプにも掲載されていていることなので、致し方ないでしょう。
 
# これは実行の制御を変えるものではありません、と書きたかったのですが、
# 「制御」という言葉がでてきませんでした。愕然。

回答
投稿日時: 22/10/26 23:22:51
投稿者: WinArrow
投稿者のウェブサイトに移動

simpleさんへ
 
解説ありがとうございます。
 
なるほど・・・・・納得
 
とはいっても使うかな?
今のところ未知数。

回答
投稿日時: 22/10/27 08:18:17
投稿者: simple

結局のところ、回答を一言でいうなら、
Application.Goto Reference:="行高さ自動調整"
は不要ですから消してください
、ということです。
 
少し補足説明させてください。

引用:
「AutoFitメソッド」とは、Excelを表そのもので操作する時のコマンドの事ですか。
ホームから辿って行って、行の高さ調整の所に同じ文字列の選択肢が有りました。
これが原因なら「行高さ自動調整」と言う言葉を他の言葉に言い換えなければならないと思いますが、(後略)
とのことでした。
 
●「AutoFitメソッド」という言葉が珍しいようですが、補足説明します。
  あなたの提示されたコードの中に、
    Selection.Rows.AutoFit
という記述がありますね。
  ・Selection.Rowsは選択中のセルの行たちを表すRangeオブジェクト(セル範囲のこと)です。
  ・それに .AutoFitと続けることで、
    そのRangeオブジェクトが持っているAutoFitというメソッドを実行せよ
    というコードになっているわけです。
  ・RangeオブジェクトのAutoFitメソッドのヘルプを読むと、
      「範囲内の列の幅または範囲内の行の高さを変更して、最適な幅または高さにします。」
      「Range オブジェクト は、行または行の範囲、または列または列の範囲である
        必要があります。」
    と説明されています。
  ・この一行で、行高の調整がなされています。
 
●マクロ記録はコード作成の材料に過ぎません。
  これをブラックボックスとしてそのまま受け入れるのではなく、内容を理解するように
  してください。
  Application.Goto Reference:="行高さ自動調整"
  とは何か、と不思議に思わなかったですか?
  (慣れないと難しかったかもしれないし、欲を言えばということかもしれないけど)
   
  また、マクロ記録をそのまま使うことはめったにありません。
  大抵は冗長な記述を修正したりして使うことが多いです。よく吟味して使ってください。
 
  参考になれば。

投稿日時: 22/10/30 18:17:27
投稿者: 佐藤武典

QooApp様、Suzu様、Win Arrow様、Simple様、sk様 色々アドバイスを頂き大変有難うございました。
Application.Goto Reference:="行高さ自動調整"の意味はおっしゃる通りこれが行高さを自動調整するコマンドとばかり思っていました。
この一行を削除すると、行高さの調整はどこでするのかと疑問に思っていましたが、無我夢中で記録していたマクロの中にSelection.Rows.AutoFitと言うコマンドが入っていたのですね。
お蔭様ですっきり解決致しました。
範囲指定は早速行指定に致します。
 
Simple様の最後のアドバイス肝に銘じておきます。何分全く未知の文化の背景も知らない外国の言葉を習っている様なもので、これからもお世話になると思いますが宜しくお願い致します。