Excel97の全シート検索マクロの作成方法

このQ&Aのポイント
  • Excel97で全シート検索するマクロの作成方法を教えてください。住所録みたいな物である文字を全シートから半角・全角・大文字・小文字を区別せずに曖昧検索し、検索されたセルがある行に色を塗りつぶします。
  • もし色を塗りつぶすのが大変な場合は、検索されたセルがある行を選択することで色が変わり、検索結果がわかりやすくなるマクロを作成する方法を教えてください。
  • マクロを実行した際に、色が付くときと付かないとき、または「実行時エラー'1004':InteriorクラスのColorIndexプロパティを設定できません」というメッセージが表示される場合があります。これを解決するためにはどのようにすればよいですか?
回答を見る
  • ベストアンサー

Excel97で全シート検索のマクロを記述するには

住所録みたいな物である文字を全シートから半角,全角,大文字,小文字を区別する事なく曖昧検索し検索されたセルが有る一行に色を塗りつぶし、又次を検索したら一行に色を塗りつぶすようにするマクロを作成するにはどのようにしたらよいでしょうか? もし色を塗り潰すのが大変な場合は検索されたセルが有る行を選択する事によって色が変わり検索結果がわかりやすくなるマクロを作成するにはどのようにしたらよいでしょうか? 以下マクロを教えていただき実行したのですが、ちゃんと色が付く時と、ダメな時「実行時エラー'1004': InteriorクラスのColorIndexプロパティを設定できません」とメッセージが出る時が有ります。 検索対象は各シート10~12列、全30シート計3500行くらいになります。 自分のPCはWinXP,CPU:3.06GHz,メモリ:1GHzですが いろいろな機種みんなで使用したくCPU:1GHz,メモリ:256MBくらいでも使用出来たらと思います。宜しく御願いします。 Sub 検索color() s = InputBox("検索文字列=") If s = "" Then Exit Sub End If Dim sh As Worksheet For Each sh In ActiveWorkbook.Worksheets Set x = sh.Cells.Find(what:=s, MatchByte:=False) If x Is Nothing Then GoTo p1 b = sh.Name & x.Address sh.Activate x.Activate Rows(x.Row).Select Selection.Interior.ColorIndex = 36 x.Select '--- Do Set y = sh.Cells.FindNext(after:=ActiveCell) If y Is Nothing Then GoTo p1 If sh.Name & y.Address = b Then GoTo p1 y.Activate Rows(y.Row).Select Selection.Interior.ColorIndex = 36 y.Select Loop p1: Next End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.2

仕事が、忙しくなってきましたので、回答が遅れてしまいました。 プログラムの修正は、まだ、途中ですが 希望あれば、言ってください。 プログラムを完成させたいので、完成するまで、締切にしないでくだいい。 Sub 検索color() Dim sh As Worksheet Dim flt As AutoFilter S = InputBox("検索文字列=") If S = "" Then Exit Sub End If sh_Name = "" For Each sh In ActiveWorkbook.Worksheets ActiveSheet.UsedRange.Select hx = ActiveWindow.RangeSelection.EntireColumn.Count Vy = ActiveWindow.RangeSelection.EntireRow.Count Range("A1").Select Set x = sh.Cells.Find(what:=S, MatchByte:=False) If x Is Nothing Then GoTo p1 b = sh.Name & x.Address If sh.Name <> sh_Name Then sh_Name = sh.Name sh.Activate Columns("A:A").Offset(0, hx + 2).Select Selection.ClearContents For j = 1 To Vy Range("A1").Offset(j - 1, hx + 2) = 0 Next j Range("A1").Select End If sh.Activate x.Activate Rows(x.Row).Select Range("A1").Offset(x.Row - 1, hx + 2) = 1 x.Select Selection.Interior.ColorIndex = 36 Do Set y = sh.Cells.FindNext(after:=ActiveCell) If y Is Nothing Then Exit Do If sh.Name & y.Address = b Then Exit Do Rows(y.Row).Select Range("A1").Offset(y.Row - 1, hx + 2) = 1 Rows(y.Row).Select y.Activate y.Select Selection.Interior.ColorIndex = 36 Loop Range("A1:B1").Offset(0, hx + 2).Select Set flt = ActiveSheet.AutoFilter If flt Is Nothing Then Selection.AutoFilter End If Selection.AutoFilter Field:=1, Criteria1:="1" Range("A1").Select p1: Next End Sub Sub 初期に戻す() Dim sh As Worksheet Dim flt As AutoFilter sh_Name = "" For Each sh In ActiveWorkbook.Worksheets Set flt = ActiveSheet.AutoFilter If flt Is Nothing Then ' 何もしない Else ' AutoFilter を解除する Selection.AutoFilter End If ActiveSheet.UsedRange.Select hx = ActiveWindow.RangeSelection.EntireColumn.Count Vy = ActiveWindow.RangeSelection.EntireRow.Count Range("A1").Select Cells.Select Selection.Interior.ColorIndex = xlNone Range("A1").Select If sh.Name <> sh_Name Then sh_Name = sh.Name sh.Activate Columns("A:A").Offset(0, hx - 1).Select Selection.ClearContents Range("A1").Select End If sh.Activate Next End Sub

