Excel VBA質問箱 IV

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

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


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

【14653】ユーザーフォームのテキストボックスにつ... NAO 04/6/3(木) 21:38 質問[未読]
【14657】Re:ユーザーフォームのテキストボックスに... [名前なし] 04/6/3(木) 22:04 回答[未読]
【14658】Re:ユーザーフォームのテキストボックスに... ちゃっぴ 04/6/3(木) 22:13 回答[未読]
【14659】Re:ユーザーフォームのテキストボックスに... あわびが旬 04/6/3(木) 22:23 回答[未読]
【14666】Re:ユーザーフォームのテキストボックスに... NAO 04/6/4(金) 0:00 お礼[未読]
【14665】Re:ユーザーフォームのテキストボックスに... NAO 04/6/3(木) 23:58 お礼[未読]
【14664】Re:ユーザーフォームのテキストボックスに... NAO 04/6/3(木) 23:52 お礼[未読]
【14660】Re:ユーザーフォームのテキストボックスに... ichinose 04/6/3(木) 22:39 発言[未読]
【14661】Re:ユーザーフォームのテキストボックスに... ichinose 04/6/3(木) 22:59 発言[未読]
【14667】Re:ユーザーフォームのテキストボックスに... NAO 04/6/4(金) 0:08 お礼[未読]
【14668】Re:ユーザーフォームのテキストボックスに... NAO 04/6/4(金) 0:41 質問[未読]
【14670】Re:ユーザーフォームのテキストボックスに... かみちゃん 04/6/4(金) 7:07 回答[未読]
【14671】Re:ユーザーフォームのテキストボックスに... NAO 04/6/4(金) 7:27 お礼[未読]

【14653】ユーザーフォームのテキストボックスにつ...
質問  NAO  - 04/6/3(木) 21:38 -

引用なし
パスワード
   こんばんわ、NAOです。いつもお世話になっています。
今回初めてユーザーフォームに取り組むことになりました。

以下の2点についてお教え願いたいと思います。
参考書やHPで解決方法を見つけることができず、困っております。

フォーム上に複数のリストボックスやテキストボックスなどを設け、入力や選択されたものをシート1、シート2に転記するようにしていますが、以下のところをどのようにすれば良いのか分かりません。

一点目は、
 電話番号等を記入するテキストボックスは、半角の数値しか入力出来ないように、また、住所等のテキストボックスは全角の文字しか入力出来ないようにしたい。

二点目は、
 テキストボックスに8桁の半角数値を入力すると、シートのセル上には年月日が表示される。たとえば、テキストボックスに 20040603 と入力すると、シート1のセルA5には 平成16年6月3日 と表記したい。

以上2点について、よろしくご教授お願いしたいと思います。
 

【14657】Re:ユーザーフォームのテキストボックス...
回答  [名前なし]  - 04/6/3(木) 22:04 -

引用なし
パスワード
   【一点目】
テキストボックスのExitイベントで半角かどうか判定すればいいと思います。

個人的には、半角かどうかチェックするよりStrConv関数を使用して、
半角に変換して出力すればいいと思います。
(Numericチェックは必要ですが・・・)

【二点目】
Format関数を使うか、セルの書式を変更しましょう。

【14658】Re:ユーザーフォームのテキストボックス...
回答  ちゃっぴ  - 04/6/3(木) 22:13 -

引用なし
パスワード
   >【二点目】
>Format関数を使うか、セルの書式を変更しましょう。

補足です。Mid関数を使い事前に区切ってから"/"でつないでやる必要があります。

例)
strDate = "20040602"
Left$(strDate, 4) & "/" & Mid$(strDate, 5, 2) & "/" & Right$(strDate, 2)

【14659】Re:ユーザーフォームのテキストボックス...
回答  あわびが旬  - 04/6/3(木) 22:23 -

引用なし
パスワード
   フォームのテキストボックスのプロパティで
ImeMODEというところがあります
ここの選択で半角入力や全角入力の制限が出来ます

