dポイントプレゼントキャンペーン実施中!

下記のようなエクセルでシート1のB男さんのD列を成約に変更した時、
シート2の一番下にB男さんが反映されるよう数式を組むことは可能でしょうか。

現在シート1のB列に=IF(D2="成約",MAX(B1:B1)+1,"")で成約No.は自動で入力し
シート2のB列はA列の数字からVLOOKUPで名前を引いてきています。

シート1                  
A   B     C     D
No. 成約No.  名前    結果
1   1    A子さん  成約
2    B男さん  進行中
3 2 C太さん  成約

シート2
 A     B     C 
成約No.  名前    TEL
 1    A子さん  ●●●
 2   C太さん  △△△

ただこのままですと、シート1のD列の結果欄を「成約」に変更すると
シート2のA子さんの下にB男さんが入ってしまう(下記のような形になってしまう)ので、
シート2のC列以降に他の情報を入力しているとずれてしまい困っています。

シート2
 A     B     C
成約No.  名前    TEL 
 1    A子さん  ●●●
 2    B男さん  △△△
 3   C太さん  

ちなみにマクロの知識は全くと言っていいほどありませんが
やはりマクロとかが必要なのでしょうか。

Excel初心者でこちらの掲示板に質問させて頂くのも初めてですので
失礼な点やわかりにくい点などがございましたら、ご容赦ください。

何卒、よろしくお願い致します。

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

  • うーん・・・

    説明不足で、わかりにくくて申し訳ありません。

    シート1がお問合せ頂いたお客様の一覧で
    シート2がご成約されたお客様のデータで作成しております。

    ご成約される順番が、問合せ順とは限らないので
    シート1、D列を「成約」にすると
    シート2の一番下へ名前が反映されるようにしたいです。

    シート2
     A     B     C
    成約No.  名前    TEL 
     1 A子さん  ●●●
     2 C太さん  △△△
     3 B男さん  


    ご教授願えればと思います。

      補足日時:2016/01/11 18:59
  • うーん・・・

    早速お返事頂きましてありがとうございます。
    説明が下手で申し訳ありません。
    VLOOKUPについては完全一致になっております。
    検索した条件を別シートの一番下に積み上げて(下げて?)いくといったら良いでしょうか…

    説明が下手で申し訳ありません(>_<)

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/01/11 19:07

A 回答 (4件)

シート1の成約の部分は自分で手入力するとして、



Dim r as integer

Dim i as integer

i = Sheets("Sheet2").Range("B"&Rows.Count).End(xlUp).Row+ 1


'とにかく成約であればシート1の名前をシート2に入力する。

Do until Sheets("Sheet1").Cells(r,4) = ""

If Sheets("Sheet1").Cells(r,4) = "成約" then

Sheets("Sheet2").Cells(i,2) = Sheets("Sheet1").Cells(r,3)

i = i + 1

Endif

Loop

’同性は削除

r = 1

Do until Sheets("Sheet2").Cells(r,2) = ""

i = r+ 1

Do until Sheets("Sheet2").Cells(i,2) = ""

if Sheets("Sheet2").Cells(r,2) = Sheets("Sheet2").Cells(i,2) Then

Sheets("Sheet2").Cells(i,2).EntireRow.Delete
i = i - 1
end if
i = i + 1
Loop
r = r + 1

Loop

的な?
    • good
    • 0

こんばんは!



>現在シート1のB列に=IF(D2="成約",MAX(B1:B1)+1,"")で成約No.は自動で入力し・・・
その数式でD列が「成約」になった順にちゃんと連番が表示されますか?

それはさておいて、Sheet1のB列は成約順に連番が表示されるものとして、
Sheet1のD列が「成約」になった順にSheet2に表示させたいのですね?
VBAになりますが一例です。

質問文ではSheet1にない項目がSheet2にありますね?(TELの列)
こちらではどの列か判断できないので、その列を検索するコードも入れています。
(逆にいえば表示させたい列がはっきりすればもう少し短いコードでできます)

画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)
Sheet1のD列を変更してみてください。

Private Sub Worksheet_Change(ByVal Target As Range) 'この行から//
Dim j As Long, myRow As Long
Dim c As Range, wS1 As Worksheet, wS2 As Worksheet
If Intersect(Target, Range("D:D")) Is Nothing Or Target.Count > 1 Then Exit Sub
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
With Target
If .Value = "成約" Then
myRow = wS2.Cells(Rows.Count, "A").End(xlUp).Row + 1
wS2.Cells(myRow, "A") = WorksheetFunction.Max(wS2.Range("A:A")) + 1
wS2.Cells(myRow, "B") = .Offset(, -1)
'▼ここからSheet2の項目と一致する列の検索//
For j = 3 To wS2.Cells(1, Columns.Count).End(xlToLeft).Column
Set c = wS1.Rows(1).Find(what:=wS2.Cells(1, j), LookIn:=xlValues, lookat:=xlWhole)
On Error Resume Next '←念のため★
wS2.Cells(myRow, j) = wS1.Cells(.Row, c.Column)
Next j
End If
End With
End Sub 'この行まで//

※ Sheet2は実データとしていますので、数式が入っている場合はすべて消えてしまいます。

※ 関数でないので一旦「成約」となった行が「不成約」になっても
元に戻せません。m(_ _)m
    • good
    • 0

たぶんに、質問の内容から察して、シート1に成約になった日付と時間が必要と云う事ですよね。


F列に 成約日を準備して
成約したら、 Ctrl+ + キーで日付、その後に スペース 
更に Ctrl+* で時間を入れるしかないでしょう。
シート1のB列の関数を
=IF(F2="","",RANK(F2,F:F,1))
下へコピーしておく???

F劣に日付と時間を入れるのか手間ならマクロの方法がありますが
D列を間違って操作した場合など考えると手入力が無難かと思います。
    • good
    • 0
この回答へのお礼

早速のご返事ありがとうございます。

日付と時間で順番をつけるということですね!
一度試してみます!

お礼日時:2016/01/11 19:19

内容がいまいち理解できずに申し訳ありませんが、


VLOOKUPは最後に「,false」をつけると一致した値のみ引用します。
この回答への補足あり
    • good
    • 0

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