[[20150216093421]] 『範囲指定』(佐藤) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『範囲指定』(佐藤)

H列とG列の検索にてメッセ−ジを出しています。
検索範囲を指定したいのです。
検索範囲
G7:G1000
H7:H1000
下記のコ−ドをどのように書き換えればよいのでしょうか
宜しくお願いいたします。

Private Sub Workbook_Open()
ActiveSheet.Unprotect
Dim MyStr As String

 Dim r1 As Long
 'H列の検索
   For r1 = 1 To Cells(Rows.Count, 1).End(xlUp).Row
   MyStr = Range("h" & r1)
   If MyStr = "●" Then
      MsgBox "期限切れ!!", vbOKOnly + vbCritical, Title:="警告"
      Exit Sub
    End If
  Next r1
 Dim r2 As Long
 'G列の検索
   For r2 = 1 To Cells(Rows.Count, 1).End(xlUp).Row
   MyStr = Range("g" & r2)
   If MyStr = "●" Then
      MsgBox "近づいています。", vbOKOnly + vbCritical, Title:="注意"
      Exit Sub
    End If
  Next r2
'エクセルを閉じる
 Application.DisplayAlerts = False
 Application.Quit
End Sub

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 >For r1 = 1 To Cells(Rows.Count, 1).End(xlUp).Row
 ここを、ForEach文に書き換えるとわかりやすいと思います。

 r1の宣言をRange型に変更して
 Dim r1 As Range

 For Each r1 in Range("G7:G1000")
     If r1.Value = "●" Then
         Msgbox 〜〜省略

 こんな感じに。

(稲葉) 2015/02/16(月) 09:52


 良く見たら変なコードですね・・・
 もし●がなかったら、今開いているエクセルすべて閉じちゃう処理ですけど
 それが望んでいるコードですか?
(稲葉) 2015/02/16(月) 10:07

 Unprotect しっぱなしですけれど大丈夫でしょうか?
 ActiveSheet が変わっていたら大丈夫?
 などなどありますが、Find の別例で。

 Private Sub Workbook_Open()
    ActiveSheet.Protect UserInterfaceonly:=True

    Dim r As Range
    Set r = Range("H2:H7000").Find("●", lookat:=xlWhole)
    If Not r Is Nothing Then
      MsgBox "期限切れ!!", vbOKOnly + vbCritical, Title:="警告"
      Exit Sub
    End If

    Set r = Range("G2:G7000").Find("●", lookat:=xlWhole)
    If Not r Is Nothing Then
      MsgBox "近づいています。", vbOKOnly + vbCritical, Title:="注意"
      Exit Sub
    End If

    'エクセルを閉じる
    Application.DisplayAlerts = False
    Application.Quit
 End Sub

 って書いたけれど、Protect 変更する必要あったかな?
(Mook) 2015/02/16(月) 10:14

 確かに、UnProtectもイランきがしますね・・・
 あとActiveSheetはやっぱりよしたほうがいいと思いましたので、Sheet名も追加で。

 計算式案
    Private Sub Workbook_Open()
        Dim msg As String
        Dim ttl As String
        If [COUNTIF(Sheet1!H7:H1000,"●")] > 0 Then
            msg = "期限切れ!!"
            ttl = "警告"
        ElseIf [COUNTIF(Sheet1!G7:G1000,"●")] > 0 Then
            msg = "近づいています。"
            ttl = "注意"
        End If

        If msg <> "" Then
            MsgBox msg, vbOKOnly + vbCritical, Title:=ttl
        Else
            Application.DisplayAlerts = False
            Application.Quit
        End If
    End Sub

(稲葉) 2015/02/16(月) 10:28


稲葉様、Mook様
ありがとうございました。

タスクスケジュ−ラで毎日決まった時間に呼び出し
確認をします。

稲葉様へ
下記(←部分)のように書き換えてみましたが
よろしいでしょうか

Private Sub Workbook_Open()
ActiveSheet.Unprotect
Dim MyStr As String

 Dim r1 As Range ←
 'H列の検索
For Each r1 in Range("H7:H1000") ←
     If r1.Value = "●" Then ←

      MsgBox "期限切れ!!", vbOKOnly + vbCritical, Title:="警告"
      Exit Sub
    End If
  Next r1
Dim r2 As Range  ←
'G列の検索
For Each r2 in Range("H7:H1000") ←
     If r2.Value = "●" Then ←
      MsgBox "近づいています。", vbOKOnly + vbCritical, Title:="注意"
      Exit Sub
    End If
  Next r2
'エクセルを閉じる
 Application.DisplayAlerts = False
 Application.Quit
End Sub

もし●がなかったら、今開いているエクセルすべて閉じちゃう処理ですけど
 それが望んでいるコードですか?

●がなければ、期限が近づいていないので閉じても問題ないですが

Mook様へ
コ−ドを作っていただきありがとうございます。
マクロ初心者で意味があまりよくわらないのが本音です。
申し訳ありません。

