[[20131009100213]] 『VBA Find_Range 関数について』(木葉) ページの最後に飛ぶ

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

 

『VBA Find_Range 関数について』(木葉)
WinXP、2003

毎度お世話になっております。
VBAにて、年間カレンダーを作りました。

A、I=年月
B、J=日
C、K=月
D、L=火
E、M=水
F、N=木
G、O=金
H、P=土

1月〜6月はA〜H、
7月〜12月はI〜P列と2つに分けています
以下のような感じです

2013年1月

	日	月	火	水	木	金	土
			1	2	3	4	5
	6	7	8	9	10	11	12
	13	14	15	16	17	18	19
	20	21	22	23	24	25	26
	27	28	29	30	31		

2013年2月

	日	月	火	水	木	金	土
						1	2
	3	4	5	6	7	8	9
	10	11	12	13	14	15	16
	17	18	19	20	21	22	23
	24	25	26	27	28		

図形を作成してマクロ登録し、ボタンを押した時、
このカレンダーに本日の日付を
パターンカラーを薄黄色(ColorIndex = 36)、罫線を細線の外枠
になるようにしたいのですが・・・

コンパイルエラー「Sub または Function が定義されていません」
と表示され、【Sub 自動()】の部分が黄色くなり【Find_Range】の部分が範囲選択されてしまいます。

エラーについて調べると、「呼び出そうとしたプロシージャが存在しなかったり、参照設定されていないようなときに発生する」らしいのですが、Find_Range関数はこのバージョンでは使えないのでしょうか・・・?

調べてみても、2003でも使えるというようなことは書いてあります。
どこをどう改善していいのか分からないのでよろしかったら教えていただけると嬉しいです。

以下コードです

Sub 自動()

    Dim FR As Range

    Set FR = Find_Range(Date, Columns("B:H", "J:P"), xlValues, xlWhole, MatchCase:=False, MatchByte:=True)

    If Not FR Is Nothing Then
            FR.Borders(xlDiagonalDown).LineStyle = xlNone
            FR.Borders(xlDiagonalUp).LineStyle = xlNone
         With FR.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
          End With
         With FR.Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
          End With
         With FR.Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
          End With
         With FR.Borders(xlEdgeRight)
             .LineStyle = xlContinuous
             .Weight = xlThin
             .ColorIndex = xlAutomatic
          End With
         With FR.Interior
             .ColorIndex = 36
             .Pattern = xlSolid
          End With
     End If

End Sub


 >Find_Range

 このFunctionはどこに記述していますか?
 Private Functionとはしてないですか?
 Private Functionとしてあると、呼び出し元のマクロが記述してあるモジュール
 と同じモジュールに記述してないと呼びさせなかったと思います。

 また、当然ですが、Find_Range自体が記述されてないと当然呼び出しエラーになります。

 (カリーニン)

http://www.ozgrid.com/forum/showthread.php?t=27240

 一応見つけたので
 (稲葉)2013/10/09(水曜日) 10:39

 こんにちは

 >Find_Range

 自作のユーザー定義関数ですよね、きっと。

     Set FR = ThisWorkbook.Worksheets("Sheet1") _
        .Range("B:H", "J:P").Find(Date, , xlValues, xlWhole, MatchCase:=False, MatchByte:=True)

 どのブックのどのシートのセル範囲を探すか指定してこう変更するだけでも動きそうです。

 (ウッシ)

カリーニン様

回答ありがとうございます!
Function自体、記入していないはずなのですが・・・
呼び出し元のマクロといっても、このマクロは単体(?)で動くようにしていますし、他のマクロはこのコード以外に
年間カレンダーを作成するコードしかありません。
また、このコード(カレンダー作成の)にも、問題のコード(自動)を呼び出したりするような記述はしていません。

・・・質問の答えになっていますでしょうか

稲葉様

ご回答ありがとうございます!
・・・ウィルスバスターさんに止められてしまい、開けませんでした・・・せっかく見つけていただいたのにごめんなさい・・・

ウッシ様

ご回答ありがとうございます!
なるほどです・・・

実行してみたところ、エラーは出なくなったのですが、何の変化もありませんでした。
他に問題になるような部分があるのでしょうか・・・

エラーが出なくなったので問題の部分が全く分からないです・・・

(木葉)


 転載していいのかな・・・?

http://www.ozgrid.com/forum/showthread.php?t=27240

 の引用
 '==============================
 Function Find_Range(Find_Item As Variant, _ 
    Search_Range As Range, _ 
    Optional LookIn As Variant, _ 
    Optional LookAt As Variant, _ 
    Optional MatchCase As Boolean) As Range 

    Dim c As Range 
    If IsMissing(LookIn) Then LookIn = xlValues 'xlFormulas
    If IsMissing(LookAt) Then LookAt = xlPart 'xlWhole
    If IsMissing(MatchCase) Then MatchCase = False 

    With Search_Range 
        Set c = .Find( _ 
        What:=Find_Item, _ 
        LookIn:=LookIn, _ 
        LookAt:=LookAt, _ 
        SearchOrder:=xlByRows, _ 
        SearchDirection:=xlNext, _ 
        MatchCase:=MatchCase, _ 
        SearchFormat:=False) 
        If Not c Is Nothing Then 
            Set Find_Range = c 
            firstAddress = c.Address 
            Do 
                Set Find_Range = Union(Find_Range, c) 
                Set c = .FindNext(c) 
            Loop While Not c Is Nothing And c.Address <> firstAddress 
        End If 
    End With 

