[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『範囲指定』(佐藤)
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
タスクスケジュ−ラで毎日決まった時間に呼び出し
確認をします。
稲葉様へ
下記(←部分)のように書き換えてみましたが
よろしいでしょうか
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
最初に教えて頂いたコ−ドだと問題ないようでした。
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
(佐藤) 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
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.