• ベストアンサー

入力規則について

[環境] Windows2000 Access2000 ※スレ違いお許し下さい。同様の質問を下記URLで行ってます。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=744564 [問題点] Access2000で入力規則として「ひらがな」全角 「かたかな」全角 「英数字」半角 を自動で行い たいと思い一番簡単な手法を試行錯誤中です。 Dim i As Integer Dim ix As Integer Dim strChk As String Dim strMoji As String Dim strEisu As String Dim txtData As String Dim GetData As String strMoji = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン" strEisu = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" txtData = Trim(Me.テキスト5.Value) For i = 1 To Len(txtData) strChk = Mid$(txtData, i, 1) For ix = 1 To Len(strMoji) If StrComp(StrConv(Mid$(strMoji, ix, 1), vbFromUnicode), _ StrConv(strChk, vbFromUnicode), vbBinaryCompare) = 0 Then _ strChk = StrConv(strChk, 4) If StrComp(StrConv(Mid$(strEisu, ix, 1), vbFromUnicode), _ StrConv(strChk, vbFromUnicode), vbBinaryCompare) = 0 Then _ strChk = StrConv(strChk, 8) Next ix GetData = GetData & strChk Next i Me.テキスト5.Value = GetData ●上記以外の解決方法を考えております。

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

  • ベストアンサー
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.5

#2です。 DLLを利用する手順です。 おもむろに以下をダウンロードして解凍、nkf32.dllをc:\winnt\system32にコピーします。OSが9xの場合、c:\windows\systemかsystem32かな? 動作しない場合、windowsとかwinntとか、あちこち移してみてください。 NKF32.DLL http://www.vector.co.jp/soft/win95/util/se020949.html 変換処理のソースは、 Option Explicit の次の行あたりに、 Private Declare Sub ToHankaku Lib "nkf32" (ByVal dst As String) Private Declare Sub ToZenkakuKana Lib "nkf32" (ByVal dst As String, ByVal src As String) の宣言と、 Function Cnv2(ByVal strSrc As String) As String Dim strRet1 As String * 255 Dim strRet2 As String * 255 strRet1 = strSrc Call ToHankaku(strRet1) Call ToZenkakuKana(strRet2, strRet1) Cnv2 = Trim(strRet2) End Function だけで良いハズです。 この処理の場合、255文字以上入力すると、Accessが止まったりします。 半角カナ→全角カナの変換で文字数が増えるのが厄介ですね。 -- > 環境等の違いがあるのでしょうか? 私はWin2000Pro+Access2000の環境ですが、質問文の処理は半角カナ以外が期待通りに変換されているようでした。

参考URL:
http://www.vector.co.jp/soft/win95/util/se020949.html
popokun
質問者

お礼

丁寧な説明ありがとうございます。

その他の回答 (4)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

>>動かないですよ。文字の切り出し出来てません。 >>デバッグして確認してください。 > >すみません。再度確認しても正確に動いております。 >参照設定等のチェックも入れておりませんが、taka_tetsu様 >と環境等の違いがあるのでしょうか? ごめんなさい。勘違いです。MidBと間違えました。 ちゃんとそれで動きます・・・ >>#ちなみに漢字とか、記号(全角・半角共)ってどうするんですか? > >説明不足で申し訳ありません。漢字は全角・記号は半角で >考えております。 全角しかない記号は? ○←こんなのとか。おそらく全角のままでいいかと思いますが。 で、結局、半角カナや、全角英数が入力されたらどうするんですか? 全角カナや半角英数に変換するんですか? 使用できない文字があるってエラーにするだけですか? あと、 >゛「『』ー~ これって全部半角扱いじゃないでしょ? ゛、ー、「は半角カナになっちゃいますよ。 それに『』の半角ってどれに該当するんですか? ということで、 1.全角→半角に変換する文字の文字コードの範囲 2.半角→全角に変換する文字の文字コードの範囲 3.全角のままの文字の文字コードの範囲 を正しく調べることをお勧めします。 で、1文字ずつAsc()で文字コードに変換し、Select Caseで 1、2、3のどのパターンの文字か判断し、StrConvで 該当の文字に変換orエラーにすればよろしいかと。

