こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBA で2つのプロシージャを一つにまとめたい

いつもここにはお世話になっており、ありがとうございます。

さて、タイトルにもありました通り、下記2つのプロシージャでコマンドボタンを設定して、実行しておりますが、これを一つのプロシージャ(ボタン)にまとめたく、ご指導お願いいたします。


○作ろうとしているVBAの概要
1)EXCELのデータベースで、一枚目の「inputシート」に入力し、2枚目の「dataシート」でデータをどんどん格納していきます。
2)データは、「顧客CDボタン」で管理しており、これをキーとしています。
3)「顧客CD」は[inputシート」ではC4セル、「dataシート」ではA列にで管理しています。
3)データは新規にデータを入力したときの登録ボタン(一つ目のプロシージャ)、既存のデータを編集して、上書きするときの、変更登録ボタン(二つ目のプロシージャ)があります。

○相談したい内容
「登録ボタン」と「変更」ボタンを一つにまとめて、ひとつのボタンとして、新規にデータを登録するときも、変更したデータを登録するときも、同じボタンで行えるようにしたい。


'■1つ目のプロシージャー
Private Sub CommandButton1_Click()
'登録ボタン
Dim row As Integer

row = WorksheetFunction.CountA(Sheets("data").Columns(1))
Sheets("data").Cells(row, 2).Value = Range("C5").Value

row = WorksheetFunction.CountA(Sheets("data").Columns(1))
Sheets("data").Cells(row, 3).Value = Range("C6").Value

row = WorksheetFunction.CountA(Sheets("data").Columns(1))
Sheets("data").Cells(row, 4).Value = Range("C7").Value

row = WorksheetFunction.CountA(Sheets("data").Columns(1))
Sheets("data").Cells(row, 5).Value = Range("F5").Value

ActiveWorkbook.Save

End Sub

'■2つ目のプロシージャー

Private Sub CommandButton3_Click()
'変更ボタン
Dim fRange As Range
Dim fRow As Long

If (Range("C4").Value = "") Then '顧客CDが入力されていない?
MsgBox "顧客コードを入力してください。", vbExclamation
Exit Sub
End If

Set fRange = Sheets("data").Columns(1).Find(What:=Range("C4").Value, _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)

If (fRange Is Nothing) Then '見つからなかった?
MsgBox "入力された顧客コードが存在しません。", vbExclamation
Exit Sub
End If

fRow = fRange.row '検索された顧客DCの行位置を求める
Sheets("data").Cells(fRow, 2).Value = Range("C5").Value
Sheets("data").Cells(fRow, 2).Value = Range("C5").Value
Sheets("data").Cells(fRow, 2).Value = Range("C5").Value
Sheets("data").Cells(fRow, 3).Value = Range("F5").Value

投稿日時 - 2011-07-19 19:40:56

QNo.6886128

困ってます

質問者が選んだベストアンサー

考え方
 入力された顧客コードが、登録済みデータに存在しているなら「変更」
 入力された顧客コードが、登録済みデータに存在していないなら「登録」

なので

[変更]ボタンのプロシージャ
> If (fRange Is Nothing) Then '見つからなかった?
>  MsgBox "入力された顧客コードが存在しません。", vbExclamation
>  Exit Sub
> End If
の部分を
If (fRange Is Nothing) Then '見つからなかった?
  MsgBox "入力された顧客コードが存在しませんので新規登録します。", vbExclamation
 ''[登録]ボタンClickイベントを強制的に実行する。
 call CommandButton1_Click()
 Exit Sub
End If
と変更する。

[登録]ボタンはシート上から削除しておく。
メッセージ等、多少の調整は適宜行ってください。

投稿日時 - 2011-07-19 20:12:05

お礼

ありがとうございました。
とても分かりやすい説明で、理解しやすかったです。
勉強になりました。
こんなに早く解決できて感激です。

投稿日時 - 2011-07-19 21:21:36

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問