qq4w2299
質問者

お礼

書き込み有難う御座いました。 記述いただきましたマクロ試させていただいたのですが 大文字小文字区別なく検索したいのですがうまく検索できず 検索結果の前の行以前が非表示になってしまいます。 宜しく御願いします。

その他の回答 (7)

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.8

補足説明です。 Application.ScreenUpdating = False Application.ScreenUpdating = True  上(2行)をコメント行にすると 目まぐるしく シートが、選択され 最後のシートが、開きぱなしになります。 Application.ScreenUpdating = False 上のコードは、マクロの処理を見せない為の コードです。 Application.ScreenUpdating = True 上のコードは、マクロの処理を見せない為の コードを解除するコードです。 上記2個は、マクロの高速化を図るためのコードです。 Sheets(Ops).Select は、最後に 開いていたシートに戻す コードです。 必要なければ、ここも コメント行にします。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.7

1.着色されるのですが検索されたシートへ飛びません。元のシート画面のままです。 2.上書き保存しないで閉じても、次回開くと前回の検索結果で着色されたままで保存されてしまいます。 回答です。 1.に関しては、たとえば、検索結果該当するものが、複数のシートであったら あなたは、どうしたいのですか?。 最初のシートで、検索を中止して終われば、良いのでしょうか?。 あなたは、どのように考えているかは、分かりません。少なからずあなたは、VBAをご存じなのだから 何も、かにも、やってもらえると思わず、ご自分で 考えてください。 そもそも、全30シートもあるなんで、メモリーの無駄使いです。 だから、探しにくいのです。そして、エクセルの仕様の問題でエラーになるのですよ。ここらへんは、あなたも。自覚しているのでは、??。 3500行くらいなら、1シートに、すべて 書き込みが、出来ます。 また、検索結果は、先のオートフィルタを使用すれば、簡単に分かります。 あなたは、それを拒否しましたがね。(笑) 2.に関しては、そのような処理(上書き保存)は、しておりません。  また、再現もしません。[ 疑うなら、コードを 調べてください。]  あなたは、自動保存をするように設定しているのでしょう。 だったら、自動保存をしないように 設定を変えるべきです。

qq4w2299
質問者

お礼

書込み有難う御座いました。 >検索結果該当するものが、複数のシートであったら あなたは、どうしたいのですか?。 につきましては最初の質問で書かせていただきましたが、検索されたセルが有る一行に色を塗りつぶし、又次を検索したら一行に色を塗りつぶすようにしたかったのです。もしくは検索されたセルが有る行を選択する事によって色が変わり検索結果がわかりやすくし又次の検索候補を選択した時に同じ様に行全体を選択状態にしわかりやすくしたかったのです。それは最初から変わりません。 マクロについては初心者なのですがもしこのような事が出来てみんなに使いやすいファイルとする事が出来ればと思い質問させていただきました。 >そもそも、全30シートもあるなんで、メモリーの無駄使いです。 だから、探しにくいのです。そして、エクセルの仕様の問題でエラーになるのですよ につきましては「希望あれば、言ってください」と言っていただいたので御言葉に甘えて書込みさせていただきました。希望仕様がデータ数、バージョン等で無理なようなのであきらめます。 >2.上書き保存しないで閉じても、次回開くと前回の検索結果で着色されたままで保存 の件につきましては、試させていただいた時の閉じ方が誤っていたのか今やってみると再現しませんでした。自動保存はしていないのですが。大変申し訳御座いませんでした。 これ以上は御迷惑になるみたいですので明日締め切りとさせていただきます。いろいろアドバイスいただき有難う御座いました。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.6

