• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シート内の特定のセルの範囲が変化した時、)

シート内の特定のセルの範囲が変化した際に、なぜ動作しないのか教えてください

このQ&Aのポイント
  • シート内の特定のセルの範囲が変化した際に、動作しない理由を教えてください。
  • プログラムの動作しません。なぜでしょうか?
  • シート内の特定のセルの範囲が変化した際に、動作しない理由を教えてください。

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

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

>Target.Row > 65000 や Target.Row <= 3 は正しいですか。3行目より上行、65000行目より下行で良いのか。 ーー 範囲限定(チェック)は、Googleで「VBA Intersect」 で照会し、使ったら http://www.moug.net/tech/exvba/0050131.htm 定石ではないかな。

その他の回答 (1)

回答No.1

こんばんは。 気付いたことをいろいろと書きますので、気を悪くしないでくださいね。 ・質問の「セルの範囲が変化した時」はわかりにくいです。あるセル範囲の「値」が変化した時、ですね。 ・「max」を変数名に使うのはやめましょう。すでに「max」は最大値を求める関数として定義済みだからです。 ・Dim i, j, max As Integer これをコンパイラは「i,jはVariant型、maxはInteger型に宣言」と解釈します。 3つともInteger型にしたいなら、 Dim i as integer,j as integer,max as integer としなくてはなりません。 ・If Target.Row <= 3 Or Target.Row > 65000 And Target.Column = 4 Then この文をどのような意味に使っていますか? 論理演算子はVBAでは「OR」より「AND」が優先します。意味がわからなければVBAのヘルプを 「演算子の優先順位」というキーワードで検索してみてください。 ・For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row If max < Range("A" & i).Value Then max = Range("A" & i).Value End If Next i ここはA列の最大値を求めているところだと思いますが、最大値を求める関数はさきほども言ったように 用意されています。したがって、A列の最大値を求めるなら dim MyMax as integer MyMax=worksheetfunction.max(range("a:a")) です。 ・「A列とD列のそれぞれの条件にあった行の」どんな条件でしょう? 質問文からはわかりません。コードから類推はできますが、やりたいことを 日本語で書く方が確実です。 ・長々とIf文を続けるのは読み手に緊張感を伴います。 条件判断を逆にして「だめなら抜ける」という書き方にしましょう。つまり、 If 条件成立 Then  ・  ・ End If と書くよりも If 条件不成立 Then Exit Sub End If  ・  ・ と書く方がいいですよ。 こんな感じで動くような気がします。 Private Sub Worksheet_Change(ByVal Target As Range) If 条件判断をここに書く Then Exit Sub Dim MyRng1 As Range, MyRng2 As ragnge, MyMax As Integer Set MyRng1 = Range("A3", Range("A65536").End(xlUp)) Set MyRng2 = MyRng1.SpecialCells(xlCellTypeBlanks) MyMax = WorksheetFunction.max(MyRng1) Dim MyR As Range For Each MyR In MyRng2 If Not IsEmpty(MyR.Offset(1)) Then MyR.Value = MyMax Next End Sub

acchandesu
質問者

お礼

本当にご丁寧にありがとうございました。 プログラミングはかなり素人で、最近始めました。 If文は素人でもわかりやすいので、よく長々と書いてしまいます。ダメですね。 ご指摘頂いた内容で、知らなかったこともいくつかあったので参考になりました。 これからはもっと勉強していこうと思います。 ありがとうございました。

関連するQ&A