【14660】Re:ユーザーフォームのテキストボックス...
発言  ichinose  - 04/6/3(木) 22:39 -

引用なし
パスワード
   ▼NAO さん:
こんばんは。
例題として、ユーザーフォーム(Userform1)に
テキストボックスを3つ貼り付けて下さい

Textbox1 TEL用

Textbox2 Address用

Textbox3 Date用

として・・・。

当該フォームモジュールに
'===================================================================
Private Sub TextBox1_Change()
'TEL用 半角数値のみ入力可能とする
  With TextBox1
   retcode = 1
   If IsNumeric(.Text) = True Then
     If StrConv(.Text, vbNarrow) = .Text Then
      retcode = 0
      End If
     End If
   If retcode <> 0 Then
     If Len(.Text) > 0 Then .Text = Left(.Text, Len(.Text) - 1)
     End If
   End With
End Sub
'=====================================================================
Private Sub TextBox2_Change()
'Address用 全角のみ入力可能
  With TextBox2
   retcode = 1
   If StrConv(.Text, vbWide) = .Text Then
     retcode = 0
     End If
   If retcode <> 0 Then
     If Len(.Text) > 0 Then .Text = Left(.Text, Len(.Text) - 1)
     End If
   End With
End Sub
'=====================================================================
Private Sub TextBox3_Change()
'Date用 半角数値のみ入力可能
  With TextBox3
   retcode = 1
   If IsNumeric(.Text) = True Then
     If StrConv(.Text, vbNarrow) = .Text Then
      retcode = 0
      End If
     End If
   If retcode <> 0 Then
     If Len(.Text) > 0 Then .Text = Left(.Text, Len(.Text) - 1)
     End If
   End With
End Sub
'==========================================================================
Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Date用 文字列長が8で日付変換可能な場合セルにセット
  If KeyCode = 13 Then
   With TextBox3
     If Len(.Text) = 8 And IsDate(Format$(.Text, "0000""/""00""/""00")) Then
      Worksheets("sheet1").Cells(5, 1).Value = Format$(.Text, "0000""/""00""/""00")
      Worksheets("sheet1").Cells(5, 1).NumberFormatLocal = "ggge""年""m""月""d""日"""
     Else
      MsgBox "日付指定誤り"
      KeyCode = 0
      End If
     End With
   End If
End Sub

最後のTextbox3_KeyDownイベントは、Exitイベントでもいいかもしれません。
(コードがちょっとだけ違ってくるけど)

試してみて下さい。

【14661】Re:ユーザーフォームのテキストボックス...
発言  ichinose  - 04/6/3(木) 22:59 -

引用なし
パスワード
   追伸

書き忘れましたが、数値のチェックは、
本当はIsnumeric関数だけではちょっと甘いところもあるんです。
「.」や「-」は、OKになってしまいますから・・・。
「それじゃあ、困る」というなら、もっと厳しくチェックをかけるしかないですが。

【14664】Re:ユーザーフォームのテキストボックス...
お礼  NAO  - 04/6/3(木) 23:52 -

引用なし
パスワード
   ▼[名前なし] さん:

早速の回答、ありがとうございました。
さて、実際に具体的にはどうするのかと考えていたところ、ichinoseさんの回答をいただきましたので、活用させていただくことにしました。

どうもありがとうございました。

【14665】Re:ユーザーフォームのテキストボックス...
お礼  NAO  - 04/6/3(木) 23:58 -

引用なし
パスワード
   ▼ちゃっぴ さん:
ありがとうございました。

>>【二点目】
>>Format関数を使うか、セルの書式を変更しましょう。
>
>補足です。Mid関数を使い事前に区切ってから"/"でつないでやる必要があります。
>
>例)
>strDate = "20040602"
>Left$(strDate, 4) & "/" & Mid$(strDate, 5, 2) & "/" & Right$(strDate, 2)

テキストボックスに入力された数値を、どうstrDateに取り込むのかが分かりません。
初心者なものですみません。

