『セルの値がクリアされない』(。。)
お世話になっております。
マクロの挙動の件で相談させてください。
先々月までは問題なく動いていたのですが、先月から挙動がおかしく
当該セルの数値クリアができなくなってしまいました。
マクロを触ったりはしていないので、数式や内容が変わってしまった。みたいなことはありません。
下記マクロを走らせると入力表(1)のセルのみ値が消え、入力表(2)〜入力表(50)は数値がそのまま残っています。
ほかにも、入力したはずの数値が消えたり、共有にしているのですが反映されていなかったり、と反抗期のような挙動をしています。
詳しい方がたくさんいらっしゃるようですので、こちらの解決策や、なぜこんな挙動になっているのかをご教示いただきたく存じます。
一応マクロを貼り付けておきます。
Sub 今回欄クリア実績値ロック()
'
' 今回欄クリア実績値ロック Macro
' 今回欄(50シートグループ選択)項目クリア 実績値ロック
'
Sheets("決裁名毎データ").Select Dim r As Range ' Set r = Range("A2") 'r=処理月 Dim nenndo As Range ' Set nenndo = Range("F2") 'nenndo=処理年度 Dim tmp As Variant 'tmp=処理年 tmp = Year(Date)
Sheets(Array("入力表(1)", "入力表(2)", "入力表(3)", "入力表(4)", "入力表(5)", "入力表(6)", "入力表(7)", _ "入力表(8)", "入力表(9)", "入力表(10)", "入力表(11)", "入力表(12)", "入力表(13)", "入力表(14)", "入力表(15)", _ "入力表(16)", "入力表(17)", "入力表(18)", "入力表(19)", "入力表(20)", "入力表(21)", "入力表(22)", "入力表(23)" _ , "入力表(24)", "入力表(25)")).Select Sheets("入力表(1)").Activate Sheets(Array("入力表(26)", "入力表(27)", "入力表(28)", "入力表(29)", "入力表(30)", "入力表(31)", _ "入力表(32)", "入力表(33)", "入力表(34)", "入力表(35)", "入力表(36)", "入力表(37)", "入力表(38)", "入力表(39)" _ , "入力表(40)", "入力表(41)", "入力表(42)", "入力表(43)", "入力表(44)", "入力表(45)", "入力表(46)", _ "入力表(47)", "入力表(48)", "入力表(49)", "入力表(50)")).Select Replace:=False ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
'
' 今回欄クリア
Select Case True Case r = 4 Range("K9:K20").Select '3月処理終了時 4月入力準備 Case r = 5 Range("K10:K20").Select '4月処理終了時 5月入力準備 Case r = 6 Range("K11:K20").Select '5月処理終了時 6月入力準備 Case r = 7 Range("K12:K20").Select '6月処理終了時 7月入力準備 Case r = 8 Range("K13:K20").Select '7月処理終了時 8月入力準備 Case r = 9 Range("K14:K20").Select '8月処理終了時 9月入力準備 Case r = 10 Range("K15:K20").Select '9月処理終了時 10月入力準備 Case r = 11 Range("K16:K20").Select '10月処理終了時 11月入力準備 Case r = 12 Range("K17:K20").Select '11月処理終了時 12月入力準備 Case r = 1 Range("K18:K20").Select '12月処理終了時 1月入力準備 Case r = 2 Range("K19:K20").Select '1月処理終了時 2月入力準備 Case r = 3 Range("K20:K20").Select '2月処理終了時 3月入力準備 Case Else '上記の条件に合致しない場合はここへきます。 MsgBox "該当する処理月がありません"
End Select
Selection.ClearContents
よろしくお願いいたします。
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
Dim r As Long Dim i As Long
r = Sheets("決裁名毎データ").Range("A2").Value + 5 For i = 1 To 50 Worksheets("入力表(" & i & ")").Range("K" & r & ":K20").ClearContents Next End Sub
こういうことかなぁ。。。
原因は定かではないですが、
マクロでやるときは、Selectしなくても作業は出来るので。。。。
(まっつわん) 2024/07/30(火) 15:20:48
なるほどです。
このマクロをどこへ入れ込めばよいでしょうか?
まさかこれだけで今書いてあるマクロは不要ですか…?
(。。) 2024/07/30(火) 15:25:01
Sub test002()
Dim r As Long Dim i As Long
r = Sheets("決裁名毎データ").Range("A2").Value r = Choose(r, 18, 19, 20, 9, 10, 11, 12, 13, 14, 15, 16, 17) For i = 1 To 50 Worksheets("入力表(" & i & ")").Range("K" & r & ":K20").ClearContents Next End Sub
>まさかこれだけで今書いてあるマクロは不要ですか…?
たぶん、こんな感じ
(まっつわん) 2024/07/30(火) 15:29:28
すみません、上記のマクロには続きがあり、
Select Case True
Case r = 4 Range("Q9:Q20").Select '3月処理終了時 4月入力準備 Case r = 5 Range("Q10:Q20").Select '4月処理終了時 5月入力準備 Case r = 6 Range("Q11:Q20").Select '5月処理終了時 6月入力準備 Case r = 7 Range("Q12:Q20").Select '6月処理終了時 7月入力準備 Case r = 8 Range("Q13:Q20").Select '7月処理終了時 8月入力準備 Case r = 9 Range("Q14:Q20").Select '8月処理終了時 9月入力準備 Case r = 10 Range("Q15:Q20").Select '9月処理終了時 10月入力準備 Case r = 11 Range("Q16:Q20").Select '10月処理終了時 11月入力準備 Case r = 12 Range("Q17:Q20").Select '11月処理終了時 12月入力準備 Case r = 1 Range("Q18:Q20").Select '12月処理終了時 1月入力準備 Case r = 2 Range("Q19:Q20").Select '1月処理終了時 2月入力準備 Case r = 3 Range("Q20:Q20").Select '2月処理終了時 3月入力準備 Case Else '上記の条件に合致しない場合はここへきます。 MsgBox "該当する処理月がありません"
End Select
Selection.ClearContents
'
' 実績値ロック Macro
'
Select Case True
Case r = 4 Range("K9:K20").Select '3月処理終了時 4月入力準備 Selection.Locked = False '今回欄すべて入力可 Selection.FormulaHidden = False Range("Q9:Q20").Select Selection.Locked = False Selection.FormulaHidden = False Case r = 5 Range("K9:K20").Select '4月処理終了時 5月入力準備 Selection.Locked = False '今回欄すべて入力可 Selection.FormulaHidden = False Range("Q9:Q20").Select Selection.Locked = False Selection.FormulaHidden = False Case r = 6 Range("G9:R9").Select '5月処理終了時 6月入力準備 Selection.Locked = True Selection.FormulaHidden = False Case r = 7 Range("G10:R10").Select '6月処理終了時 7月入力準備 Selection.Locked = True Selection.FormulaHidden = False Case r = 8 Range("G11:R11").Select '7月処理終了時 8月入力準備 Selection.Locked = True Selection.FormulaHidden = False Case r = 9 Range("G12:R12").Select '8月処理終了時 9月入力準備 Selection.Locked = True Selection.FormulaHidden = False Case r = 10 Range("G13:R13").Select '9月処理終了時 10月入力準備 Selection.Locked = True Selection.FormulaHidden = False Case r = 11 Range("G14:R14").Select '10月処理終了時 11月入力準備 Selection.Locked = True Selection.FormulaHidden = False Case r = 12 Range("G15:R15").Select '11月処理終了時 12月入力準備 Selection.Locked = True Selection.FormulaHidden = False Case r = 1 If nenndo < tmp Then '1,2,3月は(年-1)年度のため、年=年度の場合は次年度処理(ロックかけない) Range("G16:R16").Select '12月処理終了時 1月入力準備 Selection.Locked = True Selection.FormulaHidden = False End If Case r = 2 If nenndo < tmp Then '1,2,3月は(年-1)年度のため、年=年度の場合は次年度処理(ロックかけない) Range("G17:R17").Select '1月処理終了時 2入力準備 Selection.Locked = True Selection.FormulaHidden = False End If Case r = 3 If nenndo < tmp Then '1,2,3月は(年-1)年度のため、年=年度の場合は次年度処理(ロックかけない) Range("G18:R18").Select '2月処理終了時 3月入力準備 Selection.Locked = True Selection.FormulaHidden = False End If
Case Else '上記の条件に合致しない場合はここへきます。 MsgBox "該当する処理月がありません"
End Select
Sheets("決裁名毎データ").Select End Sub
と続くのですが、これも同様に簡潔に出来ますか?
(まだ動かしていないのでどうなるか見れてないのですが…)
(。。) 2024/07/30(火) 15:34:44
Dim r As Long Dim i As Long
r = Sheets("決裁名毎データ").Range("A2").Value On Error GoTo ErrH r = Choose(r, 18, 19, 20, 9, 10, 11, 12, 13, 14, 15, 16, 17) On Error GoTo 0 For i = 1 To 50 Worksheets("入力表(" & i & ")").Range("K" & r & ":K20").ClearContents Next Exit Sub
ErrH:
MsgBox "該当する処理月がありません" End Sub
1〜12以外が入力されたときのエラー処理を入れてみました。
>と続くのですが、これも同様に簡潔に出来ますか?
出来ます。
というか、
1)Selectしない。
2)同じことを何度も書かない。
は、基本です。
たぶん、今のコードは、後で読んだときにすごく読みにくいと思います。
(数か月後、数年後、読んで簡単に内容が把握できるか?)
シートをグループ化した方が処理が速いかも知れませんが、
50回繰り返しても体感的にわからないと思いますし、
遅くて耐えれないと感じたときに別のロジックを考えたらよいかと思います。
(まっつわん) 2024/07/30(火) 15:47:12
Selectやセル番地指定?をすると重くなる。というのは調べてて出てきたのですが、
前の方が作ったままだったのでどこをどう直せばよいのかもわからず…
簡潔になり、なんとなくですが理解できるようなコードで読みやすいです。
ありがとうございます。
ちなみにですが、上記マクロは値クリアのみ。でしょうか?
(。。) 2024/07/30(火) 15:58:54
とか、
"K" & r & ":K20"
とかの部分でシート名やセル番地を
文字列を操作して、意図したものに書き換えているので、
そういうしくみというか手順を書いてやることになります。
ただ、そういうのを考えてVBA語に翻訳できるようになるには、
それなりの勉強の時間が必要になります。
ちょっと、後から提示されたコードの部分も含めると
操作したいセル範囲等いろいろ複雑っぽいので理解するのに時間がかかるので、
掲示板での対応は少し厳しいかも知れません。
それから、入力表が1〜50までなんであるのかが不思議です。
1つ作って49回コピーしてもよさそうですし。。。
あと、マクロでがっつりやると、あとで引き継いだ人がメンテナンスできない
というデメリットもあるので、この際マクロなしでなんとかならないかも検討してみても
よいかと思います。
(まっつわん) 2024/07/30(火) 16:23:52
掲示板で指示された通りに書き換えるとのちのちメンテナンス出来ない(今みたいに)ということですね。
入力表はそれぞれ別の数値が入っていまして…
しかも入力表1〜50が10個ありまして…
ですので手作業で表にまとめてクリアして、が難しいためマクロに頼っている状態でした。
また、掲示されたマクロを走らせてみて、うまくいった!や不具合が出た。など相談させていただきたいと思います。
(。。) 2024/07/30(火) 16:40:34
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.