JISコードでの文字数・桁数制限の困りごと

このQ&Aのポイント
  • Access97を使用しており、JISコードでの文字数・桁数制限について困っています。
  • JISコードでの条件は、20文字で改行し、最大25桁までの入力が可能です。
  • 文字数の取得は行数の改行数を数えることで行っていますが、両方の制限を満たす方法がわかりません。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。再びmaruru01です。 ちょっと気になったので書きます。 If文のElseの部分は、改行が文末になかった場合に、一番後ろの改行より後ろに残った文を格納するための記述です。 pooh_200xさんのコードだと、この部分の文字数チェックが出来ません。(もちろん、必ず文末に改行があるなら問題はないわけですが。) 従って、とりあえず、各行ごとに配列に格納してしまって、その後であらためてループを回して、文字数を確認していった方がいいような気がします。 蛇足になってしまったらすみません。 では。

pooh_200x
質問者

お礼

・・・その通りでした。(恥; ポイント発行する前に気づいて頂いて助かりました。 >その後、問題も解決し順調に動作しております。 >本当にありがとうございます。

その他の回答 (2)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 一応Windows改行(Chr(13) & Chr(10))として回答します。 まず、1行ずつ配列に格納します。 Dim RowData() As String Dim Str As String Dim p As Long Dim i As Long Str = Me!内容.Text i = 0 Do While Len(Str) <> 0   p = InStr(1, Str, Chr(13))   If p <> 0 Then     ReDim Preserve RowData(i)     RowData(i) = Left(Str, p - 1)     Str = Mid(Str, p + 2)     i = i + 1   Else     ReDim Preserve RowData(i)     RowData(i) = Str     i = i + 1     Exit Do   End If Loop これで、RowData(0)~RowData(i-1)に各行のデータが格納されます。 行数はiです。なお、改行は除いて格納されます。 あとは、ループをまわして、各行について文字数を調べればOKです。 参考になれば幸いです。 では。

pooh_200x
質問者

お礼

できました! ありがとうございます。 Dim RowData() As String Dim Str As String Dim p As Long Dim i As Long Dim strChck As String Dim strMoj As String Str = Me.募集内容 i = 0 Do While Len(Str) <> 0 p = InStr(1, Str, Chr(13)) If p <> 0 Then ReDim Preserve RowData(i) RowData(i) = Left(Str, p - 1) '文字数チェック strMoj = RowData(i) strChck = LenB(StrConv(strMoj, vbFromUnicode)) Me.txtMsg = "" If strChck >= 33 Then i = i + 1 Me.txtMsg = " " & i & "行目の文字数がOverしてます。" Exit Sub End If Str = Mid(Str, p + 2) i = i + 1 Else ReDim Preserve RowData(i) RowData(i) = Str i = i + 1 Exit Do End If Loop

noname#9414
noname#9414
回答No.1

Windowsだと改行がASCIIコード13と10で1文字だからです。 Macの場合は13だけ、UNIXだと10だけになりますね。 #基本的にですが・・・ それ以上のことは文字コードについて調べてください。 ではでは☆

pooh_200x
質問者

お礼

回答ありがとうございます。 質問の仕方が悪くてスミマセン。 1つのテキストボックス内で「横が(ASCII)20文字以内・縦が25行以内」 と言う条件で、文字Over(1行>20文字)の取得方法が知りたいです。 >>よろしくお願い致します。(ヒントだけでも・・・(汗;)

関連するQ&A

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

    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

  • JISコードにエンコードすると、半角カタカナが全角になってしまう

    VB2005を使っています。 本を参考に「JISコードに変換する」コードを 記述してみましたが、どうも半角カタカナが全角になってしまうようです。 以下のようなコードです、 ご存知の方、よろしくお願いいたします。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '元の文字列 TextBox1.Text = "コネコ" '←ここの「コネコ」は半角で。 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim TextFile As IO.StreamWriter Dim Data() As Byte 'JISコードに変換 Data = Encoding.GetEncoding("iso-2022-jp").GetBytes(TextBox1.Text) 'ファイルに文字列を書き込む TextFile = IO.File.AppendText("C:\TEST.TXT") TextFile.Write(ChgString(Data)) TextFile.Close() MsgBox("osimai") End Sub Private Function ChgString(ByVal bytString As Byte()) As String Dim intCnt As Integer ChgString = "" For intCnt = 0 To UBound(bytString) ChgString &= Chr(bytString(intCnt)) Next End Function

  • 入力規則について

    [環境] 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 ●上記以外の解決方法を考えております。

  • vbaで環境編巣のパスだけ取得したい

    Sub Sample() Dim Env As String, i As Integer Do i = i + 1 If Environ(i) = "" Then Exit Do Env = Env & Environ(i) & Chr(13) & Chr(10) Loop MsgBox Env End Sub このコードを実行すると、パス以外にもいろいろ取得されてしまうのですが パスのみ取得するにはどうすればいいでしょうか?

  • VBA 文字列の抜き出し

    VBAで文字列の抜き出しの方法を教えてください。 同様な質問があり、参考にしてみたのですがうまくいきません。 お分かりの方がいましたらご享受お願いいたします。 30~45字からなる文字列があります。 その中に特定の文字列が2つあり、そのうちの最初の特定文字列に続く文字2つ目の特定文字列前までを抜き出したいのですがうまくいきません。 具体的には abcdefghi GN=12jikl PE=fghj456 という文字列のなかから"GN="と"PE="の中間の文字を取り出したいのですが、 自分で書いたものでは"PE="以上が抜き出され、"GN="より前の文字列を抜き出せませんでした。 GN=......, PE=......の文字数はそれぞれ不規則です。また、GN=...よりも前の文字数も不規則です。 以下が作成したものです。 Dim i As Integer Dim Srch As String Dim Btwn As String Const Chr1 As String = "GN " Const Chr2 As String = "PE" Dim m As String Set sheetobj = ThisWorkbook.Worksheets("A") With sheeobj lastrow = sheetobj.Cells(sheetobj.Rows.Count, 10).End(xlUp).Row For i = 2 To lastrow Srch = sheetobj.Cells(i, 10) Btwn = Mid(Srch, InStr(Srch, Chr1) + 1, InStr(Srch, Chr2) - InStr(Srch, Chr1) - 1) sheetobj.Cells(i, 9) = Btwn Next i End With End Sub なにかいい方法があれば教えて頂けたらと思います。 よろしくお願い致します。

  • Access テキスト インポート

    現在指定したファイルしかインポートしが出来ないのでこれを 指定したファイルをインポートしたいのですがどのようすれは、いいでしょうか?よろしくお願いします。 Private Sub コマンド5_Click() On Error Resume Next Dim MsgNo As Integer Dim Msg1, Msg2, Msg3 As String Dim su As String Dim cut As Integer Dim fd As String Dim suu As String Dim db As Database Dim d1 As Recordset Msg1 = " インポートを開始します。" Msg2 = "「DAT」ファイルがありません。" Msg3 = "「DAT」ファイルを c:\DATデータにコピーし、再度実行して下さい。" MsgNo = MsgBox(Chr(9) & Msg1 & Chr(9), 1) If MsgNo = 2 Then 'キャンセルボタンで終了 GoTo Exit_インポート_Click End If EmptyAllTable 'テーブルクリア Set db = CurrentDb Set d1 = db.OpenRecordset("t_製品データ") fd = Dir("C:\DATデータ\*.dat") If fd = "" Then 'ファイルがなければ、メッセージを表示、処理を戻します。 Beep MsgNo = MsgBox(Msg2 & Chr(13) & Chr(10) & Chr(13) & Chr(10) & Msg3, 16) GoTo Exit_インポート_Click End If

  • 数字の全角文字を調べる

    visual basic 2008に関する質問です。 テキストボックスに入力した文字列の中に、数字の全角文字が 含まれているかどうかをチェックするメソッドはありますか? 下記の内容でビルドすると、エラーとなります。 (ソースより抜粋)--------------------------------------- Dim str As String = TextBox1.Text Dim chr As Char = str.Chars(0) If ((chr >= &H8250) And (chr <= &H8258)) Then Label1.Text = "数字は半角文字で入力して下さい。" End If ------------------------------------------------------- (エラー内容)------------------------------------------- 演算子'>='は、型'Char'および'Integer'に対して定義されて いません。 演算子'<='は、型'Char'および'Integer'に対して定義されて いません。 ------------------------------------------------------- 使用OSは、Windows Vistaです。 質問とあわせて、上記のエラーの対処方法について教えて頂けると 助かります。

  • ☆文字列を抜き取る★

    テキストファイルに GetPoint = ErrMsg("おはよう",target) の行があるとします。 ダブルクオートでくくられた文字列だけを出力させたい場合 下記コードでどこが間違っているでしょうか?? 今のままだと全てのコードが出力になるんですよ。。。 アドバイスをいただけると幸いです。 Sub Main() Dim iFileNumber As Integer iFileNumber = FileSystem.FreeFile() Open "C:temp\sample.txt" For Input As #iFileNumber Dim stResult As String Dim stSerch As String Dim point As Long Do While (Not FileSystem.EOF(iFileNumber)) Dim stBuffer As String Line Input #iFileNumber, stBuffer stResult = stResult & stBuffer & vbNewLine If Instr(stResult,Chr(34)) > 0 Then If Instr(stResult,Chr(34)) > 0 Then v = stResult End If End If Loop Close #iFileNumber End Sub

  • 1から入力された数までの素因数を数えるプログラム

    こんにちは 1から入力された数(N)までの素因数を数えるプログラムを 作成したいのですが、うまくいきません。 たとえば10と入力すると2と表示されてしまいます。 どこがおかしいのかわかりません。 どなたか教えてください。おねがいします。 N個の配列を用意し、1を入れていき、 素因数でない数の要素には0をいれて、 最終的に1が入っている配列の数を数えて1~Nまでの 素因数の数を数える方法を考えています。 Dim M As Integer Dim N As Integer Dim i As Integer Dim j As Integer Dim sum As Integer Dim L(1000) As Double N = Val(TextBox1) M = N i = 1 Do Until i > N L(i) = 1 i = i + 1 Loop i = 2 Do Until i > M j = i * 2 Do Until j > M L(j) = 0 j = j + 1 Loop i = i + 1 Loop sum = 0 For i = 2 To N If L(i) = 1 Then sum = sum + 1 End If Next i

  • 文字コード変換で文字コード取得

    文字コードと改行コードを変更するマクロなのですが今のコードだと 読み込み元の文字コードがUTF-8のLFでないと正しい形で取り込むことができません。 そこで文字コードがUTF-8か改行コードがLFの時という条件を組みたいのですが色々試したのですができません 皆様のお力をおかしください。 Sub UTF8_LF→SJIS_CRLF() Dim strFilePath As String Dim objReadStream As Object Dim objWriteStream As Object Dim bytData() As Byte Const adTypeText = 2 Const adTypeBinary = 1 Const adReadLine = -2 Const adWriteLine = 1 Const adLF = 10 Const adCRLF = -1 Const adSaveCreateOverWrite = 2 Dim opnFile As Variant Dim fFilter As String Dim i As Integer fFilter = "xml Files ,*.xml" opnFile = Application.GetOpenFilename(FileFilter:=fFilter, MultiSelect:=True) If IsArray(opnFile) Then For i = 1 To UBound(opnFile) strFilePath = opnFile(i) Set objReadStream = CreateObject("ADODB.Stream") Set objWriteStream = CreateObject("ADODB.Stream") ' 読み込み元(Shift_JIS,CRLF) With objReadStream .Open .Type = adTypeText .Charset = "UTF-8" .LineSeparator = adLF .LoadFromFile strFilePath End With ' 書き込み先(UTF-8,LF) With objWriteStream .Open .Type = adTypeText .Charset = "Shift_JIS" .LineSeparator = adCRLF End With ' 1行ずつ変換 Application.DisplayStatusBar = True 'ステータスバーの表示 Application.StatusBar = Dir(opnFile(i)) & "を取得中・・・" 'ステータスバーに文字列表示 Do Until objReadStream.EOS objWriteStream.WriteText objReadStream.ReadText(adReadLine), adWriteLine Loop Application.StatusBar = False 'ステータスバーの制御を通常に戻す objReadStream.Close With objWriteStream .Position = 0 .Type = adTypeBinary .Position = 0 bytData = .Read .Close .Open .Position = 0 .Type = adTypeBinary .Write bytData .SaveToFile strFilePath, adSaveCreateOverWrite .Close End With Next Else MsgBox "キャンセルしました" End End If 宜しくお願いします。