
下記のようなエクセルでシート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初心者でこちらの掲示板に質問させて頂くのも初めてですので
失礼な点やわかりにくい点などがございましたら、ご容赦ください。
何卒、よろしくお願い致します。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.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
的な?
No.3
- 回答日時:
こんばんは!
>現在シート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
No.2
- 回答日時:
たぶんに、質問の内容から察して、シート1に成約になった日付と時間が必要と云う事ですよね。
F列に 成約日を準備して
成約したら、 Ctrl+ + キーで日付、その後に スペース
更に Ctrl+* で時間を入れるしかないでしょう。
シート1のB列の関数を
=IF(F2="","",RANK(F2,F:F,1))
下へコピーしておく???
F劣に日付と時間を入れるのか手間ならマクロの方法がありますが
D列を間違って操作した場合など考えると手入力が無難かと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】【配列】3つのシー...
-
文字の色も参照 VLOOKUP
-
【VBA】シート名と見出しが一致...
-
エクセルの保護で、列の表示や...
-
【条件付き書式】countifsで複...
-
エクセルで横並びの複数データ...
-
Excelに自動で行の増減をしたい...
-
Excel 2段組み
-
EXCELのVBAで複数のシートを追...
-
シートをまたぐ条件付き書式に...
-
ExcelのVlookup関数の制限について
-
オートフィルタ使用時にCOUNTIF...
-
エクセルの横に並んでいるもの...
-
SUMPRODUCTにて別シートのデー...
-
エクセルで、book全体の検索&...
-
スプレッドシートでindexとIMPO...
-
Excelでの並べ替えを全シートま...
-
データチェックを行うエクセル...
-
条件付きのMEDIANとAVERAGEにつ...
-
Excel の複数シートの列幅を同...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】【配列】3つのシー...
-
文字の色も参照 VLOOKUP
-
【条件付き書式】countifsで複...
-
ExcelのVlookup関数の制限について
-
エクセルで、チェックボックス...
-
エクセルの保護で、列の表示や...
-
Excelのセルの色を変えた行(す...
-
EXCELのVBAで複数のシートを追...
-
シートをまたぐ条件付き書式に...
-
Excelでの並べ替えを全シートま...
-
Excel の複数シートの列幅を同...
-
VBAで繰り返しコピーしながら下...
-
【VBA】複数のシートの指定した...
-
SUMPRODUCTにて別シートのデー...
-
Excelに自動で行の増減をしたい...
-
エクセルの列の限界は255列以上...
-
Excel 2段組み
-
VLOOKアップ関数の結果の...
-
excel 複数のシートの同じ場所...
-
Excel VBA ピボットテーブルに...
おすすめ情報
説明不足で、わかりにくくて申し訳ありません。
シート1がお問合せ頂いたお客様の一覧で
シート2がご成約されたお客様のデータで作成しております。
ご成約される順番が、問合せ順とは限らないので
シート1、D列を「成約」にすると
シート2の一番下へ名前が反映されるようにしたいです。
シート2
A B C
成約No. 名前 TEL
1 A子さん ●●●
2 C太さん △△△
3 B男さん
ご教授願えればと思います。
早速お返事頂きましてありがとうございます。
説明が下手で申し訳ありません。
VLOOKUPについては完全一致になっております。
検索した条件を別シートの一番下に積み上げて(下げて?)いくといったら良いでしょうか…
説明が下手で申し訳ありません(>_<)