これで、どうですか??。 'Option Explicit Const My_Color As Integer = 36 Dim sh As Worksheet Dim myR As Range Dim mV As Integer Dim Ops As String Sub 検索color_999() S = InputBox("検索文字列=") If S = "" Then Exit Sub End If Ops = ActiveSheet.Name Application.ScreenUpdating = False Sheets_Count = Application.Sheets.Count For n = 1 To Sheets_Count Sheets(n).Select ActiveSheet.UsedRange.Select Hx = ActiveWindow.RangeSelection.EntireColumn.Count Range("A1").Select Set myR = Range(Cells(1, 1), Cells(1, Hx - 1)) Set x = ActiveSheet.Cells.Find(what:=S, MatchByte:=False) If x Is Nothing Then GoTo p1 b = ActiveSheet.Name & x.Address x.Activate mV = Selection.Row myR.Offset(mV - 1, 0).Select Selection.Interior.ColorIndex = My_Color x.Select '--- Do Set y = ActiveSheet.Cells.FindNext(after:=ActiveCell) If y Is Nothing Then GoTo p1 If ActiveSheet.Name & y.Address = b Then GoTo p1 y.Activate mV = Selection.Row myR.Offset(mV - 1, 0).Select Selection.Interior.ColorIndex = My_Color y.Select Loop p1: Range("A1").Select Next n Application.ScreenUpdating = True Sheets(Ops).Select MsgBox "検索が終了しました。", vbOKOnly End Sub コメント; < For Each sh In ActiveWorkbook.Worksheetsを入れて見たのですが > に関して 先のものは、 For next は、使用していないので、当然エラーになります。 下記 URL から 繰り返し処理(For~Next、Do~Loop)  を勉強して ください。

参考URL:
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/
qq4w2299
質問者

お礼

度々恐れ入ります。 1.着色されるのですが検索されたシートへ飛びません。元のシート画面のままです。 2.上書き保存しないで閉じても、次回開くと前回の検索結果で着色されたままで保存されてしまいます。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.5

これで、よいですか??。 これだと 1シート だけの検索になりますが??。 'Option Explicit Const My_Color As Integer = 36 Sub 検索color_TEST() S = InputBox("検索文字列=") If S = "" Then Exit Sub End If Dim sh As Worksheet Set x = ActiveSheet.Cells.Find(what:=S, MatchByte:=False) If x Is Nothing Then GoTo p1 b = ActiveSheet.Name & x.Address x.Activate Rows(x.Row).Select Selection.Interior.ColorIndex = My_Color x.Select '--- Do Set y = ActiveSheet.Cells.FindNext(after:=ActiveCell) If y Is Nothing Then GoTo p1 If ActiveSheet.Name & y.Address = b Then GoTo p1 y.Activate Rows(y.Row).Select Selection.Interior.ColorIndex = My_Color y.Select Loop p1: ' Next End Sub

qq4w2299
質問者

お礼

書込み有難う御座いました。 1シートだけであればこれで良いのですがやはり約30シートの検索になります。 上記 Dim sh As Worksheet の後に For Each sh In ActiveWorkbook.Worksheets を入れて見たのですが 「コンパイルエラー Forに対するNextがありません」とエラーメッセージが出てしまいます。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.4

< 検索出来ませんでした > ????? 使用の問題を回避する為に、検索出来た、セルのみに着色しています。 行全体には、着色していません。 いま、MEでも 試験しましたが、ちゃんと 検索出来ています。 どうしても、ダメな場合は、一行めから 3行目までの データを送ってください。 もちろん、さしさわりのない 部分でよいです。 待っています。

qq4w2299
質問者

