2016-07-22 4 views
0

ユーザーが情報を入力してテーブルと比較し、一致するものが見つかった場合はユーザー情報を新しい行が作成されました。 作成した行に情報を追加する際に問題があります。ここに私のコードはvbaを使用して新しい行に移動するにはユーザー入力が必要です

Sub findData() 
    Dim workflow As String 
    Dim finalrow As Integer 
    Dim i As Integer 

    workflow = Sheets("Sheet1").Range("c5").Value 
    servergri = Sheets("sheet1").Range("c9").Value 
    gridf = Sheets("sheet1").Range("c9").Value 
    finalrow = Sheets("Sheet3").Range("c100").End(xlUp).Row 

    For i = 5 To finalrow 
     If Cells(i, 3) = workflow Then 
      If Cells(i, 4) = servergri Then 
       Range(Cells(i, 3), Cells(i, 8)).Select 
       If ActiveCell.Offset(1).EntireRow.Insert Then 
        'what do I put so that workflow , sergri, gridf, information will go to the new row create? 
       ElseIf Cells(i, 5) = gridf Then 
        Range(Cells(i, 3), Cells(i, 8)).Select 
        If ActiveCell.Offset(1).EntireRow.Insert Then 
        Else 

        End If 
       End If 
      End If 
     End If 
    Next 
End Sub 
+0

新しい行にはどのような情報を入れたいですか? –

答えて

0

ここから始めましょう。明らかに、条件がユーザーの入力と一致する場合は、行を挿入するSheets( "Sheet3")の行をループしています。

すべてのif文をSheet3上のセルへの参照に完全修飾し、新しい行にデータを追加する方法を示すサンプルコードを追加しました。

Sub findData() 
    Dim workflow As String 
    Dim finalrow As Integer 
    Dim i As Integer 

    With Sheets("Sheet1") 
     workflow = .Range("C5").Value 
     servergri = .Range("C9").Value 
     gridf = .Range("C9").Value 
    End With 

    With Sheets("Sheet3") 
     finalrow = .Range("C" & Rows.Count).End(xlUp).Row 

     For i = 5 To finalrow 
      If .Cells(i, 3) = workflow And (.Cells(i, 4) = servergri Or .Cells(i, 5) = gridf) Then 

       .Rows(i).Insert 
       'Add new information to the new row. 
       'The new row number is still = i 

       .Cells(i, 1) = "???" 
       .Cells(i, 2) = "???" 
       .Cells(i, 3) = "???" 
       .Cells(i, 4) = "???" 

       'If you only want to add one row then your should exit the loop 
       Exit For 
      End If 
     Next 
    End With 
End Sub 

これは役に立ちますか?あなたは明確化が必要ですか?

0

私のコードはあなたのものと比較して見てください。これは、あなたが望むことを行うはずですが、テストされていません。

Sub findData() 
Dim workflow As String 
Dim finalrow As Integer 
Dim i As Integer 

workflow = Sheets("Sheet1").Range("c5").Value 
servergri = Sheets("sheet1").Range("c9").Value 
gridf = Sheets("sheet1").Range("c9").Value 
finalrow = Sheets("Sheet3").Range("c100").End(xlUp).Row 

For i = 5 To finalrow 
    If Cells(i, 3) = workflow Then 
     If Cells(i, 4) = servergri Then 
      ActiveCell.Offset(1).EntireRow.Insert 
      Range(Cells(i, 3), Cells(i, 8)).Copy 
      Range(Cells((i+1),3)).PasteSpecial xlPasteValues 
     ElseIf Cells(i, 5) = gridf Then 
      ActiveCell.Offset(1).EntireRow.Insert 
      Range(Cells(i, 3), Cells(i, 8)).Copy 
      Range(Cells((i+1),3)).PasteSpecial xlPasteValues 
     End If 
    End If 
Next i 
End Sub 
+0

ありがとう、ジェイソン、私は私たちもそれを比較しているものではなく、列に追加したくありません。私はSheet1にユーザーが入力したものを追加したい@jason –

+0

私はあなたがsheet3上のデータを入力し、テーブルがsheet1上にあるということを正しく理解していますか?そうでない場合は、ここで何が起こっているのかを明確にして、このコードを修正するのを手伝ってください。 – Jason

+0

ユーザーがシート1のデータを入力してから、そこからシート3に行き、同様のものを探します。 1つを見つけると、行を追加し、ユーザーがシート1に置いた情報を追加します –

関連する問題