

参照ボタンに検索したい従業員の番号を入力すると、フォームにデータが参照されます。  
そこからデータを編集し、編集確定ボタンを押すと表に上書きされるような仕様にしたいです。  
しかし、今のコードだと14行のような感じで反映されてしまいます。

[![画像の説明をここに入力](https://i.stack.imgur.com/paePq.png)](https://i.stack.imgur.com/paePq.png)

* * *

**VBA**

参照ボタンを押した際の処理です

[code]

     '編集確定ボタンを押したとき'
    Private Sub OkButton1_Click()
    
        Dim x As Integer
        With Worksheets("メンバー")
        For x = 2 To 10
        Cells(ActiveCell.Row, x).Value = Me.Controls("TextBox" & x).Text
        Me.Controls("TextBox" & x).Text = ""
        Next
        End With
    
    End Sub
    
     '参照ボタンを押した時の処理'
    Private Sub RefBtn_Click()
    
        'もし参照する値が入力されていなかったら'
        If Me.IDTextBox = "" Then
            MsgBox "参照する番号を入力してください。"
            Exit Sub
        End If
    
        'データの参照'
        Dim rng As Range
        Dim r As Variant
        Dim i As Integer
        With Worksheets("メンバー")
    
        Set rng = .Range("A2:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
        r = Application.Match(Val(IDTextBox.Text), rng, 0)
    
        For i = 2 To 5
            Controls("TextBox" & i).Text = .Cells(r + 1, i)
        Next i
        If .Cells(r + 1, 6) = "男" Then
            Man.Value = True
        Else
            Woman.Value = True
        End If
    
        ComboBox1.Text = .Cells(r + 1, 7)
        For i = 6 To 8
        Controls("TextBox" & i).Text = .Cells(r + 1, i + 2)
        Next i
        End With
    
    End Sub
    
[/code]

一応メンバー追加の登録のコードです

[code]

     '現在作業中のシートを選択'
        ActiveSheet.Select
        If Cells(8, 1).Value = 1 Then 'cell値変更あるかも'
    
            '入力されている一番最後のセルの番号を取得'
            CellCount = Cells(7, 1).End(xlDown).Row + 1
    
            'IDTextBoxの値を"従業員番号"の欄に入力'
            Cells(CellCount, 1).Value = Me.IDTextBox.Value
    
            '姓を入力'
            Cells(CellCount, 2).Value = Me.TextBox2.Value
    
            '名を入力'
            Cells(CellCount, 3).Value = Me.TextBox3.Value
    
            'セイを入力'
            Cells(CellCount, 4).Value = Me.TextBox4.Value
    
            'メイを入力 '
            Cells(CellCount, 5).Value = Me.TextBox5.Value
    
            '選択した性別を入力'
            If Man.Value = True Then
                Cells(CellCount, 6).Value = Me.Man.Caption
    
            ElseIf Woman.Value = True Then
                Cells(CellCount, 6).Value = Me.Woman.Caption
    
            End If
    
            '交通手段を入力'
            Cells(CellCount, 7).Value = Me.ComboBox1.Value
    
            '最寄り駅を入力'
            Cells(CellCount, 8).Value = Me.TextBox6.Value
    
            '交通費を入力'
            Cells(CellCount, 9).Value = Me.TextBox7.Value
    
            '時給を入力'
            Cells(CellCount, 10).Value = Me.TextBox8.Value
    
[/code]


CC BY-SA 4.0
2020-04-27T13:25:51.507
66036
2020-04-28T09:12:06.160
2020-04-27T16:35:32.613
3060
39792
question
vba
VBA編集データを上書きしたい


'参照ボタンを押した時の処理'のプログラムは以下のようになっていて、書き込み先のセルの行は、ActiveCell.Row です。  
質問のスクリーンショットで、G14セルが選択されている(ActiveCellになっている）ようなので、14行目（B14:H14)にデータが書き込まれたのは、そのせいだと思います。（A15セルを選択した状態で、編集確定ボタンをクリックすると１５行目に書き込まれるだろうと思います。

[code]

    Private Sub OkButton1_Click()
        Dim x As Integer
        With Worksheets("メンバー")
            For x = 2 To 10
                Cells(ActiveCell.Row, x).Value = Me.Controls("TextBox" & x).Text
                Me.Controls("TextBox" & x).Text = ""
            Next
        End With
    End Sub
    
[/code]

『編集確定ボタンを押すと表に上書きされるような仕様にしたい』というのであれば、  
どの行からデータを取得したのかを覚えておいて、その行にデータを書き戻すようにしてください。  
（ActiveCell.Rowを書き戻す行にするのは、まずいです。どこのセルを選択した状態でプログラムを実行するのかが判らないですから）


CC BY-SA 4.0
2020-04-28T09:12:06.160
66068
2020-04-28T09:12:06.160
217
66036
answer