EXCEL VBAでsheet1のセルに何かデータが入力された時に、sheet2のどこかのセルに同じ文字列がないかを探したいと思います。
データの入力と同時に検索をかけるため、sheet1の部分にイベントプロシージャを定義し、
データが入力された時にそのルーチンの中からsheet2のデータを見に行きたいのですが、エラーが出てしまいます。
こういうことはできないのでしょうか?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LineNo As Integer
Dim tmp_str As String
tmp_str = Target.Value
LineNo = Sheets("sheet2").Cells.Find(what:=tmp_str, lookat:=xlWhole).Row
MsgBox (LineNo)
End Sub
No.2ベストアンサー
- 回答日時:
こんな感じでいかがですか?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LineNo As Variant
Set LineNo = Sheets("sheet2").Cells.Find(what:=Target.Value, lookat:=xlWhole)
If Not LineNo Is Nothing Then MsgBox LineNo.Row
End Sub
No.3
- 回答日時:
この辺は大丈夫ですか?
■ Excel VBA ヘルプ引用
引数 LookIn、LookAt、SearchOrder、および MatchByte の設定は、
このメソッドが使われるたびに保存されます。
次にこのメソッドを使うときに、これらの引数の指定を省略すると、
保存された設定が使われます。
つまり、Find メソッドを使う場合は上記のパラメータをちゃんと
指定しないと、前回の設定のまま検索が行われてしまう可能性があると
いうことです。
設定が違えば、「あるはずなのに?」ということもあり得ます。
または、データの末尾に不要なスペースなどがあって、一見同じデータ
にみえても、プログラム的に見れば別データとなっている事があります。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rFound As Range
' // 終了条件:: 値が変化したセルが複数の場合は中止
If Target.Count > 1 Then Exit Sub
' // 終了条件:: データ消去も中止
If Len(Target.Value) = 0 Then Exit Sub
' // 検索処理(Find メソッドはちゃんとパラメータ指定する)
Set rFound = Sheets("Sheet2").Cells _
.Find(What:=Target.Text, _
LookAt:=xlWhole, _
LookIn:=xlValues, _
MatchByte:=False)
' // 結果出力
If rFound Is Nothing Then
' MsgBox "Not Found."
Else
MsgBox "RowNum :=" & CStr(rFound.Row)
Set rFound = Nothing
End If
End Sub
No.1
- 回答日時:
Findメソッドで対象文字(tmp_str)がSheet2の中で見つからないと
Nothingが返されます。Nothingに対してRowプロパティは使えませんか
らエラーになります。
あまりスマートな例ではありませんが、以下のコーディングではどうでしょう?
If ThisWorkbook.Sheets("Sheet2").Cells.Find(what:=tmp_str, lookat:=xlWhole) Is Nothing Then
MsgBox "見つかりません"
Else
LineNo = ThisWorkbook.Sheets("Sheet2").Cells.Find(what:=tmp_str, lookat:=xlWhole).Row
MsgBox (LineNo)
End If
ご回答ありがとうございます。
とりあえずsheet2に入力してあるデータだけを検索したので、
nothingになるはずはないのですが…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
mainメソッドのthrows節で設定...
-
final修飾子を使っているのに、...
-
コマンドプロンプト実行後に画...
-
C#で右からnカラム目に文字を挿...
-
オーバーロードの「あいまい」...
-
10進の自然数を2進数に変換する...
-
VBPをダブルクリックするとたま...
-
javaの質問です 次の機能を有す...
-
onClickで関数呼出し後に、結果...
-
Labelコントロールに数字を代入...
-
HyperLinkのNavigateUrl属性に...
-
JAVA コンパイル時のエラー
-
javaの質問です 次の機能を有す...
-
ShellExecuteってなんで関数?
-
VBA/FIND関数を使っての先頭文...
-
Javaのクラスのstaticメソッド...
-
System.load() と System.loa...
-
JSPで<SELECT>の中にDBから持っ...
-
配列のメソッド
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
エクセルVBAにおけるON TIMEメ...
-
【sendkeysメソッドが動かずに...
-
コマンドプロンプト実行後に画...
-
onClickで関数呼出し後に、結果...
-
DataGridViewでセルクリックイ...
-
Labelコントロールに数字を代入...
-
ExcelのxlDialogInsertPictureで。
-
final修飾子を使っているのに、...
-
JSPで<SELECT>の中にDBから持っ...
-
VBPをダブルクリックするとたま...
-
Excel VBA でExcelを終了したい...
-
Refreshメソッドの使い方
-
ウィンドウを最前面にできません
-
javascriptからjavaを呼び出したい
-
VB.netで、シリアル通信のタイ...
-
mainメソッドのthrows節で設定...
-
VBAでSaveAs使用し、指定してい...
-
PDFファイルから別ウィンドウで...
-
Application.Wait の参照設定
おすすめ情報