アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
下記マクロに「シート2の最終行に値を記入する」機能を付与するとしたら、どういった構文を追加したら良いでしょうか。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As Range, wS2 As Worksheet, wS3 As Worksheet
Set wS2 = Worksheets("シート2")
Set wS3 = Worksheets("シート3")
If Target.Count > 1 Or Target = "" Then Exit Sub
Set c = wS3.Range("B:B").Find(what:=Target.Address(False, False), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
wS2.Range(c.Offset(, 2)) = Target

End If
End Sub

A 回答 (4件)

No.2・3です。



もう一度「お礼欄」をじっくり読み返してみました。
どうしても質問にあるコードの
>c.Offset(, 2)
が引っかかるのですが、

>wS2.Range(c.Offset(, 2)) = Target
の行が
>wS2.Range(c).End(xlDown).Offset(1) = Target
というコトでしょうか?

これであれば、シート3のB列セル番地を取得し、シート2のそのセルから下へ検索していき
データがある最終行の下のセルに「Target」が表示されます。

※ 対象セルもしくはその1行下にデータがない場合はエラーになりますので、
エラー処理のためにもう一つ変数を追加し

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, r As Range
Dim wS2 As Worksheet, wS3 As Worksheet
Set wS2 = Worksheets("シート2")
Set wS3 = Worksheets("シート3")
With Target
If .Count > 1 Or .Value = "" Then Exit Sub
Set c = wS3.Range("B:B").Find(what:=.Address(False, False), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
Set r = wS2.Range(c)
If r = "" Then
r = .Value
ElseIf r.Offset(1) = "" Then
r.Offset(1) = .Value
Else
r.End(xlDown).Offset(1) = .Value
End If
End If
End With
End Sub

こんな感じをお望みだったのでしょうか?m(_ _)m
    • good
    • 1
この回答へのお礼

理解しにくい質問で申し訳ありませんでした。
希望通りとなりました!
大変助かりました。
ありがとうございますm(__)m

お礼日時:2016/02/23 20:05

No.2です。



お礼欄を読んでもいまいち理解できないのですが、
>シート2のA1が記入されていたらA2に記入されるようにしたいと考えております。

すなわちシート3のB列該当セル番地(セルのアドレス)を取得し、
シート2のそのセル番地の下のセルに「Target」を表示したい!というコトですかね?

そうであれば
>wS2.Range(c.Offset(, 2)) = Target
の行を
>wS2.Range(c).Offset(1) = Target
としてみたらどうなりますか?m(_ _)m
    • good
    • 0

こんにちは!



>シート2の最終行に・・・
とはどの列の最終行になるのでしょうか?

お示しのコードの
>wS2.Range(c.Offset(, 2)) = Target
ではエラーになると思います。

>wS2.Range(c).Offset(, 2) = Target
にすると「シート3」のB列に「Target」のアドレスが存在する場合
「シート2」のそのセルの2つ右隣に「Target」の値が表示されますが、
これでは質問内容とは違いますよね?

※ 直接の回答でなくてごめんなさい。m(_ _)m
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
質問内容が理解しにくくて申し訳ありませんm(__)m

現在、シート1を原本とし、原本の項目を記載すると、シート3で設定したセルの番地のとおりにシート2に記載され、リスト化されるといったものを、質問内容のコードを使用し作成です。(説明が難しくて申し訳ありません。)

しかしながら、質問内容に記載したコードですとシート3で設定したコードの場所に繰り返し記入されるため、シート2のA1が記入されていたらA2に記入されるようにしたいと考えております。

お礼日時:2016/02/23 14:57

変数 = ws2.Cells(Rows.Count, 行).End(xlUp).Row + 1


ws2.Cells(変数, 行) = 値
これでいけると思います。
    • good
    • 0

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