Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13523 / 13646 ツリー ←次へ | 前へ→

【4967】セルを判定して実行させるには かふん 03/4/15(火) 18:27 質問
【4969】Re:セルを判定して実行させるには パピー 03/4/16(水) 8:48 回答
【4987】Re:セルを判定して実行させるには かふん 03/4/16(水) 15:15 発言
【4996】Re:セルを判定して実行させるには ポンタ 03/4/16(水) 18:59 回答
【5019】Re:セルを判定して実行させるには かふん 03/4/17(木) 16:02 お礼
【4971】セルの関数で・・・ こう 03/4/16(水) 8:56 回答

【4967】セルを判定して実行させるには
質問  かふん  - 03/4/15(火) 18:27 -

引用なし
パスワード
   アクティブなセルのあるF列に合計をさせるようにしているのですが(F18からアクティブセルの3行上まで)
アクティブなセルのあるC列の前後何行かに数値があればその処理は行わないという条件をつけたいのですがどのような式をいれたら良いのでしょうか。
【例】合計欄を作ろうとしているセル(アクティブセル)がF30としたら
C29:C31に一つでも数値が入っていれば合計欄は作らない(”ここには作れません”等のメッセージを出す)などです。
よろしくお願いします。

【4969】Re:セルを判定して実行させるには
回答  パピー  - 03/4/16(水) 8:48 -

引用なし
パスワード
   ▼かふん さん:こんにちは。
>【例】合計欄を作ろうとしているセル(アクティブセル)がF30としたら
>C29:C31に一つでも数値が入っていれば合計欄は作らない(”ここには作れません”等のメッセージを出す)などです。
>よろしくお願いします。

取り敢えず、【例】についてサンプルを作りました。
他にもやり方があると思いますが?

的を外していたらごめんなさい。

Sub test()
  For i = -1 To 1 Step 1
    If ActiveCell.Offset(i, -3) <> "" Then
      MsgBox "ここには作れません"
      Exit For
    End If
  Next
End Sub

【4971】セルの関数で・・・
回答  こう E-MAIL  - 03/4/16(水) 8:56 -

引用なし
パスワード
   ▼かふん さん:
>【例】合計欄を作ろうとしているセル(アクティブセル)がF30としたら
>C29:C31に一つでも数値が入っていれば合計欄は作らない(”ここには作れません”等のメッセージを出す)
単純にセルの関数でも可能ですよ。
上記例なら,F30セルに
=IF(COUNT(C29:C31)<>0,SUM(C29:C31),"入力なし")

【4987】Re:セルを判定して実行させるには
発言  かふん  - 03/4/16(水) 15:15 -

引用なし
パスワード
   ▼パピー さん:
すいません、例文説明が間違っていました。
合計を作る場所はF30ですがアクティブセルはF30ではなく30行上のどこかです。(一定じゃない)
その場合のC列29〜31のセルを判定したいのです。

>Sub test()
>  For i = -1 To 1 Step 1
>    If ActiveCell.Offset(i, -3) <> "" Then
>      MsgBox "ここには作れません"
>      Exit For
>    End If
>  Next
>End Sub

F列にセルがある時はこれで大丈夫なのですが、他の場所にある時はメッセージがでませんでした。よろしくお願いします。

【4996】Re:セルを判定して実行させるには
回答  ポンタ  - 03/4/16(水) 18:59 -

引用なし
パスワード
   横から失礼します。
これでどうでしょう?

Sub test()
  Dim r As Range
  If ActiveCell.Row = 1 Then
    Set r = Cells(ActiveCell.Row, "C").Resize(2, 1)
  ElseIf ActiveCell.Row > Rows.Count - 2 Then
    Set r = Range(Cells(ActiveCell.Row - 1, "C"), "C65536")
  Else
    Set r = Cells(ActiveCell.Row - 1, "C").Resize(3, 1)
  End If
  If WorksheetFunction.Count(r) > 0 Then
    MsgBox "ここには作れません"
  End If
End Sub

【5019】Re:セルを判定して実行させるには
お礼  かふん  - 03/4/17(木) 16:02 -

引用なし
パスワード
   ▼ポンタ さん:

>Sub test()
>  Dim r As Range
>  If ActiveCell.Row = 1 Then
>    Set r = Cells(ActiveCell.Row, "C").Resize(2, 1)
>  ElseIf ActiveCell.Row > Rows.Count - 2 Then
>    Set r = Range(Cells(ActiveCell.Row - 1, "C"), "C65536")
>  Else
>    Set r = Cells(ActiveCell.Row - 1, "C").Resize(3, 1)
>  End If
>  If WorksheetFunction.Count(r) > 0 Then
>    MsgBox "ここには作れません"
>  End If
>End Sub

↑で試したところ、ちゃんと判定することができました。
これで間違ったところに合計行を作ることが回避できそうです。
ありがとうございました。

13523 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free