【14666】Re:ユーザーフォームのテキストボックス...
お礼  NAO  - 04/6/4(金) 0:00 -

引用なし
パスワード
   ▼あわびが旬 さん:
ありがとうございました。

>フォームのテキストボックスのプロパティで
>ImeMODEというところがあります
>ここの選択で半角入力や全角入力の制限が出来ます

0から8までの fmIME Mode..があり、いろいろ試してみました。

【14667】Re:ユーザーフォームのテキストボックス...
お礼  NAO  - 04/6/4(金) 0:08 -

引用なし
パスワード
   ▼ichinose さん:

ありがとうございました。

>書き忘れましたが、数値のチェックは、
>本当はIsnumeric関数だけではちょっと甘いところもあるんです。

数値のみ入力のところは、半角/全角キーを押すと、全角文字の記入も可能になりましたが、フォームを開いたときには、半角モードになっていますので、ichinoseさんのコードを活用させていただきます。

【14668】Re:ユーザーフォームのテキストボックス...
質問  NAO  - 04/6/4(金) 0:41 -

引用なし
パスワード
   ▼ichinose さん:
ありがとうございました。

一点目の半角、全角入力について、ichinoseさんのコードを利用させていただきたいと思います。

二点目の年月日についてですが、ユーザーフォームのテキストボックスに入力された数値をフォーム上のボタンにより、「受付一覧シート」と「処理カードシート」の2種類のシートに年月日として転記します。
コードは、

Private Sub CommandButton1_Click()

 Dim lastRow As Integer
 Worksheets("受付一覧").Activate
 lastRow=Worksheets("受付一覧").range("A65536").End(xlUp).Row

 '年月日の転記
   '受付一覧シートへ
     Worksheets("受付一覧").Cells(lastRow,8).Value=Me.TextBox1.Value

   '処理カードシートへ  
      Worksheets("処理カード").Range ("C19").Value=Me.TextBox1.Value

End Sub
 
としておりますが、年月日として転記はされていません。


ご教授願った下記のコードなのですが、ボタンにより、フォームに入力した他の事項と一緒に転記するにはどこに記入すれば良いのでしょうか。
分かりにくい質問で申し訳ありません。


>Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

【14670】Re:ユーザーフォームのテキストボックス...
回答  かみちゃん  - 04/6/4(金) 7:07 -

引用なし
パスワード
   こんにちは。かみちゃん です。

横レスで失礼します。

>としておりますが、年月日として転記はされていません。
>
>
>ご教授願った下記のコードなのですが、ボタンにより、フォームに入力した他の事項と一緒に転記するにはどこに記入すれば良いのでしょうか。

ichinoseさんが、ご説明されている、下記のコメントをヒントにします。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=14660;id=excel

以下のようにするとできます。(動作確認済み)
Private Sub CommandButton1_Click()

 Dim lastRow As Integer
 Worksheets("受付一覧").Activate
 lastRow = Worksheets("受付一覧").Range("A65536").End(xlUp).Row

 '年月日の転記
   '受付一覧シートへ
      Worksheets("受付一覧").Cells(lastRow, 8).Value = Format$(Me.TextBox1.Value, "0000""/""00""/""00")
      Worksheets("受付一覧").Cells(lastRow, 8).NumberFormatLocal = "ggge""年""m""月""d""日"""

   '処理カードシートへ
      Worksheets("処理カード").Range("C19").Value = Format$(Me.TextBox1.Value, "0000""/""00""/""00")
      Worksheets("処理カード").Range("C19").NumberFormatLocal = "ggge""年""m""月""d""日"""

End Sub

【14671】Re:ユーザーフォームのテキストボックス...
お礼  NAO  - 04/6/4(金) 7:27 -

引用なし
パスワード
   ▼かみちゃん さん:
かみちゃんさん、おはようございます。

ありがとうございました。
おかげさまで解決しました。

[名前なし]さん、ちゃっぴさん、あわびが旬さん、ichinoseさん、皆さんありがとうございました。

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