- ベストアンサー
書いたコードが思惑通りに動かないです。
アクティブシートのセル値を"データ"シートに転記するコードのつもりです。 If Cells(gyou, "CB").Value = 0 Then Exit Sub で変更したセルの行のCB列が零なら処理を終了してほしいのにそのまま処理が続く点と、 kennsakekka = Application.WorksheetFunction.Match(banngou, x, 0) を使って重複の有無を確認し、上書きや処理中止の選択をしたいのですが、重複の有無にかかわらず転記されます。 特別エラーは出ないため、原因が分からず困っています。 不具合の原因がどこにあるのか教えていただけないでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim gyou, katann, banngou, kennsakekka, x gyou = Target.Row If Target.Column <> 6 Then Exit Sub 'F列以外の変更なら処理を終了 If Cells(gyou, "CB").Value = 0 Then Exit Sub '変更したセルの行のCB列が零なら処理を終了 x = Worksheets("データ").Range("$A$2:$A$65536") 'xにシート"データ"のセル範囲を入れる banngou = Target.Value katann = Worksheets("データ").Cells(Rows.Count, "A").End(xlUp).Offset(1).Row kennsakekka = Application.WorksheetFunction.Match(banngou, x, 0) If kennsakekka = "" Then '重複項目がない場合はシート"データ"の終端の1つ下の行に転記 Worksheets("データ").Cells(katann, "A").Value = ActiveSheet.Cells(gyou, "CA").Value Else Dim ans As Integer ans = MsgBox("記入済の番号です。上書きしますか?", vbYesNo + vbExclamation, "確認してください") Select Case ans Case vbYes 'はいを選択したらMatchで見つけた行に上書き Worksheets("データ").Cells(kennsakekka, "A").Value = ActiveSheet.Cells(gyou, "CA").Value Case vbNo 'いいえを選択したら処理を終わる Exit Sub End Select End If End Sub
- みんなの回答 (3)
- 専門家の回答
お礼
返事が遅くなりました。 説明不足にも関わらず親切なアドバイスありがとうございます。 これからいただいた意見を参考に試し、結果をお伝えします。 >x = Worksheets("データ").Range("$A$2:$A$65536")と Set x = Worksheets("データ").Range("$A$2:$A$65536")の違いがわからないのですが、Setの有無で意味が全然違うということなのでしょうね。これから調べます。 同じコードのシートが複数あり、記入された情報をvlookup関数で取得するためにデータシートにまとめています。 入力されたデータの転記はVBAで賄えるのかもしれませんが、今の私の力では少し複雑なコードになりそうなので、他のセルたちに入力された値をもとに、一度普通の関数で必要な情報をCA列からCGにまとめ(実際に転記させるセルは複数あります)、その値を転記するだけのコードを書くことにしました。 F列に入力された数値もそのうちの1つで、vlookupで検索する値で、転記するセル群の1つに入力されています。F列の値で検索よりも、CA列の値で重複検索をする形にしておけば理解していただけたかもしれませんね。