[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA Find_Range 関数について』(木葉)
毎度お世話になっております。
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自体が記述されてないと当然呼び出しエラーになります。
(カリーニン)
一応見つけたので (稲葉)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)
どのブックのどのシートのセル範囲を探すか指定してこう変更するだけでも動きそうです。
(ウッシ)
・・・質問の答えになっていますでしょうか
ご回答ありがとうございます!
・・・ウィルスバスターさんに止められてしまい、開けませんでした・・・せっかく見つけていただいたのにごめんなさい・・・
実行してみたところ、エラーは出なくなったのですが、何の変化もありませんでした。
他に問題になるような部分があるのでしょうか・・・
エラーが出なくなったので問題の部分が全く分からないです・・・
(木葉)
転載していいのかな・・・?
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.