Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6064 / 13645 ツリー ←次へ | 前へ→

【47391】数字の更新 ねこ 07/3/9(金) 11:44 質問[未読]
【47393】Re:数字の更新 ああ 07/3/9(金) 11:53 回答[未読]
【47404】Re:数字の更新 Kein 07/3/9(金) 14:02 回答[未読]
【47420】Re:数字の更新 ねこ 07/3/9(金) 15:16 お礼[未読]

【47391】数字の更新
質問  ねこ  - 07/3/9(金) 11:44 -

引用なし
パスワード
   ユーザーフォーム内にテキストボックス1とコマンドボタン1を作成します。
テキストボックスに数字を(例えば"123456-1")といれ、コマンドボタンを押すと
"-"より後が1,2,3と数字が増えていくように更新を行いたいのですが、どうすればいいでしょうか・・
("123456-1"の次は"123456-2""123456-3"となっていきたい。)
まったくの素人でいろいろ参考にしてみたのですがうまくうごかず。。
どなたかお分かりになりましたらよろしくお願いします。

【47393】Re:数字の更新
回答  ああ  - 07/3/9(金) 11:53 -

引用なし
パスワード
   コマンドボタン1のクリックイベントに

[テキストボックス1] = Left([テキストボックス1], 7) & Val(Right([テキストボックス1], 1) + 1

みたいな感じでいけそうですが…

【47404】Re:数字の更新
回答  Kein  - 07/3/9(金) 14:02 -

引用なし
パスワード
   ボタンを押したとき最初にする処理は、テキストボックスの値が
目的どおりの形になっているかどうか、の判定です。
で、その質問から目的の形を定義したとき「数値+ハイフン+数値」
とするなら、最も厳密な判定ができそうなのは"正規表現"である
ような気がします。ただ、それを使うとコードは長く複雑になり、
メンテナンス性が悪くなる懸念があるので、とりうえずExcelが持っている
関数やプロパティ等だけを使って、簡易に判定した方が良いでしょう。
例えばこのようなコードです。

Private Sub CommandButton1_Click()
  Dim Pt As Integer
  Dim GetV As Variant
  Dim Num As Long

  With TextBox1
   Pt = InStr(1, .Text, "-")
   If Pt < 2 Or Pt = Len(.Text) Then Exit Sub
   GetV = Mid(.Text, Pt + 1)
   If Not IsNumeric(GetV) Then Exit Sub
   Num = Val(GetV) + 1
   .Text = Left(.Text, Pt) & Num
  End With
End Sub

テキストボックスの値を変更するコードなので、フォームモジュールにはTextBox1_Change のようなイベントマクロを入れてはいけません。
どうしても必要なら
>.Text = Left(.Text, Pt) & Num
の前後に Application.EnableEvents を設定するコードを入れ、
イベントが走るのを止めたり復活させたりして制御して下さい。

【47420】Re:数字の更新
お礼  ねこ  - 07/3/9(金) 15:16 -

引用なし
パスワード
   お二人のパターンでできました!!ありがとうございます!!!
大感激!!

6064 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free