VB 記入済み VBA の訂正修正について

このQ&Aのポイント
  • VB超初心者のため、記入済みのVBAコードを修正する方法について教えてください。コードはシートFの100行から500行を非表示にしていますが、修正後の結果が反映されません。VBAの修正方法や半角全角の使用方法などについて具体的に教えていただきたいです。
  • VB超初心者です。現在、記入済みのVBAコードでシートFの100行から500行を非表示にしています。しかし、修正した結果が反映されません。VBAの修正方法や半角全角の使用方法について教えていただけませんか?
  • VB超初心者です。記入済みのVBAコードでシートFの100行から500行を非表示にしていますが、修正した結果が反映されません。VBAの修正方法や半角全角の使用方法について教えてください。
回答を見る
  • ベストアンサー

記入済VBAの訂正修正について教えてください。

記入済VBAの訂正修正について教えてください。 お世話になります。 VBA超初心者です。現在下記の命令文(記入文自体にインデントは設けておらず下記記載と同一となっています)で シ-ト F の100行から500行を非表示とさせています。(他にも会社資料のためパスワ-ド記入と印刷不可のコマンドを記入してあります-これらの部分でのエラ-は生じておりません。) Private Sub Workbook_Open() Worksheets("(1)").Activate Worksheets("F").Rows("100:500").Hidden = True Worksheets("K").Columns("D:E").Hidden = True End Sub この100という数値だけを200に書き替えて保存 「マクロ自体の保存+ブック全体(2007で作成です)の保存」 した後に再度ブックを立ち上げても シ-トFでの非表示部分は依然書き替え前の100行から500行となり、意図した200行からになっておりません。 VBAの修正は通常の関数修正と異なり関連する式全体を削除して再度記入するというのが原則なのでしょうか? 命令文自体はワ-ドに転写しておりますので当該ワ-ド文書上で修正し、既存記入分全部を削除した後に、転写すれば宜しいかもしれないのですが、VBA命令文の修正訂正の原則的処理方法(半角全角使用方法も含めて)を教えていただければ今後の作業を安心して実行できますので、御教授いただければ幸甚でございます。 拝

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.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 を実行する必要があります。

samchan
質問者

お礼

ありがとうございました。質問の記載方法が稚拙の為多々御不快な思いを掛け申し訳ありませんでした。非表示にした範囲=最初の設定で非表示になったままだから当該部分範囲内で修正してもダメ=既記載文を削除しても元に戻らない → シ-ト状態を元に戻す → 既非表示エリアを表示エリアに戻す命令文を記入してから → 修正すべき範囲を記載するという手順が必要のようだと理解できました。 超初心者の作業状況を手に取るように把握されていらっしゃっるので驚いています。 これからも修正する場合には既存処理を戻す命令文を念頭に置いて修正命令文を記入するように励行いたします。 これから早速試してみます。月曜日に余裕を持って会社に持参できそうです。本当にありがとうございました。 拝

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

#1です。 >一旦表示に戻してという意味は、当該命令文1行を全部削除し新たに200-500行を非表示にするという命令文1行を作成するということと解釈すればよろしいのでしょうか。 ーーー >当該命令文1行を全部削除の意味がわかりません。 基本的に実行時にプログラムのコード自身をプログラムで変えて(や削除して)実行するなんてのは(極く高等な場合は別で)やりません。 範囲を表す変数を設けておき、その変数の値を場合に応じて修正して直後に実行することになると思う。 (1)また修正は差分の部分に効果を示すコードを書く (2)一旦全部クリアして元(初期・標準)の状態に戻し(例。全行表示状態)、好みの状態に再度設定(100-500行非表示状態)するようなコードを書く の2つがあると思うが(1)は計算などが発生しややこしくなることが多い気がする。 ーーー 回答が少ないのは、内容が質問すべきような内容でなく、質問文が判りにくいだけなのでは。 ーー 小生の回答のお礼を見ると、私の回答は無視して、もう一度やりたいことを丁寧に質問文として、表現したら。 ・今はどういう状態で ・どういう状態でブックを保存し ・今度このブックをオープンしたときはどうなってほしいのか オープンイベントで実行されるプログラム内容は、プログラムに手を加える機会が無く実行され 、またデータをいじくる機会も無く(保存したままのコードでまたデータ状態で)実行されるのはわかりますね。Date関数などを含む特殊なものを除いて。

samchan
質問者

お礼

ありがとうございました。僕は仕事柄非パソコン関係の文書は多々作成し先輩からも仲間内からも叱責をた記憶はここ二十数年ないのですが、久方ぶりに修習生時代を思い起こされました。読み返しても必要十分かなとも思えますが専門外のため御不快な思いを掛けましたこと深くお詫びいたします。これからは専門的知識を有する方へもわかる形でとは思いますが素人の為冗長文になりそうなので躊躇しあきらめざるを得ないかなとも思います。処理方法は別途ご回答を頂戴した形で処理させていただきますので御放念くださいますようお願いいたします。 拝

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

例えば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は関係無いでしょう。人前にだす質問には色々気をつけて。

samchan
質問者

お礼

