2016-08-16 5 views
0

私は、学生名、人種、民族性、性別、学歴、専攻、卒業後のキャリア、卒業後のキャリアを表にしています。学生名が列Aで提供されている場合は、レース/民族、性別、学位の入力を要求するためのコードを手伝ってくれてありがとうございます。今は何か追加が必要です。 F列のStatusの値が「Graduated」である場合は、「卒業後のキャリア」列(列H)も入力します。私が思いつくことができる最も近いコードは以下の通りですが、私は今問題があります。別のセルに特定の値が設定されている場合、Excelで列に入力する必要がありますか?

列Fのステータスに「卒業」という値がある場合、Excelでは、卒業後のキャリアを欄Hに記入するだけでなく、他の列も記入する必要があります。コードをどのように修正する必要があるので、列Hだけが必要ですか?

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

Option Explicit 
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
Dim rngCell As Range, strBlanks As String 

Application.ScreenUpdating = False 

strBlanks = vbNullString 
For Each rngCell In Worksheets("Sheet1").Range("F2:F20").Cells 
If rngCell.Value = "Graduated" Then 
If WorksheetFunction.CountA(rngCell.Offset(0, 2).Resize(1, 1)) < 1 Then 
strBlanks = strBlanks & IIf(Len(strBlanks) > 0, ",", "") & _ 
Replace(rngCell.Offset(0, 2).Resize(1,1).SpecialCells(xlCellTypeBlanks).Address, "$", "") 
End If 
End If 
Next 

If Not strBlanks = vbNullString Then 
MsgBox "Entries required in cells " & vbCrLf & vbCrLf & strBlanks 
Cancel = True 
Exit Sub 
End If 
End Sub 

答えて

0

あなたはセルをループを避けるためにAutofilterを使用すると、ワンショット操作を

Option Explicit 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Dim toBeFilledAddress As String 

    With Worksheets("Sheet1") '<--| '<-- change "Sheet1" with your actual sheet name 
     With .Range("A1:H" & .Cells(.Rows.Count, 1).End(xlUp).Row) '<--| reference its range in columns A:B from row 1 to column "A" last non empty cell row 
      .AutoFilter field:=6, Criteria1:="Graduated" '<--| filter referenced range on its 6th column with "Graduated" 
      .AutoFilter field:=8, Criteria1:="" '<--|filter referenced range again on its 8th column with blanks 
      If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then toBeFilledAddress = .Offset(1, 7).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible).Address(False, False) '<--| store all matching cells address 
     End With 
     .AutoFilterMode = False '<--| show all rows back 
    End With 

    If toBeFilledAddress <> "" Then '<--| if any cell other than header ones has been filtered... 
     MsgBox "Entries required in cells " & vbCrLf & vbCrLf & toBeFilledAddress 
     Cancel = True 
     Exit Sub '<--| this line could be avoided unless you're planning to add more lines after "End If" 
    End If 
End Sub 
+0

これは私が必要としたものです。たくさんのsooooありがとう! – user6655908

+0

ようこそ。解決策として私の答えを受け入れてください。ありがとうございます – user3598756

+0

これは間違った質問ですが、私はあなたの答えを解決策としてどのように受け入れますか?私は非常にstackoverflowすることです。 :p – user6655908

0

なぜ次のように使用しますか?

&のvbCrLf &のvbCrLf

あなたのコードが正常に動作しますが、いくつかの方法を、これら2つの変数が他の列で埋めなっているようです。

また、Hのほかにどの列が返されますか?ユーザーはいつ値を入力するよう求められますか?

+0

を持つことができ、あなたの答えをいただき、ありがとうございます。私はちょうどいくつかのコードをオンラインで見つけ、修正しました。私はVBAについて非常に新しく、 "&vbCrLf&vbCrLf"が何であるか分かりません。 @bdpolinsky – user6655908

関連する問題