プロが教えるわが家の防犯対策術!

VBA 初心者です。先日、検索について、Find メソッドを勧めて頂いて現在勉強中です。お陰様で、Find メソッドを使って、入力シートから台帳へ転記、台帳から入力シートへの代入ができるようになりました。ありがとうございました。
まだ、重複を防ぐ方法が全く見当がつきません。教えて下さい。よろしくお願いします。

Sub 重複防ぐ方法()
Dim c As Object
Dim myKey As String
Dim myRow As Long
Dim Sh1 As Worksheet
Dim Sh2 As Worksheet

Set Sh1 = Worksheets("台帳")
Set Sh2 = Worksheets("入力")
Dim i As Long
For i = 4 To 4 ★1

'入力データを台帳へ転記

myKey = Sh2.Range("i2").Value
With Sh1.Range("a2:u10")


'台帳のA2:U10の範囲をmyKey = 入力の.Range("i2")の検索コードで検索

Set c = .Find(What:=myKey, LookIn:=xlValues, lookat:=xlWhole, _
SearchOrder:=xlByColumns, MatchByte:=False)

If Not c Is Nothing Then '検索値が見つかったら(訂正修正)
★2 c.Offset( , )?又は、その他の方法で、行番号?を取得してSh2.Range("i2:u2")のデータを
         A列(検索コード)の隣B列~U列に代入したい。

If c Is Nothing Then '検索値が見つからなかった、新規'データとして台帳へ転記
With Sh1
myRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range(.Range("A" & myRow), .Range("M" & myRow)).Value = Sh2.Range("i2:u 2").Value ‘最下行の1行下へ代入する

    ★1For i = 4 To 4の意味は分かっていませんが、数値を変えてみたら、この数値で動いていますが 意味を教えて下さい。

★2部分は可能でしょうか?教えて下さい。
     
       以上 よろしくお願いいたします。

A 回答 (1件)

>★1For i = 4 To 4の意味は分かっていませんが、数値を変えてみたら、この数値で動いていますが 意味を教えて下さい。



正直不明です。
1.
For i = ○ To ▲ とは変数:i に○から始まり▲になるまでの数値を順に入れていくループ処理の1つです。
例えば
For i = 1 To 10
Range("A" & i).Value = i * 2
Next
とあったらセルA1~A10に2,4,6,8,・・・20と値を入れることが出来ます。
でも今回は 4 To 4 で動いているってことならそもそも
i = 4
とするだけで十分なはず。(For に対する Next も不要となります)

2.
それと変数:i が何に使われているのか、質問文のコードが中途半端?に切れているので回答者には推測もできないと言う点ですかね。

>★2部分は可能でしょうか?教えて下さい。

・Sh2.Range("i2:u2")のデータ
・A列(検索コード)の隣B列~U列に代入

可能か?と問われると列数(セル個数)が違いますよね?
なのでどのように入れればよいか不明です。
そこの詳細は必要かと。

-------

ついでですが
>With Sh1.Range("a2:u10")
検索したい範囲はA列ではなくて?
他の列に検索値が存在するのでしょうか?

あと前回の質問は一旦けりをつけるなら閉じたほうが宜しいかと。
そしてその質問アドレスを関連するなら次回の質問に貼り付けておくとわかりやすいですかね。(非公開にされてるので質問者は追えないもので)
    • good
    • 0
この回答へのお礼

ありがとう

ありがとうございます。前回も参考サイトまで紹介頂きました。助かっています。回答を精読しまして再度お聞きしたいと想います。
また、前回初めての質問で、とじ方の必要性も方法も知りませんでした。今から確認して閉じます。解らない事だらけですが、宜しくお願いいたします。

お礼日時:2019/07/14 15:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!