お礼

昨日の時点ではわからなかったのですが、今わかりましたが確かに検索結果に着色されている時も有ったり検索事態されていなかったりです。 着色されている時はグルグルーットっとブック内を回って最後のシートの画面で止まってしまうので着色されていたのがわかりませんでした。 検索結果が有ったシートの画面を表示したいのです。 恐れ入りますが希望と違う点を以下率直に記載させていただきます。 宜しく御願いします。 1.グルグルーットっと検索でなくCtrl+Fで検索する時のように検索結果に瞬時に飛びたい。 2.現状検索されたセルのみに着色されていますが行全体を着色したい。それが無理な場合行選択し、あたかも着色されているかのように検索行がはっきりわかるようにしたい。 >どうしても、ダメな場合は、一行めから 3行目までの データを>送ってください。 の件はどちらへどうやって送っていいのかわからないのですが以下の感じです。(具体的には書けなくあくまでも例ですが) シート1   A列  B列   C列 1 社名あ 部署あ 氏名あ 2 社名い 部署い 氏名い 3 社名う 部署う 氏名う        ・        ・        ・ シート2以降同様にシート30迄です。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.3

一応完成しました。 テストをして 不具合をレポートしてください。 ' 下記 コードを ThisWorkbookに書き込む または、コピペします。 Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) On Error Resume Next Set flt = ActiveSheet.AutoFilter Range("A1:B1").Offset(0, SetCeii).Select If flt Is Nothing Then Selection.AutoFilter Else ' AutoFilter を解除する Selection.AutoFilter Range("A1").Select End End If Selection.AutoFilter Field:=1, Criteria1:="1" Range("A1").Select End Sub '********** 以下は、標準モジュールに書き込み まは、コピペします。 ' 使用方法 ' ' 検索するときは、検索color を実行します。 ' 検索された セルのみに、着色 されます。 ' 色を変更する場合、Public Const My_Color As Integer = 36 の数字を変更します。 ' 検索された行だけを、表示したい時は、そのシートで、ダブルクリックします。 ' すると オートフィルタが、かかり その部分だけ(一行目から データが、入っている場合は、一行目も)表示されます。 ' 着色をすべて なし にする場合は、初期に戻す を実行します。 ' ダブルクリックで、そのシートだけ オートフィルタを 解除することも できます。 ' ' オートフィルタの条件は、現在 31 列目( AE列 )に 設定されています。 ' もし、この列に データが、ある場合は、Public Const SetCeii As Integer = 30 の数字を変更します。 Public Const SetCeii As Integer = 30 Public Const My_Color As Integer = 36 Dim flt As AutoFilter Dim Sh As Worksheet Sub 検索color() S = InputBox("検索文字列=") If S = "" Then Exit Sub End If sh_Name = "" On Error Resume Next For Each Sh In ActiveWorkbook.Worksheets Sh.Activate Set flt = ActiveSheet.AutoFilter If flt Is Nothing Then Else Selection.AutoFilter End If ActiveSheet.UsedRange.Select Vy = ActiveWindow.RangeSelection.EntireRow.Count Range("A1").Select Set x = Sh.Cells.Find(what:=S, MatchByte:=False) b = Sh.Name & x.Address x.Activate If x Is Nothing Then GoTo p1 If Sh.Name <> sh_Name Then sh_Name = Sh.Name Columns("A:A").Offset(0, SetCeii + 2).Select Selection.ClearContents For j = 1 To Vy + 1 Range("A1").Offset(j - 1, SetCeii) = 0 Next j Range("A1").Select End If Rows(x.Row).Select Range("A1").Offset(x.Row - 1, SetCeii) = 1 x.Select Selection.Interior.ColorIndex = My_Color Do Set y = Sh.Cells.FindNext(after:=ActiveCell) If y Is Nothing Then Exit Do If Sh.Name & y.Address = b Then Exit Do Rows(y.Row).Select Range("A1").Offset(y.Row - 1, SetCeii) = 1 Rows(y.Row).Select y.Activate y.Select Selection.Interior.ColorIndex = My_Color Loop ' ' 下記コードは、エクセルの仕様の問題が、発生しそうなので、コメント行にしています。 ' 解除して 問題あれば、元に(コメント行)戻してください。 ' ' Range("A1:B1").Offset(0, SetCeii + 2).Select ' Selection.AutoFilter ' Selection.AutoFilter Field:=1, Criteria1:="1" Range("A1").Select p1: Next End Sub Sub 初期に戻す() Worksheets_Cunt = Application.Worksheets.Count For N = 1 To Worksheets_Cunt Worksheets(N).Activate Set flt = ActiveSheet.AutoFilter If flt Is Nothing Then ' 何もしない Else ' AutoFilter を解除する Selection.AutoFilter End If ActiveSheet.UsedRange.Select Vy = ActiveWindow.RangeSelection.EntireRow.Count Cells.Select Selection.Interior.ColorIndex = xlNone Columns("A:A").Offset(0, SetCeii).Select Selection.ClearContents Range("A1").Select Set flt = Nothing Next N End Sub

