プロが教える店舗&オフィスのセキュリティ対策術

図の様に設定シートとSheet2があります。
今このプログラムを使用していますが、未登録の場合は空欄になってしまいます。
登録がない場合には未登録と表示させたいのですが、どの様に変更したらいいのか分かりません。
教えて頂きたいのですがよろしくお願い致します。

設定シートの範囲がA16~A25行目までの範囲と列はZ列までデーターは増やすことが出来ます

Sub TEST()
Dim s1 As Worksheet, s2 As Worksheet
Dim i As Long, f As Range, lc As Range
Dim c As Long, r As Long, d As String

Set s1 = Worksheets("設定")
Set s2 = Worksheets("Sheet2")

Set lc = s1.Cells.SpecialCells(xlLastCell)
c = lc.Column
r = lc.Row

For i = 2 To s2.Range("G2").End(xlDown).Row
Set f = s1.Range(s1.Cells(1, "B"), s1.Cells(r, c)).Find(What:=s2.Cells(i, "G").Value, LookAt:=xlWhole)
If Not (f Is Nothing) Then
s2.Cells(i, "F").Value = s1.Cells(f.Row, "B").Value
End If
Next i
End Sub

「エクセルVBAで教えて頂きたいのですが?」の質問画像

質問者からの補足コメント

  • 初心者レベルなのでコードが上手くかけません、教えていただきませんか
    申し訳ございませんがよろしくお願い致します。

    また、設定シートのA1から別の設定がり、A25以降にも別の設定があります。
    その時に別の設定が読み込まれることがり、値が違うものになってしまいますので、
    設定シートはA16~Z25までの範囲で(固定)使用したいのですがよろしくお願い致します。

      補足日時:2023/01/01 23:26

A 回答 (2件)

No1です。



>初心者レベルなのでコードが上手くかけません
ご提示のコードを作成したのは、他の人ということでしょうか?
作った方にお尋ねになるのが一番良いと思いますけれど。


>設定シートはA16~Z25までの範囲で(固定)使用したい
範囲固定なら、関数で処理してしまった方が簡単でしょう。
わけのわからないマクロを振り廻さずにすみますし、また、関数を設定しておくことで、いちいちマクロを実行しなくても、セルの値に応じて自動的に計算してくれます。

例えば、ご提示のF2セルに
=IF(G2="","",IFERROR(INDEX(設定!B:B,AGGREGATE(15,6,ROW(C$16:Z$25)/(設定!C$16:Z$25=G2),1)),"未登録"))
を入力して、あらかじめ充分に下方までフィルコピーしておくとか。

「未登録」を赤文字にしたいのなら、「条件付き書式」を設定しておくことで可能です。
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2023/01/03 17:41

こんばんは



>未登録の場合は空欄になってしまいます。
正確には、「該当する値が見つからない場合はなにもしない」ですね。
(F列に何か記入されていればそのまま)

>If Not (f Is Nothing) Then
>s2.Cells(i, "F").Value = s1.Cells(f.Row, "B").Value
>End If
の部分で、「該当するものがあれば~」という処理を行っていますので、
 Else
  該当がない場合の処理
 End IF
となるように追加・修正してあげればご質問のようになります。

あるいは、ループ処理の最初に「未登録」を記入する処理をいれておけば、その後で該当する場合には上書きされるようになります。
(該当しなければ、「未登録」のままになります)
    • good
    • 0

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