ここから本文です

excel2013のユーザーフォームの質問です。 今顧客情報Tからユーザーフォーム(...

myu********さん

2019/5/1111:21:48

excel2013のユーザーフォームの質問です。

今顧客情報Tからユーザーフォーム(顧客情報F)で作成中です。

内容は
顧客ID(列A)
氏名(列B)
年齢(列C)
性別(列D)
生年月日(列E)
備考(列F)

ですべてtextボックスです。
顧客IDは6桁の一意の数値のみ入力できるようにしています。(例000015)など必ず6桁になるようにしています。

顧客IDテキストボックスにIDを入れ検索ボタンを入力すると顧客情報T(シート2)の情報を検索し上記テキストボックスに表示されているようにいます。

さらに登録ボタンのコマンドボタンを用意しています。

Private Sub 登録_Click()

Dim rslt As VbMsgBoxResult
rslt = MsgBox("登録しますか?", Buttons:=vbYesNo)
If rslt = vbYes Then

Dim lastRow As Long
With Worksheets("顧客情報T")
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(lastRow, 1) = Me.顧客ID.Text
.Cells(lastRow, 2) = Me.顧客氏名かな.Text
.Cells(lastRow, 3) = 生年月日.Text
.Cells(lastRow, 4) = 年齢.Text
.Cells(lastRow, 5) = 性別.Text
.Cells(lastRow, 6) = 備考.Text

End With

MsgBox "登録が完了しました。"
Unload Me
Else
MsgBox "キャンセルします。"
End If
End Sub

上記のように記述をしていまして登録ボタンをクリックすると顧客情報Tの最終行の次の行へ上記テキストボックスの内容が登録されます。

ここで問題なのは全ての顧客IDを新しい行に登録されてしまうことです。
すでに顧客IDがある場合にはその行を上書き修正したいのですが
どうしてもエラーがでてしまいできませんでした。

ご教授致します。

補足tai********さん
kky********さん

素早い回答ありがとうございます。
顧客情報のA行(顧客ID)は文字列で扱っています。

今現在問題は解決できてないのですが、

tai********さんの頂いた回答では
顧客情報のIDが新規の場合には新しいIDに発番され正常に登録されますが、重複したものも(過去に登録して顧客情報TのA行に文字列としてデータがあるもの)新しいIDとして登録されてしまいます。

kky********さんの頂いた回答では
いずれにしろ既にデータのある最終行にデータが上書きされる感じです。

他に何か気を付けつべき点や見直すべきところがあればお願い致します

閲覧数:
47
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

kky********さん

2019/5/1111:46:48

こんな感じです。
ただIDが数値なのか文字列なのかが重要です。下記は文字列としています。

Private Sub 登録_Click()
Dim rslt As VbMsgBoxResult
Dim lastRow As Long
Dim rng As Range
Dim ck As Variant
rslt = MsgBox("登録しますか?", Buttons:=vbYesNo)
If rslt = vbYes Then
With Worksheets("顧客情報T")
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rng = .Range("A1:A" & lastRow)
ck = Application.Match(顧客ID.Text, rng, 0)
If IsError(ck) Then
ck = lastRow + 1
End If
.Cells(ck, 1) = 顧客ID.Text
.Cells(ck, 2) = 顧客氏名かな.Text
.Cells(ck, 3) = 生年月日.Text
.Cells(ck, 4) = 年齢.Text
.Cells(ck, 5) = 性別.Text
.Cells(ck, 6) = 備考.Text
End With
MsgBox "登録が完了しました。"
Unload Me
Else
MsgBox "キャンセルします。"
End If
End Sub

  • kky********さん

    2019/5/1115:26:23

    現在の「顧客情報T」というシートのA列の書式は文字列になっていて、既に何件か登録されているのですか?
    ここを確認して返信して下さい。

    そこが一番の懸念点でした。ですので
    IDが数値なのか文字列なのかが重要です。
    と書きました。

    ユーザーフォームのテキストボックスに入力する値は文字列扱いです。
    そこで001と入力しても、ワークシートのA列の書式が文字列でなかったら、値は「001」にはならず「1」になります。

  • その他の返信を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

tai********さん

2019/5/1112:03:25

こんな感じ?


Private Sub 登録_Click()
Dim rng As Range, WriteRow As Long
Dim rslt As VbMsgBoxResult
rslt = MsgBox("登録しますか?", Buttons:=vbYesNo)
If rslt = vbYes Then
Dim lastRow As Long
With Worksheets("顧客情報T")
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
Set rng = Columns(1).Find(顧客ID.Text)
If rng Is Nothing Then
WriteRow = lastRow
Else
rslt = MsgBox("上書きしますか?", Buttons:=vbYesNo)
If rslt = vbYes Then
WriteRow = rng.Row
Else
Exit Sub
End If
End If
.Cells(WriteRow, 1) = Me.顧客ID.Text
.Cells(WriteRow, 2) = Me.顧客氏名かな.Text
.Cells(WriteRow, 3) = 生年月日.Text
.Cells(WriteRow, 4) = 年齢.Text
.Cells(WriteRow, 5) = 性別.Text
.Cells(WriteRow, 6) = 備考.Text
End With
MsgBox "登録が完了しました。"
Unload Me
Else
MsgBox "キャンセルします。"
End If
End Sub


"上書きしますか?"は不要かもしれませんが、

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる