2016-04-14 14 views
0

Excelビジュアルベーシックでuserformの機能を作っていましたが、これは1つの列に対して選択されたXの特定のセル値を変更します。ただし、作成されたユーザーフォームでユーザーが値を変更するたびに、プログラムはその列およびX値に関連する各セルのデータを掛けます。例:列 "A"にMarieの値が3回ある場合、3行、7、10行に1つ、カラム "B"のユーザーフォーム入力がhelloです。各行の出力は同じ「hello」になります。しかし、値の列 "A"を繰り返して、それぞれの値を個別に変更したい。ExcelのVisual Basic for x変数のセル値を同じ行に変更する方法はありますか。

ユーザーフォームのコード:

Private Sub btnSubmit_Click() 
Dim erow As Long 
Dim ws As Worksheet 
Dim lastrow As Long 
Dim count As Integer 

Set ws = ThisWorkbook.Sheets("Table") 

lastrow = Sheets("Table").Cells(Rows.count, 1).End(xlUp).Row 
count = 0 
For x = 2 To lastrow 


If Sheets("Table").Cells(x, 1) = Me.cmbEmp Then 
ws.Cells(x, 3) = Me.ldlcolor 
ws.Cells(x, 30) = (Me.ldlp) 
count = count + 1 

End If 
If Sheets("Table").Cells(x, 3) = Me.cmbEmp Then 
ws.Cells(x, 1) = Me.ldlname 
ws.Cells(x, 14) = (Me.ldlI) 
count = count + 1 
End If 

Next x 

Me.Hide 
End Sub 

答えて

0

問題は、あなたのシートのすべての行をループしていることで、値が異なる行に複製されている場合、それは各時間と一致します。重複する値のうち、どの値を変更するかを判断するには、より良い方法を考え出す必要があります。たとえば、このコード意志それは(「マリー」)あなたのデータの最初の出現見つけるまでをループ:あなたはどちらか、あなた、あなたが変更したい「マリー」の発生がわからない場合は

Dim bolFound As Boolean 
bolFound = False 
While Not bolFound 
    If Sheets("Table").Cells(x, 1) = Me.cmbEmp Then 
     ws.Cells(x, 3) = Me.ldlcolor 
     ws.Cells(x, 30) = (Me.ldlp) 
     count = count + 1 
     bolFound = True 
    End If 

    If Sheets("Table").Cells(x, 3) = Me.cmbEmp Then 
     ws.Cells(x, 1) = Me.ldlname 
     ws.Cells(x, 14) = (Me.ldlI) 
     count = count + 1 
     bolFound = True 
    End If 
Wend 

重複したデータを削除するか、行3の "marie"と行7の "marie"を区別する方法を見つけなければなりません。

+0

ありがとう、ちょうどあなたのコードを試しましたが、プログラムがクラッシュしてから無限ループします。 –

+0

私はちょうど問題を解決した、ありがとう男。私はXDの名前を教える方法を見つけた –

関連する問題