• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 特定もセルに入力で実行)

VBA特性もセルに入力で実行

このQ&Aのポイント
  • VBA特定のセルに値を入力したときに、実行されるコードの一部でエラーが発生しています。また、セルのカーソル表示が消える現象も起きています。初心者のため、修正方法を教えてください。
  • VBAを使用して特定のセルに値が入力されたときに実行されるコードで、エラーが発生しています。また、セルのカーソルが消える現象が起きています。初心者なので、どのように修正すればいいか教えてください。
  • VBAで特定のセルに値が入力されたときに実行されるコードの一部でエラーが発生しています。また、セルのカーソル表示が消えてしまう現象も起きます。初心者ですので、どうすれば修正できるかアドバイスをいただきたいです。

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

  • ベストアンサー
回答No.1

なんとなく、よくわからないのでヒントだけでも。 > 入力後エンターキーを押すとアクティブセルは下に下がってしまう > Set FoundCell = SearchArea.Find(What:=ActiveCell.Offset(0, -1), Offsetは、   レンジ.Offset(行方向, 列方向) ですよ。 特定のセル(範囲)が変更された時だけ動かしたいなら Private Sub Worksheet_Change(ByVal Target As Range)   If Intersect(Target, Range("A1:B1")) Is Nothing Then     ’ 範囲外の時     Exit Sub   Else     ' 範囲内の時     Target.Select   End If End Sub としてやればできそうな気がします。 別のモジュールを呼び出したいときは、 Target を Public変数に入れておくのも手段の一つです。 Public myRange As Range Private Sub Worksheet_Change(ByVal Target As Range)   Set myRange = Target   Call PaintTargetCharacter End Sub こんな感じで。 コレでOffsetを使わずに処理を進められます。 当然、組み合わせてもOK。 ということで、まずはヒントだけどうぞ。

yyrd0421
質問者

補足

ありがとうございます。頂いたコードをもとに下記のようにやってみましたが、機能しませんでした。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Intersect(Target, Range("B9")) Is Nothing Then ' 範囲外の時 Exit Sub Else Set myRange = Target.Offset(0, -1) ' 範囲内の時 Target.Select Call PaintTargetCharacter End If End Sub Sub PaintTargetCharacter() Dim FoundCell As Range, FoundCell2 As Range Dim Addr As String Dim Addr2 As String Dim SearchArea As Range Dim SearchArea2 As Range Application.ScreenUpdating = False ActiveCell.Interior.ColorIndex = 0 '検索対象範囲 Set SearchArea = Worksheets("G番情報").Range("AE6:BG6") '検索実行 Set FoundCell = SearchArea.Find(What:=myRange, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) '検索文字列を含むセルがない場合は終了 If FoundCell Is Nothing Then Exit Sub Set SearchArea2 = Range(FoundCell.Offset(0, 0), FoundCell.Offset(33, 0)) Set FoundCell2 = SearchArea2.Find(What:=ActiveCell, LookIn:=xlValues, _ LookAt:=xlPart, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False) If FoundCell2 Is Nothing Then Exit Sub FoundCell2.Copy Destination:=ActiveCell Application.ScreenUpdating = True End Sub

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.2

ざっくりとしかコードを見ていませんが Worksheet_Change イベントで PaintTargetCharacter を呼び出し PaintTargetCharacter の処理の中で FoundCell2.Copy Destination:=ActiveCell を実行しているので、 いくつかのExit Sub にヒットしなかった場合、 (タブン、検索でヒットしたとき)に ループに陥るんじゃないかと思います。 そもそもどのような処理をしたいのかと シート構成、 更に提示されたコードをどのモジュールに配置しているのか これらを説明し、 シートのイメージを提示してくれれば もう少し突っ込んだコメントができるだろうと思います。

yyrd0421
質問者

補足

画像を追加致しました。 ご覧頂いてアドバイスをもらえたらと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 「実行時424 オブジェクトが必要です」が出ます

    全く理解できていない初心者です。 あるサイトで見つけたマクロです。 「検索結果のセルをすべて選択する」 Sub SelectTargets() Dim Target As String Dim FoundCell As Range, SearchArea As Range Dim Addr As String Dim FoundAddr() As String Dim i As Long Target = Application.InputBox("検索文字列入力", "検索", Type:=2) If Target = "False" Then Exit Sub Set SearchArea = ActiveSheet.UsedRange * Set FoundCell = SearchArea.Find(what:=Target, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) If FoundCell Is Nothing Then Exit Sub Addr = FoundCell.Address Do ReDim Preserve FoundAddr(i) '配列の内容を維持したまま再宣言 FoundAddr(i) = FoundCell.Address '検索結果のアドレスを配列に格納 Set FoundCell = SearchArea.FindNext(After:=FoundCell) i = i + 1 If FoundCell Is Nothing Then Exit Do Loop Until FoundCell.Address = Addr '配列に格納されたアドレスをカンマ区切りで結合し、セル範囲を一括選択 Range(Join(FoundAddr, ",")).Select '---(1) End Sub ↑家のエクセル(2010)では完璧でできるのですが、会社のエクセル(2003)では、「実行時424 オブジェクトが必要です」とエラーメッセージが出ます。 コードの入力ミスがありました。 上から2行目  Dim foundcell As Range, sercharea( 正 seacharea)As Range 後は、入力ミスはなさそうなのですが、実行キーを押すと 「実行時424 オブジェクトが必要で」と出ます。 黄色のマーカーが出るのが、*印を置いた ↓に出ます。 Set FoundCell = SearchArea.Find(what:=Target, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) 後、気になるのがコードを入力して 「target」「searcharea」「foundcell」「foundaddr」「addr」などが頭文字が大文字になりません。 無理やり大文字にしてみたりしましたが… 「オブジェクトが必要です」に関係あるのかないのかも分かりませんが、なぜ、エラーが出てしまうのか? 入力ミスが原因なのか? 何が足りないのか?何か不要なコードがあるのか? どの用意すればいいのか教えていただけませんか? よろしくお願いします。

  • Excel VBA Findで日付だけのセルが検索できない

    日付のセルを検索するために、以下のような処理をさせていますが、日付だけのセルが検索できません。  【例】(1)は検索できますが、(2)が検索されません。    (1) 2010/03/05が誕生日    (2) 2010/03/05    (※(1)、(2)共に検索できるようにしたいと思っています。) Dim FoundCell as Variant Dim search_words as String search_words = "20??/*/" Set FoundCell = Cells.Find(what:=search_words,After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False) ※Excel2003を使用しています。

  • 重複データーの上書き

    行き詰っています。 よろしくお願いします。 下の構文では、 エラー:オブジェクトは、このプロパティまたはメソッドをサポートしていません と、表示されます。 ”コンボボックス1のデーターと重複しているセル(B2:B50)を探してその行の データーを上書きしたいのです” Private Sub CommandButton1_Click() Dim Mynumber As String Dim FoundCell As Range Sheets("AA").Range("B2:B50").Select Mynumber = ユーザーフォーム.コンボボックス1.Value Set FoundCell = Cells.Find(What:=Mynumber, After:=ActiveCell, _ LookIn:=xlFormulas, LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, MatchCase:=False, _ MatchByte:=False) If FoundCell Is Nothing = False Then FoundCell.Select Sheets("AA").Offset(0, 0).Select = Me.コンボボックス1.Value Sheets("AA").Offset(0, 1).Select = Me.テキストボックス1.Value Sheets("AA").Offset(0, 2).Select = Me.テキストボックス2.Value Sheets("AA").Offset(0, 3).Select = Me.テキストボックス3.Value End If Exit Sub End Sub

  • EXCEL マクロでの検索をお教えください

     下記のようなマクロを使いたいのですがこの場合×があるときは良いのですが、  無いときエラーが出ます。どの様にすれば良いのかお教えください。  無いときエラーは オブジェクト変数または With ブロック変数が設定されていません。  となります。 Sub 検索()    Range("K12:K70").Select    Cells.Find(What:="×", After:=ActiveCell, LookIn:= _    xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _    xlNext, MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate End Sub

  • [VBA]変数を利用して時間を検索する方法が・・・

    エクセルで表示形式が「hh:mm:ss」に設定されているセルの中から 指定のセルを検索するマクロを作ろうとしているのですが、 上手くいきません。 検索する数字を変数にして変えられるようにしたいです。 Sub Macro1() Dim temp As Double temp = Range("A1").Value 'A1には0:00:01を入れる Cells.Find(What:=temp, After:=ActiveCell, LookIn:=xlValues, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate End Sub 上の記述だと、実行時エラー91「オブジェクト変数またはWithブロック・・・」が出ます。 > temp = "0:00:01" これに書き替えると「型が違います。」になり、「""」をはずすとコンパイルエラーになります。 「What:="0:00:01"」というように、直接入れると上手くいきます。 どなたか、お力をお貸しください。 よろしくお願いします。

  • Union メソッド ?

    いつもこちらでお世話になっております。 全くのど素人で申し訳ありません。 会社でエクセル2003を使用しています。 データを一括検索したく、あるサイトでこのマクロを見つけました。 「検索結果のセルをすべて選択する」 Sub SelectTargets() Dim Target As String Dim FoundCell As Range, SearchArea As Range Dim Addr As String Dim FoundAddr() As String Dim i As Long Target = Application.InputBox("検索文字列入力", "検索", Type:=2) If Target = "False" Then Exit Sub Set SearchArea = ActiveSheet.UsedRange Set FoundCell = SearchArea.Find(what:=Target, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) If FoundCell Is Nothing Then Exit Sub Addr = FoundCell.Address Do ReDim Preserve FoundAddr(i) '配列の内容を維持したまま再宣言 FoundAddr(i) = FoundCell.Address '検索結果のアドレスを配列に格納 Set FoundCell = SearchArea.FindNext(After:=FoundCell) i = i + 1 If FoundCell Is Nothing Then Exit Do Loop Until FoundCell.Address = Addr '配列に格納されたアドレスをカンマ区切りで結合し、セル範囲を一括選択 Range(Join(FoundAddr, ",")).Select '---(1) End Sub 補足として Rangeプロパティの引数に指定する文字列には文字数制限があるため、検索対象のセルが多いと(1)でエラーが発生します。その場合はUnionメソッドを使用して対象セルを選択すると良いでしょう。 と、補記があり調べてみると「変数Targetの文字数が255を超えたとき」エラーとなるとのこと。 「Union メソッド」をいろいろ調べて試してみたのですが… やはり、さっぱり全くできません。 ご教授いただけませんでしょうか?

  • Find関数内にFind関数をかける場合

    エラー91が発生し、手詰まりです。 どなたかご教授お願いいたします。 Find関数でDo~lppoを行い、初期の検索結果アドレスでLoopを抜けようと思ったのですが。。 エラーしてしまいました。 Find関数内にFind関数を用いることが出来ない と目にしたのですが。 下記のようなVBAの場合 どのように対処したらいいでしょうか? また、VBA初心者のため VBA文が見づらかったり、おかしなところがあると思います。 その部分についても教えて頂けたらと思います。 Sub SAMPLE() Dim TargetDE As String '文字列型 Dim TargetNo As String '文字列型 Dim PODate As String '文字列型 Dim FoundCell As Range ' Dim FoundDate As Range Dim FoundCellNo As Long '長整数型 Dim FoundDateNo As String Dim SearchArea As Object 'オブジェクト型 Dim tar_obj(1) As Object 'オブジェクト型 Dim Addr As String '文字列型 Dim Lastrom As Long ' Dim POLEFT As Range '検索文字列入力(DE) TargetDE = Application.InputBox("Fill in a DE:??", "DE:??", Type:=2) If TargetDE = "False" Then Exit Sub '検索対象範囲 Set SearchArea = Workbooks("Sample sample.xlsx").Sheets("Sample") Set tar_obj(1) = Workbooks("INPUT FORMAT.csv").Sheets("INPUT FORMAT") '表示先をクリア tar_obj(1).Cells(1, 1).CurrentRegion.ClearContents '検索実行 Set FoundCell = SearchArea.Range("C:C").Find(What:=TargetDE, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) '検索文字列(DE)を含むセルがない場合は終了 If FoundCell Is Nothing Then Exit Sub '検索文字列入力(DE Number) TargetNo = Application.InputBox("Fill in DE nomber", "Nomber", Type:=2) If TargetNo = "False" Then Exit Sub '最初の検索結果の行数を格納 Addr = FoundCell.Address '検索文字列入力(PO Date) PODate = Application.InputBox("Fill in Sample Date", "Date", Type:=2) If PODate = "False" Then Exit Sub Do '検索Cell右横の値がTargetNoと同じ場合 If FoundCell.Offset(0, 1).Value = TargetNo Then '行番号を代入 FoundCellNo = FoundCell.Row '検索の下限値を変数に代入 F_LAST = FoundCellNo + 50 '検索実行 Set FoundDate = SearchArea.Range(SearchArea.Cells(FoundCellNo, 1), SearchArea.Cells(F_LAST, 1)).Find(What:=PODate, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) '検索文字列を含むセルがない場合は終了 If FoundDate Is Nothing Then 'MsgBox "Find is mistake" '検索文字列を含むセルがある場合 Else '変数に行番号代入 FoundDateNo = FoundDate.Row If FoundDate.Offset(1, 1).Value = "" Then MsgBox "The position of the cell is not correct. Please coordinate macro. " Else POLEFT = FoundDate.Offset(1, 1) For i = 2 To 13 If FoundDate.Offset(1, i) <> 0 Then If FoundDate.Offset(1, i) <> "." Then If IsNumeric(FoundDate.Offset(1, i).Value) = True Then '表示先(INPUT FORMAT)の行数をカウントアップ cnt = cnt + 1 PORIGHT = FoundDate.Offset(1, i).Value tar_obj(1).Range("E" & cnt) = POLEFT & PORIGHT End If End If End If Next i End If End If ElseIf FoundCell.Offset(0, 1) <> TargetNo Then ' MsgBox "Find is mistake" End If '次の検索を実行 Set FoundCell = SearchArea.Range("C:C").FindNext(After:=FoundCell) Loop While Not FoundCell Is Nothing And FoundCell.Address <> Addr ' If FoundCell.Offset(0, 1) <> TargetNo Then ' MsgBox "Not Find Number" ' End If End Sub

  • エクセルVBAの実行スピードが落ちます

    エクセルで検索を行うVBAを使用していますが、エクセル立ち上げ時はサクサク動きますが、検索を繰り返し使っていくと、実行速度が落ちてしまいます。 エクセルを再起動すれば、元どおりの速さに戻ります。 何が原因でしょうか?どうすれば防ぐことはできるでしょうか? よろしくお願い申し上げます。 実行環境 WindowsXPproSP3 Pen4 3.0Ghz メモリ1GB HDD80GB Office2003 VBAの検索部分 Function Kensaku3(Key1 As String, Range1 As String) As Long '縦方向の検索   Dim myRng As Range   Dim Job1 As String   Dim Col1 As Long   Dim Row1 As Long   Col1 = Range(Range1).Column   Row1 = Range(Range1).row   Cells(Row1, Col1).Select   Set myRng = Range(Range1).Find(what:=Key1, _     After:=ActiveCell, LookIn:=xlValues, _     LookAt:=xlPart, SearchOrder:=xlByRows, _     SearchDirection:=xlNext, MatchCase:=False)   If myRng Is Nothing Then     Kensaku3 = 0   Else     Kensaku3 = myRng.row   End If   Set myRng = Nothing End Function

  • 列が対象のChangeイベントの入力セル選択

    Private Sub Worksheet_Change(ByVal Target As Range) Dim myrang As Range 'K列に入力した時 If Target.Column = 11 And Target.Count = 1 Then With Workbooks("システム.xlsm").Worksheets("台帳").Columns(7) Set myrang = .Find(what:=Target.Value, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False, matchbyte:=False, searchformat:=False) End With If myrang Is Nothing Then Dim intret As Integer       '☆ intret = MsgBox("入力エラーです!", vbCritical + vbOKOnly, "エラー発生") Else      処理2のコード End If Target.Offset(2, 0).Select End If     End sub 以上のコードがあります。 ’☆のメッセージボックスを出し、OKを押したとき、入力したセルを選択して終了させたいのですが、 今のままでは、最後の Target.Offset(2, 0).Select を選択してしまいます。 どのようにすればいいのでしょうか?

  • VBA★findを使って見つけたセルの値を取得

    AA="タナカ" Selection.Find(What:=AA, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate 自動マクロでコレをつくりました。 タナカを見つけてその隣の変数を取得するというものを作りたいと思っています。 関数で言うとVlookupでやるものをマクロ化しようとしています。 検索して見つかったセルの右隣のセルの値を取得するにはどうしたらいいですか?

専門家に質問してみよう