qq4w2299
質問者

お礼

書き込み有難う御座ます。 せっかく書いていただいたのですが「ThisWorkbookにコピペ」&「標準モジュールにコピペ」させていただきましたが、グルグルーット、ブック内を回ったけど検索出来ませんでした。 「着色をすべてなしにする場合は、初期に戻す」は、元々タイトル行等に色を付けている部分が有るので今回は使用しない予定です。これを実行すると全てのセルの色が無くなってしまうみたいなので。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.1

これは、Excel の仕様および制限 によるもので、プログラムの問題では、ありません。  < Excel97で、試してみました。> 再現出来ます。 各シート10~12列、全30シート計3500行位 なら 十分にエラーになりますよ。 Excelのバージョンアップをお勧めします。

qq4w2299
質問者

お礼

書き込み有難う御座いました。 行の色を塗り潰さず、検索結果のセルに飛ぶだけであればエラーもなく問題ないのですが。 検索されたセルが有る行を選択する事によって色が変わったように見えるようにした場合もやはりエラーになりますでしょうか? この方法ならもし大丈夫で有ればどのように記述したらよいでしょうか?宜しく御願いします。

関連するQ&A

  • 検索マクロ修正

    ある文字を全シートから検索するマクロをこちらのサイトで以下マクロを拝見しました。 これでほぼいいのですが以下を修正するにはどうしたら宜しいでしょうか?宜しく御願いします。 (1)検索したセルに飛ぶ前にセル番地が表示されるのを無くしたい。 (2)検索結果が複数有る場合、全セルに飛んでからでないと終了出来ない。砂時計が表示されたまま。 (3)(2)と同様、間違って空白のまま検索ボタン押してしまうと永遠に終了出来ない。 Sub test01() s = InputBox("検索文字列=") Dim sh As Worksheet For Each sh In ActiveWorkbook.Worksheets Set x = sh.Cells.Find(what:=s) If x Is Nothing Then GoTo p1 MsgBox sh.Name & x.Address b = sh.Name & x.Address sh.Activate x.Activate '--- Do Set y = sh.Cells.FindNext(after:=ActiveCell) If y Is Nothing Then GoTo p1 If sh.Name & y.Address = b Then GoTo p1 MsgBox sh.Name & y.Address y.Activate Loop p1: Next End Sub

  • マクロの簡素化

    下記マクロです。 Range("AE6:AE1005").Select Selection.ClearContents Selection.Interior.ColorIndex = xlNone If Range("AD6").Value > 5 Then Range("AE6") = "*" Range("AE6").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD7").Value > 5 Then Range("AE7") = "*" Range("AE7").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD8").Value > 5 Then Range("AE8") = "*" Range("AE8").Select With Selection.Interior .ColorIndex = 3 End With Else End If 中略(セルを一個づつ指定しています) If Range("AD1004").Value > 5 Then Range("AE1004") = "*" Range("AE1004").Select With Selection.Interior .ColorIndex = 3 End With End If If Range("AD1005").Value > 5 Then Range("AE1005") = "*" Range("AE1005").Select With Selection.Interior .ColorIndex = 3 End With Else End If Range("AE3").Select 有るセルを参照しその値が5以上だったら別のセルに*マークとセルに色を付けるマクロですが、一個づつセル指定をしていますが、何とか短く出来ないでしょうか? お分かりになる方宜しくお願い致します。

  • エクセルVBAで、文字列の検索方法について

    先日、こちらで教えていただいたVBAがあります。 E列のセルの文字列の末尾が「計」のものを検索し、その行に色をつけるものです。 Sub iroiro() Dim x, y x = 1 Do If Right(Cells(x, 5), 1) = "計" Then For i = 2 To 5 Cells(x, i).Interior.ColorIndex = 3 Next End If x = x + 1 Loop Until Right(Cells(x, 5), 1) = "" End Sub これはばっちりで、助かっているのですが、今度は末尾ではなく、文字列中に「営業」という文字があるのを検索し、色をつけたいのです。 If Right(Cells(x, 5), 1) = "計" Thenを どう変えればいいのでしょうか?

  • エクセル マクロ 複数セルの色付けについて

    マクロ初心者で苦戦しており、教えていただけると大変ありがたいです。 エクセルの複数のシートに、問2_1 、問2_2 、問2_10 (全部で問は2_28まであります)等の文字列があり、その文字に合わせて、そのセルだけ色を付けたいと考えております。 今書いているコードだと、ワークシートのA列にある場合は色が付けられるのですが、それ以外に色が付けられません。どこが間違っているでしょうか? どうぞご指導お願いいたします。 Sub 色つけ() Dim Maxrow As Long Dim i As Long Maxrow = Cells(Rows.Count, i).End(xlUp).Row For i = 1 To Maxrow If InStr(Cells(i, 1), "2_1 ") > 0 Then Cells(i, 1).Interior.ColorIndex = 6 If InStr(Cells(i, 1), "2_2 ") > 0 Then Cells(i, 1).Interior.ColorIndex = 6 If InStr(Cells(i, 1), "2_23 ") > 0 Then Cells(i, 1).Interior.ColorIndex = 23 If InStr(Cells(i, 1), "2_13 ") > 0 Then Cells(i, 1).Interior.ColorIndex = 4 If InStr(Cells(i, 1), "2_6 ") > 0 Then Cells(i, 1).Interior.ColorIndex = 7 Next i End Sub

  • 全シート検索マクロで終了メッセージを表示したい

    いつも申し訳ありませんが またExcelのマクロについて質問させてください。 検索対象 = InputBox("検索文字列を入力してください") For Each シート In ActiveWorkbook.Worksheets Set セル = シート.Cells.Find(what:=検索対象) If セル Is Nothing Then GoTo 該当なし MsgBox "次を検索します" 対象シート = シート.Name & セル.Address シート.Activate セル.Activate Do Set セル = シート.Cells.FindNext(after:=ActiveCell) If セル Is Nothing Then GoTo 該当なし If シート.Name & セル.Address = 対象シート Then GoTo 該当なし MsgBox "次を検索します" セル.Activate Loop 該当なし: Next これにより、全シートを対象に 検索が実行できるようにしています。 ただ、検索が終了したときに その旨のメッセージを表示させようと思い いろいろ試してみたのですが 結局、どこに置けばよいのか 分かりませんでした。 あと、一番初めの表示が 「次を検索します」というのも おかしいかな、と思ったのですが これについても 適切な対応方法は見つかりませんでした。 マクロにお詳しい方には簡単なことなのでしょうが いまだに初心者の私には無理のようです。 申し訳ありませんが 回答をよろしくお願いいたします。

  • エクセル マクロ 検索

    お世話になります。 範囲がA2からK221までの表があります。 検索して検索されたセルの左のセルを表示するマクロを組みたいのですが、検索する文字(数値)はE1に、検索結果はK1に表示するようにするにはどのようにしたらいいでしょうか? Sub FIND_DATA1() ' FIND_DATA1 Macro ' マクロ記録日 : 2006/9/1 ユーザー名 : ' Cells.Find(What:=Range("E1").Value, After:=ActiveCell, lookAt:=xlWhole).Activate End Sub Sub Data_Find3() Dim 対象セル As Range Dim 最初のセル番地 As String Dim 検索件数 As Long Cells.Interior.ColorIndex = xlNone If Range("E1").Value = "" Then Exit Sub End If Set 対象セル = Cells.Find(What:=Range("E1").Value, After:=ActiveCell, lookAt:=xlWhole) 最初のセル番地 = 対象セル.Address Do 対象セル.Interior.ColorIndex = 37 検索件数 = 検索件数 + 1 Set 対象セル = Cells.FindNext(対象セル) Loop While 対象セル.Address <> 最初のセル番地 MsgBox "検索件数は" & 検索件数 - 1 & " 件です" End Sub 本を見たり調べたりでここまでできたんですがこれだと検索件数、検索結果が色付きになるだけで使い勝手がいまいちです。 よろしくお願いします。

  • イベントマクロについて

    イベントマクロについて質問ですが まず、下記をご覧下さい。 過去にここで回答いただいたものを流用させてもらったものですが もうひとつ機能を追加したいと思います。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column >= 4 And Target.Column <= 34 Then If Target.Row >= 2 And Target.Row <= 100 Then Select Case Target Case "(5)GC" Target.Interior.ColorIndex = 34 Target.Font.ColorIndex = 0 Case "6OS", "6FC" Target.Interior.ColorIndex = 6 Target.Font.ColorIndex = 0 Case "(6)TA", "(6)C" Target.Interior.ColorIndex = 46 Target.Font.ColorIndex = 0 Case "6@BD", "6@C" Target.Interior.ColorIndex = 38 Target.Font.ColorIndex = 0 End Select End If End If End Sub 追加する機能とは、上記で指定した範囲以外のセルを参照して 色を付けるかどうかを区別するものです。 例えば、A2の値が色付けに該当する場合はD2からAH2の中で上記マクロに該当するセルに色を付け、もしA2が該当しない場合は色付けをしない というような感じです。 よろしくお願いします。

  • マクロのコーディング

    すいません、下のコード(マクロなんですが)同じ処理を4回も繰り返しているので、(入りきらないので、2回にしました)ひとつにまとめたいです。どうすればいいでしょうか?教えて下さい。 '●業務番号チェック 'エラー時は青 If Range("H39:I39").Select <> "" Then If .Cells(43, 5).Value = "" Then Total_Check_Flg = True '色付の範囲の設定 Range("A43:B43").Select 'セルの色の設定(青) With Selection.Interior .ColorIndex = 41 End With Err_Kazu_4 = Err_Kazu_4 + 1 End If End If If Range("K39:L39").Select <> "" Then If .Cells(44, 5).Value = "" Then Total_Check_Flg = True '色付の範囲の設定 Range("A44:B44").Select 'セルの色の設定(青) With Selection.Interior .ColorIndex = 41 End With Err_Kazu_4 = Err_Kazu_4 + 1 End If

  • エクセルVBAで複数シートにマクロ実行

    エクセル2000です。 Sub 行列非表示() For i = 2 To 120 If Cells(i, "A").Interior.ColorIndex = 3 Then Cells(i, "A").EntireRow.Hidden = True End If Next i For n = 1 To 50 If Cells(1, n).Interior.ColorIndex = 3 Then Cells(1, n).EntireColumn.Hidden = True End If Next n End Sub 上記マクロを、シートAAAとCCCとEEEに実行する場合、 Sub test() Sheets("AAA").Activate Call 行列非表示 Sheets("CCC").Activate Call 行列非表示 Sheets("EEE").Activate Call 行列非表示 End Sub と書くよりももっとすっきり実行する方法は無いでしょうか? 各シートの非表示対象の行や列はそれぞれことなります。 また Sub 行列非表示 自体も、もっと効率的にやる方法はないでしょうか?

  • エクセルマクロ セルの色つけ

    エクセルのマクロです。 条件で複数セルに色をつけたいのですが以下の方法しかないですか。 もっと多くのセルに一度に色を付ける良い方法がありましたら教えて下さい。 If days = "日" Then With Cells(i, 2).Interior .ColorIndex = 3 .Pattern = xlSolid End With With Cells(i, 13).Interior .ColorIndex = 3 .Pattern = xlSolid End With End If 以上 お願いします。

専門家に質問してみよう