- ベストアンサー
VB 記入済み VBA の訂正修正について
- VB超初心者のため、記入済みのVBAコードを修正する方法について教えてください。コードはシートFの100行から500行を非表示にしていますが、修正後の結果が反映されません。VBAの修正方法や半角全角の使用方法などについて具体的に教えていただきたいです。
- VB超初心者です。現在、記入済みのVBAコードでシートFの100行から500行を非表示にしています。しかし、修正した結果が反映されません。VBAの修正方法や半角全角の使用方法について教えていただけませんか?
- VB超初心者です。記入済みのVBAコードでシートFの100行から500行を非表示にしていますが、修正した結果が反映されません。VBAの修正方法や半角全角の使用方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
コードの処理方法が理解出来ていないようですね。 どんなプログラムを組んでも処理方法を理解していないと正しい処理になりません。 非表示にするマクロの範囲で実行されるマクロを何度実行しても、シートの状態が変化することはありません。 シートの状態を元に戻す(非表示範囲を表示する)処理をしてから、非表示に設定しないとシートの状態は変わりません。 Rows("100:500").Hidden = True Rows("200:400").Hidden = True Rows("150:200").Hidden = True と、何度実行しても、非表示エリア(100:500)には変化が無いのです。 非表示範囲を変化させるなら、 Rows("100:500").Hidden = False と、再度表示してから Rows("200:400").Hidden = True を実行する必要があります。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
#1です。 >一旦表示に戻してという意味は、当該命令文1行を全部削除し新たに200-500行を非表示にするという命令文1行を作成するということと解釈すればよろしいのでしょうか。 ーーー >当該命令文1行を全部削除の意味がわかりません。 基本的に実行時にプログラムのコード自身をプログラムで変えて(や削除して)実行するなんてのは(極く高等な場合は別で)やりません。 範囲を表す変数を設けておき、その変数の値を場合に応じて修正して直後に実行することになると思う。 (1)また修正は差分の部分に効果を示すコードを書く (2)一旦全部クリアして元(初期・標準)の状態に戻し(例。全行表示状態)、好みの状態に再度設定(100-500行非表示状態)するようなコードを書く の2つがあると思うが(1)は計算などが発生しややこしくなることが多い気がする。 ーーー 回答が少ないのは、内容が質問すべきような内容でなく、質問文が判りにくいだけなのでは。 ーー 小生の回答のお礼を見ると、私の回答は無視して、もう一度やりたいことを丁寧に質問文として、表現したら。 ・今はどういう状態で ・どういう状態でブックを保存し ・今度このブックをオープンしたときはどうなってほしいのか オープンイベントで実行されるプログラム内容は、プログラムに手を加える機会が無く実行され 、またデータをいじくる機会も無く(保存したままのコードでまたデータ状態で)実行されるのはわかりますね。Date関数などを含む特殊なものを除いて。
お礼
ありがとうございました。僕は仕事柄非パソコン関係の文書は多々作成し先輩からも仲間内からも叱責をた記憶はここ二十数年ないのですが、久方ぶりに修習生時代を思い起こされました。読み返しても必要十分かなとも思えますが専門外のため御不快な思いを掛けましたこと深くお詫びいたします。これからは専門的知識を有する方へもわかる形でとは思いますが素人の為冗長文になりそうなので躊躇しあきらめざるを得ないかなとも思います。処理方法は別途ご回答を頂戴した形で処理させていただきますので御放念くださいますようお願いいたします。 拝
- imogasi
- ベストアンサー率27% (4737/17069)
例えば10-20行の非表示のコードを実行した。 そのまま保存した。 ブックが開かれたとき15-20行の非表示のコードを実行した。 前と変わらないのは当たり前では。後者は前者の範囲内だから。 そういうことではないの。 毎回(ブックオープン時)コードで指定しただけ非表示にしたければ、一旦表示に戻して、非表示を実行しなければなるまい。何時の機械に指定を変えるのか問題だが。 >100という数値だけを200に書き替えて保・・ 何時のタイミングで変えるのか。 質問のようでは、有り得ないような内容だ。次回のことを考えて前回に変えて置くのか。 Sub test01() Worksheets("Sheet1").Rows.Select Selection.EntireRow.Hidden = False Worksheets("Sheet1").Rows("13:15").Hidden = True End Sub 質問にWorksheets("(1)").Activateは関係無いでしょう。人前にだす質問には色々気をつけて。
お礼
ありがとうございました。質問で100-500非表示したシ-トを呼び出して100を200に変更し、マクロ自体を保護しブックも保護し(終了させた後に)当該ブックを再度立ち上げても200に変更した箇所が依然100行目から非表示のままという状況を記載したつもりでしたが、誤解を呼びましたことお詫びいたします。 上記とは別に、100を200に変更(他の部分は一切変更せずそのまま使用して)し、別名称でブックを新規に保存し当該新規ブックを立ち上げても100-500行が非表示になっており、VBAを開くと当該記載値は200と変更されている状態となっています。 頂戴いたしました回答の中に後者(15-20行)は前者(10-20行)の範囲だからという箇所では非対象となる10から14行までの部分は表示されるという形になるのでしょうか? 一旦表示に戻してという意味は、当該命令文1行を全部削除し新たに200-500行を非表示にするという命令文1行を作成するということと解釈すればよろしいのでしょうか。 お手数を掛け申し訳ありませんが再度御教授くだされば幸甚でございます。 拝
お礼
ありがとうございました。質問の記載方法が稚拙の為多々御不快な思いを掛け申し訳ありませんでした。非表示にした範囲=最初の設定で非表示になったままだから当該部分範囲内で修正してもダメ=既記載文を削除しても元に戻らない → シ-ト状態を元に戻す → 既非表示エリアを表示エリアに戻す命令文を記入してから → 修正すべき範囲を記載するという手順が必要のようだと理解できました。 超初心者の作業状況を手に取るように把握されていらっしゃっるので驚いています。 これからも修正する場合には既存処理を戻す命令文を念頭に置いて修正命令文を記入するように励行いたします。 これから早速試してみます。月曜日に余裕を持って会社に持参できそうです。本当にありがとうございました。 拝