[[20240730140705]] 『セルの値がクリアされない』(。。) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『セルの値がクリアされない』(。。)

お世話になっております。

マクロの挙動の件で相談させてください。
先々月までは問題なく動いていたのですが、先月から挙動がおかしく
当該セルの数値クリアができなくなってしまいました。

マクロを触ったりはしていないので、数式や内容が変わってしまった。みたいなことはありません。

下記マクロを走らせると入力表(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 >


Sub test002()
    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


Sub test002()
    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


"入力表(" & i & ")"

とか、

"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.