(佐藤) 2015/02/16(月) 10:33


検証しました。
稲葉様から記述いただいコ−ドだと
エラ−表示が出てしましいました。
Mook様から記述いただいコ−ドだと
実行すると●表示あるなしに関わらず
開いて直ぐに閉じてしまいます。

最初に教えて頂いたコ−ドだと問題ないようでした。

Private Sub Workbook_Open()
ActiveSheet.Unprotect
Dim MyStr As String

 Dim r1 As Range 
 'H列の検索
For Each r1 in Range("H7:H1000") 
     If r1.Value = "●" Then 

      MsgBox "期限切れ!!", vbOKOnly + vbCritical, Title:="警告"
      Exit Sub
    End If
  Next r1
Dim r2 As Range  
'G列の検索
For Each r2 in Range("H7:H1000") 
     If r2.Value = "●" Then 
      MsgBox "近づいています。", vbOKOnly + vbCritical, Title:="注意"
      Exit Sub
    End If
  Next r2
'エクセルを閉じる
 Application.DisplayAlerts = False
 Application.Quit
End Sub

どうなんでしょうか
よろしくお願いいたします。

(佐藤) 2015/02/16(月) 11:04


稲葉様
勘違いしていました。
1ブックに
シ−トは4つありまして
「リスト?@」「リスト?A」「参考」「基準」です。

(佐藤) 2015/02/16(月) 11:11


 解決したの?
 2015/02/16(月) 10:28 の投稿は試していただけましたか?
(稲葉) 2015/02/16(月) 11:55

稲葉様
できました。
追加のシ−トの場合は
このようでよろしいのでしょうか
宜しくお願い致します。

Private Sub Workbook_Open()

        Dim msg As String
        Dim ttl As String
        If [COUNTIF(リスト?@!H7:H1000,"●")] > 0 Then
        If [COUNTIF(リスト?A!H7:H1000,"●")] > 0 Then
        If [COUNTIF(参考!H7:H1000,"●")] > 0 Then
        If [COUNTIF(基準!H7:H1000,"●")] > 0 Then
            msg = "期限切れ!!"
            ttl = "警告"
        ElseIf [COUNTIF(リスト?@!G7:G1000,"●")] > 0 Then
        ElseIf [COUNTIF(リスト?A!G7:G1000,"●")] > 0 Then
        ElseIf [COUNTIF(参考!G7:G1000,"●")] > 0 Then
        ElseIf [COUNTIF(基準!G7:G1000,"●")] > 0 Then
            msg = "近づいています。"
            ttl = "注意"
        End If
        If msg <> "" Then
            MsgBox msg, vbOKOnly + vbCritical, Title:=ttl
        Else
            Application.DisplayAlerts = False
            Application.Quit
        End If
    End Sub

(佐藤) 2015/02/16(月) 14:32


 >追加のシ−トの場合は 
 >このようでよろしいのでしょうか 
 聞くくらいならやってみりゃいいじゃないですか。
 エラーになりますから。

 ●があればメッセージ出すなら、合計が1以上ってことですよね?
 なら全部足してから判断すればいいだけですよね?

        If [COUNTIF(リスト(1)!H7:H1000,"●")] + _
           [COUNTIF(リスト(2)!H7:H1000,"●")] + _
           [COUNTIF(参考!H7:H1000,"●")] + _
           [COUNTIF(基準!H7:H1000,"●")] > 0 Then
            msg = "期限切れ!!"
            ttl = "警告"
        ElseIf [COUNTIF(リスト(1)!G7:G1000,"●")] + _
               [COUNTIF(リスト(2)!G7:G1000,"●")] + _
               [COUNTIF(参考!G7:G1000,"●")] + _
               [COUNTIF(基準!G7:G1000,"●")] > 0 Then
            msg = "近づいています。"
            ttl = "注意"
        End If

(稲葉) 2015/02/16(月) 15:04


稲葉様
おしかりの言葉、肝に命じます。
ありがとうございました。
思うようにできました。
感謝しております。

もう一点お願いいたします。
今のシ−ト
全てのシ−トに保護をかけ
一括でパスを入力する事で全て解除
解除状態で保存しても
開けた時には、保護がかかる
そのような事は、できるでしょうか
宜しくお願い致します。

(佐藤) 2015/02/16(月) 16:34


 考え方が逆で、閉じる(保存)ときにパスワードを掛ける、が一般的な考え方だと思います。
 Workbook_Openイベントをご存知でしたら、BeforeSaveイベントはご存じありませんか?

 保護については
 Worksheet.Protect メソッド でVBEのヘルプを検索してください。

 「一括」で、は「繰り返し処理で一括に見せている」ことをご理解いただいたうえで、
 For Eachを検索してみてください。
(稲葉) 2015/02/16(月) 18:00

稲葉様
何度もありがとうございます。
明日、職場で調べて
試みたいと思っています。
(佐藤) 2015/02/16(月) 19:27

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.