こんにちは、仕事でVBAを使い始めて数週間。
最適ではなくともなんとか書けるようになってきました。
でも、まだまだ想定外の動作をされることが多いです。
今回もちょっと困っているので、お助けください。
本来のコードは会社に置いてきたので、自宅での再現です。
ちょっと長いですが、お付き合いください。
シートは3つです。
Sheet1 = 実行ボタンや手順など。
Sheet2 = CSVを取り込んだデータ
Sheet3 = 手入力したデータ
Sheet1の実行ボタンを押すと以下の処理が始まる予定です。
Sheet2のデータを以下の通り処理
・A3 に A1&A2 の様にくっつけた文字列を入力
その文字列が、Sheet3 の A列に存在するか検索
Sheet3に存在した場合、A3 は空白にします。
これのコードは以下です(会社にある本来のコードの再現です。インデント消えるので画像も添付)
==============================================
Sub temp()
Dim I As Long
Dim KEY As Variant
With Worksheets("Sheet1")
For I = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
.Cells(I, 3) = .Cells(I, 1) & .Cells(I, 2)
On Error Resume Next
KEY = Application.WorksheetFunction. _
Match(.Cells(I, 3), Worksheets("sheet2").Columns("A"), 0)
'データ量が多いので、findではなくmatchでやりたいです。
If Err.Number = 0 Then .Cells(I, 3) = ""
On Error GoTo 0
Next
End With
End Sub
==============================================
これを実行すると、Sheet2をアクティベートしている時なら問題なく処理されるのですが
Sheet1をアクティベートしていると、検索で引っかかても空白になりません。
いったいどこが原因でしょうか?
このコードは再現なので、「これではわからないヨ」ということでしたら
来週会社においてある本来のコードを持ってきます!
よろしくお願いします。
No.1
- 回答日時:
>Sheet2のデータを以下の通り処理
>・A3 に A1&A2 の様にくっつけた文字列を入力
>その文字列が、Sheet3 の A列に存在するか検索
>Sheet3に存在した場合、A3 は空白にします。
上記が正しいとするなら
With Worksheets("Sheet1")ではなく
With Worksheets("Sheet2")かと
Match(.Cells(I, 3), Worksheets("sheet2").Columns("A"), 0)ではなく
Match(.Cells(I, 3), Worksheets("sheet3").Columns("A"), 0)かと
思いますが、いかがでしょうか。
No.2ベストアンサー
- 回答日時:
こんにちは!
Sheetの指定はNo.1さんが回答されている通りだと思います。
尚、あくまで個人的な考えですが・・・
今回の件に関しては
MATCH関数を使っていますので、
存在すれば「数値」、なければ「エラー」が返りますね。
>On Error Resume Next
と
>If Err.Number = 0 Then .Cells(I, 3) = ""
>On Error GoTo 0
で、エラーを利用しA列に存在しない場合の処理を行っているように思いますが、
私は極力「On Error Resume Next」は使わないようにしています。
仮にコードに不具合があっても「On Error Resume Next」を使ってしまうと
不具合の場所が特定できないと思いますので、
極力エラーを出さないようなコードにするように心がけています。
今回の場合、エラーが返る場合は「数値」でない!という考え方です。
Sub Sample1()
Dim i As Long, myStr As String
Dim wS As Worksheet, myKey
Set wS = Worksheets("Sheet3")
With Worksheets("Sheet2")
For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
myStr = .Cells(i, 1) & .Cells(i, 2)
myKey = Application.Match(myStr, wS.Range("A:A"), False)
If Not IsNumeric(myKey) Then
.Cells(i, 3) = myStr
Else
.Cells(i, 3) = ""
End If
Next i
End With
End Sub
こんな感じになるのではないでしょうか?
※ お示しのコードはあるなしにかかわらず
一度C列にA列&B列を表示させ、ある場合に消去としていますが
ない場合のみ表示させる!というやり方にしました。m(_ _)m
IsNumeric関数を知りませんでした!数値の場合はTrueなんですね。
この関数を使って、判定の基準を書き換えて動作をみてみます!
とても勉強になりました。ありがとうございます。」
No.3
- 回答日時:
「コードは再現なので・・・」とのことですが、このコードに問題は無いように思います。
Withブロック中の変数の書き方で、次の違いは理解されていると思いますが、単純に「.」を漏らしているだけのような気がします。この観点で再度、コードを見直すことをお勧めします。With Worksheets("Sheet1")
.Cells(I, 3) ・・・Sheet1のセル(I, 3)
Cells(I, 3) ・・・ActiveSheetのセル(I, 3)
End With
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
ExcelのVBAコードについて教え...
-
1日に1人がこなせるプログラム...
-
Exel VBA 別ブックから該当デ...
-
VB6のComboBox関連の書き方をVB...
-
HTML電卓で1文字消す方法
-
VLookup関数を使ってラベルに表...
-
access2003 クエリSQL文に...
-
Excel VBA素人です。VBAで図形...
-
pythonにてseleniumを使うも、...
-
ExcelVBAで「Shift_JIS(MS932)...
-
エクセルに見えない文字(JISX0...
-
レポートでグループレベルの変...
-
chatgptでつくってもらったコー...
-
JANコードとPOSコードは同じ?
-
ACCESSで、履歴事項を管理する...
-
1、Rstudioで回帰直線を求める...
-
videopadについて
-
VBAでファイルオープン後にコー...
-
CheckBoxのコントロール配列に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
Exel VBA 別ブックから該当デ...
-
pythonにてseleniumを使うも、...
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
chatgptでつくってもらったコー...
-
欠番の抽出について
-
JANコードとPOSコードは同じ?
-
JavaScriptの定数名が取り消し...
-
1、Rstudioで回帰直線を求める...
-
特定行の背景色を変えたいのですが
-
変数名「cur」について
-
PreviewKeyDownイベントが2回...
-
将来AIが進歩してくるにつれて...
-
ACCESSユニオンクエリでORDER B...
-
COBOLの文法
-
VBAでファイルオープン後にコー...
-
Nullの使い方が不正です。
おすすめ情報