• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:半角の"/"や"*"でプログラムを止めたいです。)

半角・全角のスラッシュとアスタリスクを半角のみ認識させる方法

このQ&Aのポイント
  • テキストボックスに入力された値を元に、APIを使ってフォルダを生成するプログラムを作成しています。しかし、生成したい値の中に、フォルダに指定できない文字”/ : * ? " <> |”が存在することが分かりました。そこで、LIKE関数を使って半角のスラッシュだけを認識する方法を探しています。
  • 現在のプログラムでは、Me.strFullPath Like "*/*" のように*を用いてスラッシュを検索していますが、この方法では半角でも全角でもスラッシュが認識されてしまいます。スラッシュやアスタリスクを半角のみ認識させるためにはどのようにすれば良いでしょうか。
  • 具体的な方法についての例を教えていただけると助かります。

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

  • ベストアンサー
回答No.2

> ダブルクォーテーションのみ、Instr関数に入れられなくて > 弾けなかったので、課題として残ってしまいました。 コードのリテラル文字列内("で囲まれている部分)では、ダブルクォーテーションは、"" と重ねます。 If InStr(1, Me.strFullPath, """",vbBinaryCompare) > 0 Then

jjj22
質問者

お礼

回答ありがとうございました。 最終的に、記号を判別する部分のみ、別のモジュールで 判別させることで、対応できました。 Function InStrCalc(ByRef strFullPathCheck As String) As Integer Dim InStrResult As Integer If InStr(1, strFullPath, "/", vbBinaryCompare) > 0 _ Or InStr(1, strFullPathCheck, "?", vbBinaryCompare) > 0 _ Or InStr(1, strFullPathCheck, "<", vbBinaryCompare) > 0 _ Or InStr(1, strFullPathCheck, ">", vbBinaryCompare) > 0 _ Or InStr(1, strFullPathCheck, "|", vbBinaryCompare) > 0 _ Or InStr(1, strFullPathCheck, "*", vbBinaryCompare) > 0 _ Or InStr(1, strFullPathCheck, """", vbBinaryCompare) > 0 _ Or InStr(1, strFullPathCheck, ":", vbBinaryCompare) > 0 Then  InStrResult = 1 Else    InStrResult = 0 End If End Function

jjj22
質問者

補足

ダブルクォーテーション出来ました。 ありがとうございます。回答No1で ダブルクォーテーションのみ、と書きましたが コロンを条件に加えると、コロンが無くても 反応してしまうようです。 コロンは、Option Compare Binaryで Like関数が対応できることを確認しました。 あまりスマートではないですが、別のモジュールを 呼び出すように変更しようかと思います。

その他の回答 (1)

回答No.1

第一案 Likeではなく、InStr関数を使って比較する。 If InStr(1, Me.strFullPath, "/",vbBinaryCompare) > 0 Then 第4引数に vbBinaryCompare を指定することで、全角、半角を区別して比較します。 第二案 モジュールの先頭部分に、デフォルトでは、 Option Compare Database Option Explicit と記述されている(2行目はない場合もある)が、それを下記のように変更する。 Option Compare Binary Option Explicit これで、Like で比較しても、全角、半角を区別するので、 If Me.strFullPath Like "*/*" Then のままでよい。 ただし、モジュール内の比較が、すべてバイナリーモードでの比較になるので注意が必要。

jjj22
質問者

お礼

回答ありがとうございます。 InStr関数で、/ : * ? <> |を弾くのは出来ました。 知識不足では有りますが、文字コードを判別して 数値計算を行っている部分があるので、モジュール内を 全てバイナリモードにするのは、不具合が出そうです。 ダブルクォーテーションのみ、Instr関数に入れられなくて 弾けなかったので、課題として残ってしまいました。

関連するQ&A