ありがとうございました。質問で100-500非表示したシ-トを呼び出して100を200に変更し、マクロ自体を保護しブックも保護し(終了させた後に)当該ブックを再度立ち上げても200に変更した箇所が依然100行目から非表示のままという状況を記載したつもりでしたが、誤解を呼びましたことお詫びいたします。 上記とは別に、100を200に変更(他の部分は一切変更せずそのまま使用して)し、別名称でブックを新規に保存し当該新規ブックを立ち上げても100-500行が非表示になっており、VBAを開くと当該記載値は200と変更されている状態となっています。 頂戴いたしました回答の中に後者(15-20行)は前者(10-20行)の範囲だからという箇所では非対象となる10から14行までの部分は表示されるという形になるのでしょうか? 一旦表示に戻してという意味は、当該命令文1行を全部削除し新たに200-500行を非表示にするという命令文1行を作成するということと解釈すればよろしいのでしょうか。 お手数を掛け申し訳ありませんが再度御教授くだされば幸甚でございます。 拝

関連するQ&A

  • エクセルVBAのエラーについて

    以前のPC(Windows2000、Office2000)で作成したエクセルファイルのVBAを新しいPC(WindowsXP、Office2003)で修正し保存したところ古いPCでVBAのコンパイルエラーが出るようになってしまいました。 TrimとかMidのような極く基本的命令でエラーになっております。 イミディアットウィンドウで該当命令個所をPrint文で表示させようとしても命令が認識されません。 何が原因なのでしょうか?どのように対応すればよろしいのでしょうか? よろしくお願い申し上げます。

  • ExcelVBAで行の非表示、表示をコード化したい

    現在、Excel2003をつかっており、VBAを用いて sheet1シートの2行目、4行目、10行目を非表示にするマクロ(HIDDEN)と すべての行を表示にするマクロ(APPEAR)を使っています。 Sub HIDDEN() ThisWorkbook.Worksheets("sheet1").Rows("2").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("4").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("10").HIDDEN = True End Sub Sub APPEAR() ThisWorkbook.Worksheets("sheet1").Rows.HIDDEN = False End Sub いま、2つのマクロを併合し 「Sheet1の2行目、4行目、10行目のいずれかが非表示であれば、すべての行を表示 そうでなければ、2行目、4行目、10行目のすべてを非表示にしたい」 と考えています。 ここで私が困っているのは、2行目、4行目、10行目のいずれかが非表示であれば というのをどうVBAで記述するのかです。

  • ExcelVBAで行の非表示、表示をコード化

    現在、Excel2003をつかっており、VBAを用いて sheet1シートの2行目、4行目、10行目を非表示にするマクロ(HIDDEN)と すべての行を表示にするマクロ(APPEAR)を使っています。 Sub HIDDEN() ThisWorkbook.Worksheets("sheet1").Rows("2").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("4").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("10").HIDDEN = True End Sub Sub APPEAR() ThisWorkbook.Worksheets("sheet1").Rows.HIDDEN = False End Sub いま、2つのマクロを併合し 「Sheet1の2行目、4行目、10行目のいずれかが非表示であれば、すべての行を表示 そうでなければ、2行目、4行目、10行目のすべてを非表示にしたい」 と考えています。 ここで私が困っているのは、2行目、4行目、10行目のいずれかが非表示であれば というのをどうVBAで記述するのかです。

  • VBAについて

    VBAについて質問です。 データをコピーして新規ブックとして名前(年、月、日)をつけて別のフォルダ(デスクトップ上のフォルダ)に毎朝8時に保存したいのですが、Cディスク内に直接保存されてしまいます。 コードは以下の通りです。 Sub 自動保存() With workbooks("サンプル.xism") Worksheets("Sheet3").Range("B6:B205").Value = .Worksheets("メインモニタ").Range("F13:F212").Value Worksheets("Sheet3").Range("D6:D205").Value = .Worksheets("メインモニタ").Range("K13:K212").Value Worksheets("Sheet3").Range("F6:F205").Value = .Worksheets("メインモニタ").Range("P13:P212").Value Worksheets("Sheet3").Range("H6:H205").Value = .Worksheets("メインモニタ").Range("U13:U212").Value End With Worksheets("Sheet3").Select Worksheets("Sheet3").Copy Application.DisplayAlerts = False With ActiveWorkbook.SaveAs "C:\サンプル2_" & Format(Date , "yyyymmdd") . Close End With Application.DisplayAlerts = True Application.OnTime DateValue(Date + 1) + TimeValue("8:00:00") , "自動保存" Worksheets("メインモニタ") . Activate End Sub ご教授宜しくお願いします。

  • VBA SendKeysステートメントについて

    お忙しいところ大変申し訳ありません、ご回答の程お願い申し上げます。 入力されるデータと列の数は毎回異なり入力された文字自体を修正するVBAを組みたいのですが、検索などで調べた結果「SendKeysステートメント」のコマンド「 SendKeys "{F2}"」というものを発見しました。 それで構文を組んでみたのですが、 Sub Macro1() Worksheets(1).Activate Range("A2").Activate SendKeys "{F2}" End sub で単一セルを修正する事はできました。 これを「列(列は毎回固定です)の空白セルまで」というプログラムは組めるのでしょうか? お忙しい中申し訳ありませんがご回答いただければ幸いです。

  • VBAで○○:○○と表示させたいのに小数で0.53125のように表示さ

    VBAで○○:○○と表示させたいのに小数で0.53125のように表示されてします。 初心者です。 E101から下に時刻 F101から下に時間(1時間は1、1時間半は1.5)が記入されています。 ユーザーフォームを作成しており、Initialize()に E101とF101を足した時間(12:00+1なら13:00)を 「txt退出時間」に表示させたいと思っていますが、 数値では求められるものの○○:○○となりません。 Private Sub UserForm_Initialize() Dim 行 As Long Dim 退出時間 As Variant txt日付 = Worksheets("○○").Range("B1") txt番号 = Worksheets("○○").Range("U98") Worksheets("○○").Select 行 = txt番号 + 100 退出時間 = Cells(行, 5) + Cells(行, 6) / 24 txt利用時間 = Cells(行, 6).Value txt入室時間 = Cells(行, 5).Text txt退出時間 = 退出時間’ここが上手くいきません txt打込時間 = Cells(行, 17).Text Call リスト更新 End Sub Initializeでは無いのでしょうか?右も左も分かりません。 分かる方宜しくお願い致します。

  • VBAで修正ボタンを作成

    先ほどは登録ボタンを作成したのでが、 修正ボタンもあれば便利だと思い作りたいのですが 一向にできません。 一覧表より、番号を検索して一致するセルの場所に 上書き?保存をするようにしたいのですが どのようにすればよいでしょうか? 先ほどから新たに訂正を加えたのですが、 やはりダメでした。 Private Sub CommandButton2_Click() '修正ボタン Dim bk As Workbook Dim sh1 As Worksheet Dim sh2 As Worksheet Dim cnt1 As Long Set bk = ThisWorkbook Set sh1 = bk.Worksheets("現場登録検索") Set sh2 = bk.Worksheets("一覧") cnt1 = 6 'マッチ Range("F2").Select n = ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],一覧!C[-5],0)" cnt1 = n '送り方 sh2.Cells(n, 22).Value = sh1.Cells(4, 3).Value '封筒 sh2.Cells(n, 23).Value = sh1.Cells(5, 3).Value MsgBox "修正できました。" End Sub よろしくお願い致します。

  • Excel VBAに詳しい人に質問です。

    以下のようなFor文を使用して、F列が空白の場合、その行を削除するマクロを組んでいます。 しかし、他のシートなどデータが肥大になってきて、削除速度がかなり落ちました。 どうにか速度をあげる方法はないでしょうか? ワークシートの7~300の行でF列が空白の行を削除できれば良いです。 F列にはVLOOKUP関数で、検索に引っかからなかった場合に空白になるようにしています。 詳しい方アドバイスよろしくお願いします。 For k = 300 To 7 Step -1 If Worksheets("一覧").Cells(k, "F") = "" Then Worksheets("一覧").Rows(k).Delete End If Next k

  • VBAで条件式について

    EXEL(VBA)で例えば、A列のデータが入っている行までの中で数値(x)が  x<2 ならばセルに色をぬる。そして空白セルと x>2ならば色をぬらない。 という条件式は、どうしたらいいのですか? Sub InteriorColor() For j= 5 to 21 worksheets(j).activate For i = 1 to 40 '30から40行ぐらい While cells(6+i,6)<>"" If(cells(6+i,6).value<2) Then ’6列7行目から  with selection.interior .Colorindex=45 .patern=xlsorid End with Wend End if Next i Next j End sub ということを連続していない列(5列ぐらい)に対してします。 同じ命令文になる部分もあるので簡潔にしたいという希望もあります。 上部の命令では無限ループの可能性があり実行が止まりません。 どのように記述したらいいのですか? また、同じブックのシート25枚のうち5枚目から21枚目に対して処理します。 5から21までのシートの間で関係ないシートが7枚目と10枚目と15枚目にあります。それを省いての処理もあれば教えてください。

  • エクセルVBAについて

    エクセルVBA初心者で、勉強中の者です。 添付画像のような時間のグラフのようなものを作りたいと思っています。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 時間グラフ作成() If Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value = CDate("9:05") Then Worksheets("(2)(2)(2)(2)").Range("I2").Select  With Selection.Interior   .ColorIndex = 8   .Pattern = xlSolid  End With Elseif Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value = CDate("9:10") Then Worksheets("(2)(2)(2)(2)").Range("J2").Select  With Selection.Interior   .ColorIndex = 8   .Pattern = xlSolid  End With  ・  ・   ・ End If End Sub 'それから、終了の時間を入れて、開始から終了までの間を塗りつぶす。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 以上のように作成しようと考えていましたが、いざやろうとすると 1行に対してあまりにも膨大な記述をしなくてはならないことに 気がつきました(一月分ともなると恐ろしいです・・・)・・・。 もっと効率的な方法はあるものでしょうか? よろしくお願いいたします。

専門家に質問してみよう