質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

1871閲覧

VBAでのデータ編集での上書きの仕方について

rotai_miju

総合スコア3

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/04/27 13:38

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

参照ボタンの処理

VBA

1 '編集確定ボタンを押したとき' 2Private Sub OkButton1_Click() 3 4 Dim x As Integer 5 With Worksheets("メンバー") 6 For x = 2 To 10 7 Cells(ActiveCell.Row, x).Value = Me.Controls("TextBox" & x).Text 8 Me.Controls("TextBox" & x).Text = "" 9 Next 10 End With 11 12 13End Sub 14 15 '参照ボタンを押した時の処理' 16Private Sub RefBtn_Click() 17 18 'もし参照する値が入力されていなかったら' 19 If Me.IDTextBox = "" Then 20 MsgBox "参照する番号を入力してください。" 21 Exit Sub 22 End If 23 24 'データの参照' 25 Dim rng As Range 26 Dim r As Variant 27 Dim i As Integer 28 With Worksheets("メンバー") 29 30 Set rng = .Range("A2:A" & .Cells(Rows.Count, 1).End(xlUp).Row) 31 r = Application.Match(Val(IDTextBox.Text), rng, 0) 32 33 For i = 2 To 5 34 Controls("TextBox" & i).Text = .Cells(r + 1, i) 35 Next i 36 If .Cells(r + 1, 6) = "男" Then 37 Man.Value = True 38 Else 39 Woman.Value = True 40 End If 41 42 ComboBox1.Text = .Cells(r + 1, 7) 43 For i = 6 To 8 44 Controls("TextBox" & i).Text = .Cells(r + 1, i + 2) 45 Next i 46 End With 47 48 49End Sub

一応メンバー登録のコードも載せます。

VBA

1 2 '現在作業中のシートを選択' 3 ActiveSheet.Select 4 If Cells(8, 1).Value = 1 Then 'cell値変更あるかも' 5 6 '入力されている一番最後のセルの番号を取得' 7 CellCount = Cells(7, 1).End(xlDown).Row + 1 8 9 'IDTextBoxの値を"従業員番号"の欄に入力' 10 Cells(CellCount, 1).Value = Me.IDTextBox.Value 11 12 '姓を入力' 13 Cells(CellCount, 2).Value = Me.TextBox2.Value 14 15 '名を入力' 16 Cells(CellCount, 3).Value = Me.TextBox3.Value 17 18 'セイを入力' 19 Cells(CellCount, 4).Value = Me.TextBox4.Value 20 21 'メイを入力 ' 22 Cells(CellCount, 5).Value = Me.TextBox5.Value 23 24 '選択した性別を入力' 25 If Man.Value = True Then 26 Cells(CellCount, 6).Value = Me.Man.Caption 27 28 ElseIf Woman.Value = True Then 29 Cells(CellCount, 6).Value = Me.Woman.Caption 30 31 End If 32 33 '交通手段を入力' 34 Cells(CellCount, 7).Value = Me.ComboBox1.Value 35 36 '最寄り駅を入力' 37 Cells(CellCount, 8).Value = Me.TextBox6.Value 38 39 '交通費を入力' 40 Cells(CellCount, 9).Value = Me.TextBox7.Value 41 42 '時給を入力' 43 Cells(CellCount, 10).Value = Me.TextBox8.Value 44 45 46 ElseIf Cells(8, 1).Value = "" Then 47 48 '入力されている一番最後のセルの番号を取得' 49 CellCount = Cells(7, 1).End(xlDown).Row + 1 50 51 'IDTextBoxの値を"従業員番号"の欄に入力' 52 Cells(8, 1).Value = Me.IDTextBox.Value 53 54 '姓を入力' 55 Cells(8, 2).Value = Me.TextBox2.Value 56 57 '名を入力' 58 Cells(8, 3).Value = Me.TextBox3.Value 59 60 'セイを入力' 61 Cells(8, 4).Value = Me.TextBox4.Value 62 63 'メイを入力 ' 64 Cells(8, 5).Value = Me.TextBox5.Value 65 66 '選択した性別を入力' 67 If Man.Value = True Then 68 Cells(8, 6).Value = Me.Man.Caption 69 70 ElseIf Woman.Value = True Then 71 Cells(8, 6).Value = Me.Woman.Caption 72 73 End If 74 75 '交通手段を入力' 76 Cells(8, 7).Value = Me.ComboBox1.Value 77 78 '最寄り駅を入力' 79 Cells(8, 8).Value = Me.TextBox6.Value 80 81 '交通費を入力' 82 Cells(8, 9).Value = Me.TextBox7.Value 83 84 '時給を入力' 85 Cells(8, 10).Value = Me.TextBox8.Value 86 87 End If

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

Dim rng As Range
Dim r As Variant
Dim x As Integer
With Worksheets("?????o?[")

Set rng = .Range("A2:A" & .Cells(Rows.Count, 1).End(xlUp).Row) r = Application.Match(Val(IDTextBox.Text), rng, 0) For x = 2 To 5 .Cells(r + 1, x) = Controls("TextBox" & x).Text Next x If Man.Value = True Then .Cells(r + 1, 6) = "?j" Else .Cells(r + 1, 6) = "??" End If .Cells(r + 1, 7) = ComboBox1.Text For x = 6 To 8 .Cells(r + 1, x + 2) = Controls("TextBox" & x).Text Next x End With IDTextBox.Text = "" For x = 2 To 8 Controls("TextBox" & x).Text = "" Next x

投稿2020/04/28 09:32

rotai_miju

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「ActiveCell.Row」が14なのでは?
参照ボタンを押下したときに既に対象者の行番号(r)は取得しているので、それを利用すれば良いかと思います。

投稿2020/04/27 14:50

meg_

総合スコア10580

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問