Excel VBA質問箱 IV

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

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


12749 / 13646 ツリー ←次へ | 前へ→

【8835】入力規則 テーブル 03/11/5(水) 18:15 質問
【8836】Re:入力規則 INA 03/11/5(水) 18:25 回答
【8862】Re:入力規則 テーブル 03/11/6(木) 15:27 質問
【8867】Re:入力規則 INA 03/11/6(木) 17:43 回答
【8870】Re:入力規則 テーブル 03/11/6(木) 18:29 お礼

【8835】入力規則
質問  テーブル E-MAIL  - 03/11/5(水) 18:15 -

引用なし
パスワード
   お世話になっております。ちょっと難しいので、前も入力規則の事について質問させていただいたのですが、よろしくお願い致します。

1つのセル内に↓のような「文字列」表示の17桁の文字があります。

○○○|○○|○○○○○|○|○○○○|○○|
↑   ↑    ↑   ↑   ↑   ↑
A   B     C   D    E   F

A=文字数は3桁、半角英数字
B=文字数は2桁ブランクを含む、半角英数字
C=文字数は5桁ブランクを含む、半角英数字
D=文字数は1桁、半角カナor英文字(A〜Zの文字)
E=数字で4桁。
F=00と表示

上記の条件を満たすようなプログラムにするにはどうしたら良いでしょうか。
どうかよろしくお願い致します。

【8836】Re:入力規則
回答  INA  - 03/11/5(水) 18:25 -

引用なし
パスワード
   mid関数で、1文字ずつ条件判別しては?

dim i as long

for i = 1 to 17
select case i
case 1 to 3
  if mid(文字,i,1) then
  'ここで判別
 
case 4,5

case 6 to 10

End select
next i


ここが参考になるかも・・ascコードで文字を判別してます。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=8649;id=excel

【8862】Re:入力規則
質問  テーブル E-MAIL  - 03/11/6(木) 15:27 -

引用なし
パスワード
   いつもご回答ありがとうございます。
せっかくINAさんの教えてくれた物を使って見たのですがエラーが出ます・・・・
何か間違っていますでしょうか?
Sub 規則()
For j = 1 To 17
Select Case j
Case 1 To 10
  If Mid(Len(Target.Value) <> 10, j, 1) Then
  'ここで判別
  MsgBox "10桁で入力していますか?"
  End If

Case 11 To 11
  If Mid(IMEMode = xlIMEModeKatakanaHalf, j, 1) Then
  Else: MsgBox "半角カナで11桁目は入力してください"
  End If

Case 12 To 15
   '文字数
  If Mid(Len(Target.Value) <> 4, j, 1) Then
   MsgBox "4文字入力してください"
  End If

  '1文字ずつASCIコードでチェック
  For k = 1 To 4
    If Asc(Mid(Target.Value, k, 1)) >= 48 And _
      Asc(Mid(Target.Value, k, 1)) <= 57 Then
    Else
      MsgBox "0〜9 以外の文字が入力されています。"
    End If
  Next k
  
Case 16 To 17
  If Mid("00", j, 1) Then
  Else
  MsgBox "16桁〜17桁目は、00を入力してください"
  End If
End Select
Next j

End Sub

【8867】Re:入力規則
回答  INA  - 03/11/6(木) 17:43 -

引用なし
パスワード
   チェンジイベントで作ってみました。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim j As Long

'空白の時は、終了
  If Target.Value = "" Then Exit Sub
  
'文字数の判別
  If Len(Target.Value) <> 17 Then
    MsgBox "17文字にして下さい。"
    GoTo エラー
  End If

'最後の2文字を判別
  If Right(Target.Value, 2) <> "00" Then
    MsgBox "16,17桁目は、00 にして下さい。"
    GoTo エラー
  End If

'1文字目から15文字目を1文字ずつチェック
  For j = 1 To 15
    'MsgBox Asc(Mid(Target.Value, j, 1))
    
    Select Case j
    Case 1 To 3
      If Asc(Mid(Target.Value, j, 1)) >= 48 And _
       Asc(Mid(Target.Value, j, 1)) <= 57 Or _
       Asc(Mid(Target.Value, j, 1)) >= 65 And _
       Asc(Mid(Target.Value, j, 1)) <= 90 Or _
       Asc(Mid(Target.Value, j, 1)) >= 97 And _
       Asc(Mid(Target.Value, j, 1)) <= 122 Then
      Else
        MsgBox "最初の3桁は半角英数字にして下さい。"
        GoTo エラー
      End If
    
    Case 4 To 10
      If Asc(Mid(Target.Value, j, 1)) >= 48 And _
       Asc(Mid(Target.Value, j, 1)) <= 57 Or _
       Asc(Mid(Target.Value, j, 1)) >= 65 And _
       Asc(Mid(Target.Value, j, 1)) <= 90 Or _
       Asc(Mid(Target.Value, j, 1)) >= 97 And _
       Asc(Mid(Target.Value, j, 1)) <= 122 Or _
       Asc(Mid(Target.Value, j, 1)) = 32 Then
      Else
        MsgBox "4〜10桁目は半角英数字又は半角スペースにして下さい。"
        GoTo エラー
      End If
     
    Case 11
      If Asc(Mid(Target.Value, j, 1)) >= 177 And _
       Asc(Mid(Target.Value, j, 1)) <= 221 Or _
       Asc(Mid(Target.Value, j, 1)) >= 65 And _
       Asc(Mid(Target.Value, j, 1)) <= 90 Then
      Else
        MsgBox "11桁目は半角カナ又は半角英大文字(A〜Z)にして下さい。 "
        GoTo エラー
      End If

    Case 12 To 15
      If Asc(Mid(Target.Value, j, 1)) >= 48 And _
        Asc(Mid(Target.Value, j, 1)) <= 57 Then
      Else
        MsgBox "12〜15桁目は半角数字にして下さい。 "
        GoTo エラー
      End If
    
    End Select
    
  Next j
  
Exit Sub '終了

'エラー処理
エラー:
  Target.Value = ""
  Target.Select
End Sub

【8870】Re:入力規則
お礼  テーブル E-MAIL  - 03/11/6(木) 18:29 -

引用なし
パスワード
   ▼INA さん:
どうも、ありがとうございました!! 本当に助かりました。

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