popokun
質問者

お礼

たくさんの御指摘ありがとうございます。 範囲選択があいまいで、申し訳御座いません。 大変参考になりました。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>>strChk = Mid$(txtData, i, 1) >>これってAccess2000でちゃんと動きます? >>AC2000ってUnicodeだからだめだと思うんですけど。 > >一応重たいながらも動いております(^^;; 動かないですよ。文字の切り出し出来てません。 デバッグして確認してください。 >なるほど!追加の質問になってしまいますが、コード比較 >のほうが軽く出来るのでしょうか? 2重ループ&文字列比較よりは速いと思いますよ。 比較は文字ごとで文字種1種につき1回ですし。 #ちなみに漢字とか、記号(全角・半角共)ってどうするんですか?

popokun
質問者

補足

>動かないですよ。文字の切り出し出来てません。 >デバッグして確認してください。 すみません。再度確認しても正確に動いております。 参照設定等のチェックも入れておりませんが、taka_tetsu様と環境等の違いがあるのでしょうか? >#ちなみに漢字とか、記号(全角・半角共)ってどうするんですか? 説明不足で申し訳ありません。漢字は全角・記号は半角で考えております。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

> 入力規則として~を自動で行いたい 指定した文字列が、 全角かな、全角カナ、半角英数字 から構成されているか判断したい?という事でよいのでしょうか?自動的に置換したいのか、不明瞭です。 ゛「『』ー~ -1.2 abc_def I'm などはどうなります? -- > 簡単な手法を 文字単位だと面倒なので、 <元の文字列>と<元の文字列をひらがな→カタカナ変換した文字列>を比較、同じならひらがなは入っていない。 <元の文字列>と<元の文字列をカタカナ→ひらがな変換した文字列>を比較、同じならカタカナは入っていない。 <元の文字列>と<元の文字列を半角→全角変換した文字列>を比較、同じなら半角文字は入っていない。(半角の記号なんかはモレますが) とします。 -- または、既存のAPIなどで可能なものを探して、そちらを利用します。 Unicodeの話が入ると結構面倒な気もしますが。

popokun
質問者

補足

説明不足で、すみません。 >゛「『』ー~ >-1.2 >abc_def >I'm は考えておりませんでした。基本的には半角扱いです。 "あいう・ABC・ABC・アイウ・アイウ・123・123"   ↓↓↓ "あいう・ABC・ABC・アイウ・アイウ・123・123" と言った感じで、大雑把ですが基本は1バイト「カナ」文字を禁止して、それ以外の記号・英数字を半角扱いにしたい。と質問を言い換えさせて下さい。 私ほとんどAPIを利用することが無いので、もしよろしければ、ちょっとした例を教えて頂けないでしょうか?

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

文字足りてないですけど(^^;; "ッ"とか"ゥ"とか。 >strChk = Mid$(txtData, i, 1) これってAccess2000でちゃんと動きます? AC2000ってUnicodeだからだめだと思うんですけど。 個人的には、対象の文字列を1文字ずつ文字コードにして、そのコードが該当文字種の範囲に入っているかどうかで判断します。

popokun
質問者

お礼

>文字足りてないですけど(^^;; >"ッ"とか"ゥ"とか。 すみません。失礼しました。。。(><) >strChk = Mid$(txtData, i, 1) >これってAccess2000でちゃんと動きます? >AC2000ってUnicodeだからだめだと思うんですけど。 一応重たいながらも動いております(^^;; >個人的には、対象の文字列を1文字ずつ文字コードにし >て、そのコードが該当文字種の範囲に入っているかどうか >で判断します。 なるほど!追加の質問になってしまいますが、コード比較 のほうが軽く出来るのでしょうか?

関連するQ&A

  • JIS codeでの文字数・桁数制限

    Access97を使用しております。 VBのカテゴリに近いと思い質問させて下さい。 >JIS codeでの文字数・桁数制限を行いたいのですが、 条件がきつく困ってます。 条件.(JIS)20文字で改行 MAXが25桁まで入力可能 >>一応行数は改行数を数えることで、取得できてます。 Dim i As Integer Dim strChk As String Dim intCnt As Integer '2桁取得し改行を認識させる。 For i = 1 To Len(Me.内容) - 1 strChk = Mid$(Me.内容, i, 2) If strChk = Chr(13) & Chr(10) Then intCnt = intCnt + 1 End If Next i Me.txtGyo = intCnt + 1 Exit Sub 文字数は通常1行であれば↓のようなコードですみますが、両方って・・・・; >改行マーク「Chr(13)&Chr(10)」迄が1行と考えるって事なんでしょうが初 心者には難しいくご教授お願い致します。 Dim strMoji As String Dim strChck As String strMoji = Me.内容 strChck = LenB(StrConv(strMoji, vbFromUnicode)) Me.txtMsg = "" If strChck >= 33 Then Me.txtMsg = "文字数がOverしてます。" Else Exit Sub   End If

  • VB2008で全角半角の判定

    VB2008で全角半角の判定 VB6 では下記のようにして判定していましたが、VB2008では どのようにすればよいのかお教えください。  dim moji as string dim zhN as integer  zhN = LenB(StrConv(moji, vbFromUnicode)) mojiには1文字格納されており、  半角なら zhN = 1 全角なら zhN = 2 となる。  これをVB2008で実現する方法がわかりません。  よろしくお願いします。

  • VBA(Excel2003)で文字列の切り出し

    下のプロシージャーで全角半角混じりの文字列を切り出し、別の文字列で結合しようと思いますがうまくいく場合といかない場合があります。 イミディエイト・ウィンドウ上とCell上で動作が違います。 Cell上でうまく表示させるにはどうしたらいいでしょうか? Sub Test() Dim myString(2) As String Dim i As Integer myString(0) = "airueo" myString(1) = "かきくけこ" myString(2) = "さシすせそ" For i = 0 To 2 Debug.Print MidMbcs(myString(i), 1, 5) & "...テスト" Cells(i + 1, 1).Value = MidMbcs(myString(i), 1, 5) & "...テスト" Next i End Sub Function LenMbcs(ByVal str As String) LenMbcs = LenB(StrConv(str, vbFromUnicode)) End Function Function MidMbcs(ByVal str As String, start, length) MidMbcs = StrConv(MidB(StrConv(str, vbFromUnicode), start, length), vbUnicode) End Function

  • 大小・全半角の禁止文字?

    Access97を使用しております。 現在↓のような形で禁止文字を設定しておりますが、大英字全角のAでも 小英字半角のaでも全て禁止文字として認識されてしまいます。 >>たぶんUnicodeのせいだと・・・(泣) これを例えば小半角英字の「a」のみを禁止文字として認識させるにはどの ような方法があるのでしょうか?ご教授お願い致します。   Dim R As Integer Dim strChk As String Dim strMoji As String '禁止文字チェック strMoji = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz "   Me.txtMsg = "" For R = 1 To Len(Me.内容) strChk = Mid$(Me.内容, R, 1) If InStr(strMoji, strChk) <> 0 Then Me.txtMsg = "入力禁止文字「 " & strChk & " 」が使用されています。" Exit Sub Exit For End If Next R

  • Excel VBA セル選択

    Sub 全角() Dim i As Long, buf As String For i = 1 To Len(ActiveCell.Value) If Mid(ActiveCell.Value, i, 1) Like "[ア-ン]" Then buf = buf & StrConv(Mid(ActiveCell.Value, i, 1), vbWide) Else buf = buf & Mid(ActiveCell.Value, i, 1) End If Next i ActiveCell.Value = buf End Sub このコードだと一つのセルしか変換できません。 選択した範囲全部を変換できるようにしたいです。

  • ExcelVBA 全角と半角文字

    恐れ入ります。 ExcelVBAの質問ですが、 ********************************************************** Function AscEx2(strOrg As String) As String Dim strRet As String Dim intLoop As Integer Dim strChar As String strRet = "" For intLoop = 1 To Len(strOrg) strChar = Mid(strOrg, intLoop, 1) If (strChar >= "A" And strChar <= "Z") _ Or (strChar >= "a" And strChar <= "z") Then strRet = strRet & StrConv(strChar, vbNarrow) Else strRet = strRet & strChar End If Next intLoop AscEx2 = strRet End Function ********************************************************** 上記のコードで、カタカナを全角、アルファベットを半角にできたのですが、 下記のこの部分の意味がいまひとつ理解できません。 「strRet = "" strRet = strRet & StrConv(strChar, vbNarrow)」 どういった解釈になるのか、お分かりになられる方は、 ご教示を宜しくお願い致します。

  • コマンドプロンプトで実行したら・・・

    Function SpaceDelete(dt As String) As String Dim tmp As String Dim Aftr As String Dim i As Integer For i = 1 To Len(dt) tmp = Mid(dt, i, 1) If tmp <> " " And tmp <> " " Then Aftr = Aftr & tmp End If Next i SpaceDelete = Aftr End Function test.vbs(1,25) Microsoft VBScript コンパイル エラー: ')'がありません。とエラーがでます。 どこが問題かわかりません。 どなたか教えて頂けないでしょうか。 宜しくお願いします。

  • プログラミングVisual Basicの質問です。

    任意の数字を入力し、Len関数とMid関数を使って2進数を10進数に変換するというプログラムを作っているのですが、うまくいきません。 コードは Dim a  As Integer Dim b  As Integer Dim i  As Integer a = Val(TextBox1.Text) For i = Len(a) To 1 Step -1 If Mid(a, Len(a), 1) = "1" Then b += 2 ^ (i - 1) End If Next Label3.Text = b    End Sub 上記のものが作ったコードです。 問題点の指摘をよろしくお願いします。

  • 【Excel VBA】A列の全角・半角文字をチェック

    【Excel VBA】A列の全角・半角文字をチェック Excel VBAの初心者です。 仕事で必要なため、教えていただけると助かります。 【やりたいこと】 Excel VBAで、入力が完了したExcelシートのA列(A1からA10)が、 半角のみであること、または全角が入力されていないこと、を チェックしたいです。 半角以外の文字があった場合は、メッセージを表示します。 また、半角以外のセルがあった場合は、そのセルの色を水色にします。 入力チェックの方法は、ボタンにマクロを登録して、 そのボタンを押下することで行います。 以下に、僕が試したプログラムを記します。 アドバイスをいただけると幸いです。よろしくお願いします。 Sub 入力チェック() Dim cellValue As String Dim strANSI As String Dim i As Integer For i = 0 To 10 cellValue = Cells(1, i + 1) strANSI = StrConv(cellValue, vbFromUnicode) If Len(cellValue) = LenB(strANSI) Then MsgBox "セルは半角のみ" myColor = 8 Else MsgBox "セルの内容は全角のみ" End If MsgBox "セルの内容は全角と半角があり" Next i End Sub

  • Excelのユーザー定義関数について。

    ネットで調べて「アルファベットのみを半角にする」というユーザー定義関数を発見し使用していますが、 この関数にある特定の文字を変換する条件を追加することはできますでしょうか。 例えば、リンゴ という文字がセル内にある場合、ミカン に変換されて表示されるという条件を下記のユーザー定義関数に加える事ができますか。 もしくは、新たに別のユーザー定義関数を作るしかないのでしょうか。アドバイスよろしくお願いします。m(_ _ )m Function ASC_A(str As String) As String Dim i As Integer For i = 1 To Len(str) If Mid(str, i, 1) Like "[a-zA-Z]" Then Mid(str, i, 1) = StrConv(Mid(str, i, 1), vbNarrow) End If Next ASC_A = str End Function