End Function

 '============================== ここまで

 (稲葉)2013/10/09(水曜日) 11:24


 こんにちは

 良く見てないですけど、本日の日付は1箇所だけのはずなのでFind_Rangeを使う意味は無さそうですね。

     Set FR = ThisWorkbook.Worksheets("Sheet1") _
        .UsedRange.Find(Date, , xlValues, xlWhole, MatchCase:=False, MatchByte:=True)

 と変更して、

    If Not FR Is Nothing Then

    If FR Is Nothing Then
        MsgBox "当日セル、見つかりません。"
    Else

 に変更して試して下さい。

 ついでに、マクロではなくて条件付書式を設定しておくだけでも良さそうですね。

 (ウッシ)

 ついでに。
 ここは 
    If Not FR Is Nothing Then
            FR.Borders(xlDiagonalDown).LineStyle = xlNone
            FR.Borders(xlDiagonalUp).LineStyle = xlNone
         With FR.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
          End With
 '省略
         With FR.Interior
             .ColorIndex = 36
             .Pattern = xlSolid
          End With
     End If

 ウッシさんのをお借りして↓のように書き換えられます。
    If FR Is Nothing Then
        MsgBox "当日セル、見つかりません。"
    Else
        With FR
            .Borders.LineStyle = xlContinuous
            .Interior.ColorIndex = 36
        End With
    End If
 (稲葉)2013/10/09(水曜日) 12:00

 今更だけど、当日だけ色と罫線入れたいという希望なら条件付き書式でいいんじゃ・・・
 (稲葉)2013/10/09(水曜日) 12:35

稲葉様

ウッシ様

ご返信ありがとうです

おっしゃる通りに変更してみました。
エラーは出なかったのですが、
実行すると "当日セル、見つかりません。"のボックスがひらきます。

目で見ても、確実に日付はあります。
書式は日付のみ(10月9日→2013年10月のカレンダー内にある「9」)なのですが、書式について何か関係はあるのでしょうか・・?
ただの数字列「9」ではなく、2013/10/9を書式により「9」にしたものです。

稲葉様
>>ついでに。・・・
これも"当日セル、見つかりません。"と成ったのですが・・・

ウッシ様
>>マクロではなくて条件付書式を設定しておくだけでも良さそうですね
条件付書式だと、本日の日付のみ、もしくは本日とそれより前の日付のセルを変えるという式しか思いつかないのですが、
このブックを開いた日に色をつけていきたいのです。
例えば、昨日は開かなかったので、そこは書式を変えない、と言う感じで。
それも不定期に開く時と開かない時があるので条件式も難しい気がするのです・・・

(木葉)


 ウッシさんの最後まで読んでなかった!
 ごめんなさい ↑↑ 取り下げます。

 私は当日を探すところには手を加えていません。
 あくまで「書式変更」のみ、こうしたらどうですか?という提案です。

 >このブックを開いた日に色をつけていきたいのです。 
 開かないとブックが見られないのに、開いた日に色を付けたいとはどういう了見?

 ともかく、特定のセルに日付を入れるコード組んで、
 そのセルを使って条件付き書式にすればいいのでは?

 (稲葉)2013/10/09(水曜日) 13:20

 こんにちは

 >このブックを開いた日に色をつけていきたいのです

 開いた日の履歴を保持したいという意味ですね。

 >2013/10/9を書式により「9」にしたものです。

     Set FR = ThisWorkbook.Worksheets("Sheet1") _
        .Range("B:H", "J:P").Find(Date, , xlFormulas, xlWhole, MatchCase:=False, MatchByte:=True)

 に変更して試して下さい。

 (ウッシ)

稲葉様

>>あくまで「書式変更」のみ・・・
そうだったのですね!勘違いごめんなさい。参考にさせていただきます!

>>開かないとブックが見られないのに、開いた日に色を付けたいとはどういう了見?

ウッシ様の
>>開いた日の履歴を保持したいという意味
これをいいたかったです。言葉に疎くて申し訳ないです・・・

>>特定のセルに日付を入れるコード組んで・・・
カレンダー以外の入力はできるだけ避けたいと思っています。
ご提案感謝です。

ウッシ様

>>変更して試して下さい
試してみたところ、うまくできました!
すっきりしました

お二人ともお時間たくさんいただいてしまってごめんなさい・・・
今後は清々しい気持ちで使えそうです

ご協力ありがとうございます!

(木葉)


コメント返信:

[ 一覧(最新更新順) ]


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