[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『範囲指定』(佐藤)
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.