アプリ版:「スタンプのみでお礼する」機能のリリースについて

●質問の主旨
データベースにデータを入力していくたびに
そのデータに「入力No.」1を振り、以後データが増えるたびに
番号を1つずつ増やしていきたいと考えています。

A2→1
A3→2
A4→3
A5→4

という具合に、途中でブックを保存して再度立ち上げても
常に連続した数字を入力したいと思っています。
以下のコードをどのように書き改めばよいでしょうか?
ご教示願います。

●現在の問題点

1.「データベース入力」のボタンを押すと
A2セルに「入力No.」2が入力されてしまう

2.ブックを閉じない限り、入力した番号は
2のままで転記されてしまう。

3.ブックを保存して閉じた後、再度立ち上げ「入力No.」を
入力しようとすると今度は4が入力される。

4.その後はブックを保存して閉じた後、再度立ち上げても
4が入力され続ける。

●コード

Option Explicit


'ユーザーフォームの初期化
Private Sub UserForm_Initialize()

TextBox3.Value = Worksheets(1).Range("A2").Value + 1
txtdate = Date
Call No

End Sub

'フォームからデータベースへの転記
Private Sub CommandButton3_Click()

Dim Rowpos As Long
Dim ColPos As Long

Rowpos = Worksheets(1).Range("a10000").End(xlUp).Row
ColPos = 1

Rowpos = Rowpos + 1

With Worksheets(1)

.Cells(Rowpos, ColPos) = TextBox3.Value
.Cells(Rowpos, ColPos + 1) = txtdate.Value

End With

End Sub

'Noの加算
Private Sub No()

Dim i As Long

For i = 1 To 1 Step 1
TextBox3.Value = TextBox3.Value + 1

Next

End Sub


'ユーザーフォームの終了
Private Sub CommandButton5_Click()

Unload UserForm1
End

End Sub

以上よろしくお願い申し上げます。使用機種はWindowsVistaで、
Excel2007です。私はVBA初心者です。

「データベースの番号を1つずつ加算していく」の質問画像

A 回答 (1件)

>Private Sub CommandButton3_Click()


>:
>With Worksheets(1)
> .Cells(Rowpos, ColPos) = TextBox3.Value
> .Cells(Rowpos, ColPos + 1) = txtdate.Value
>End With

.Cells(Rowpos, ColPos) = TextBox3.Value
ここが「入力No.」をセルにセットする箇所。
TextBox3.Valueの値はというと、

>Private Sub UserForm_Initialize()
> TextBox3.Value = Worksheets(1).Range("A2").Value + 1
> txtdate = Date
> Call No
>End Sub

ここでA2セル+1をセットして、Call No でさらに+1。
A2セルが 2 だったら 2+1+1 で 4。
UserForm_Initializeイベントで一定のセル値(A2)しか見に行ってないから
そりゃ、固定になりますよね。

UserForm_Initializeイベントで一定のセル値(A2)ではなく
最終行の値を見に行くようにすれば良いですよね。

あと、Private Sub No()の中身も見直して下さい。
何か意図があってそういう書き方してますか?

「入力No.」を増分させるには何処かのタイミングで
TextBox3.Value = TextBox3.Value + 1
すれば良いです。
またはTextBox3に表示させる必要がなければ
新規データをセルにセットするタイミングで直上行+1でもいいわけです。
それとか .Row-1とか。
    • good
    • 0
この回答へのお礼

end-u様

先ほどに引き続き連続でアドバイスをしていただき、
ありがとうございます。

end-u様のアドバイスにもとづき
下記のようにコードを書き改めたところ、データベースに
連続した番号を振ることができるようになりました。

'ユーザーフォームの初期化
(3行目)
TextBox3.Value = Worksheets(1).Range("a10000").End(xlUp).Row

'Noの加算
(DimやForステートメントは削除。下記のコードのみ)
TextBox3.Value = TextBox3.Value + 1

>あと、Private Sub No()の中身も見直して下さい。
>何か意図があってそういう書き方してますか?

特に意図はありません。
手持ちの初級者用のテキストを読んでたら、頻出していたので
何となく自分の判断で使ってみました。

2つ続けてのご回答ありがとうございました。

お礼日時:2011/06/30 17:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!