• ベストアンサー

文字列にある特定文字の数

こんにちは。 文字列「C:\MYDOCU~1\THINKB~1\THINKB~1\TEMP」に"¥"がいくつ含まれているかを算出したく悩んでいます。どのような方法があるのか、是非アドバイスをください。よろしくお願いします。 ** 環境 ** VB6.0(sp5)

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.4

ご質問の「文字列」から察するにあるファイルのパス(ドライブ+パス+ファイル名)を ドライブ+パスとファイル名に分解する、のような使い方をされるのでしょうか? 先の例ですとstrArrey(numArrey)を参照すると「ファイル名のみ」が取得できます。 あと、Splitの反対で「JOIN関数」があります。 なお、Split,JoinはExcel2000以降のVBAでも利用可能です。 'ここから Dim strArrey() As String Dim numArrey As Integer Dim strPath As String strPath = "C:\MYDOCU~1\THINKB~1\THINKB~1\TEMP" strArrey() = Split(strPath, "\") numArrey = UBound(strArrey()) MsgBox "これがファイル名:[" & strArrey(numArrey) & "]" strArrey(numArrey) = "" strPath = Join(strArrey(), "\") MsgBox "これがパス名:[" & strPath & "]" 'ここまで

adachi
質問者

お礼

二度にわたり親身な回答していただき、本当にありがとうございます。 bin-chan様の言われるとおり、パスとファイル名に分解しようとしていました。 とどめ(!?)のJOIN関数はとても勉強になりました。現在つくっているプログラムに役立てそうです。 本当にありがとうございました。

その他の回答 (5)

  • fantasis
  • ベストアンサー率26% (14/52)
回答No.6

模範的なものを書かせていただきます。 Dim St as String Dim a as Integer, i as Integer St = "C:\MYDOCU~1\THINKB~1\THINKB~1\TEMP" For i = 1 To Len(St) If Right(Left(St, i), 1) = "\" Or Right(Left(St, i), 1) = "¥" Then a = a + 1 End If Next i If文の後の条件判断式は「\」が半角でも全角でも良いようにしています。多分これが一番分かりやすく簡単な方法だと思います。

adachi
質問者

お礼

回答していただき、本当にありがとうございます。 みなさまに教えて頂いた手法を試すのに時間がかかってしまい、返信が遅れてしまったことをお詫びします。 これだけの手法があるとは思ってもいませんでした。 どれも参考になった回答ばかりで、この中から次点などの返信をしなければいけない事がとても心苦しいです、、、 right、left関数を工夫するんですね。また、半角と全角についてのコメントがとても勉強になりました。 ありがとうございました。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.5

こんな方法はどうでしょうか。  Dim moji As String 'path  Dim Cot As Integer '\の個数  moji="C:\MYDOCU~1\THINKB~1\THINKB~1\TEMP"  Cot=Len(moji)-Len(Replace(moji,"\",""))

adachi
質問者

お礼

回答していただき、本当にありがとうございます。 みなさまに教えて頂いた手法を試すのに時間がかかってしまい、返信が遅れてしまったことをお詫びします。 これだけの手法があるとは思ってもいませんでした。 どれも参考になった回答ばかりで、この中から次点などの返信をしなければいけない事がとても心苦しいです、、、 Len関数の使い方は、意表をつかれたというか、眼からウロコが落ちた状態です(苦笑)nishi6様のような使い方があるんですね~。 ありがとうございました。

  • josyo_m
  • ベストアンサー率63% (28/44)
回答No.3

お疲れ様です。 いろいろな方法が考えられると思います^^ 一例を挙げますと、 例)   Dim STR As String   Dim Start As Long   Dim Count As Long   STR = "C:\MYDOCU~1\THINKB~1\THINKB~1\TEMP"   Start = 1 '// 先頭文字   Count = 0   While InStr(Start, STR, "\")     Count = Count + 1     Start = InStr(Start, STR, "\") + 1   Wend   Debug.Print Count というやり方もあると思います。 InStr関数で"\"の位置を探しあればカウントアップし、また次の文字から"\"を探しています。この繰り返しです。 "\"がなくなったらループを抜けて終了です。 間違っていたらごめんなさい。

adachi
質問者

お礼

回答していただき、本当にありがとうございます。 みなさまに教えて頂いた手法を試すのに時間がかかってしまい、返信が遅れてしまったことをお詫びします。 これだけの手法があるとは思ってもいませんでした。 どれも参考になった回答ばかりで、この中から次点などの返信をしなければいけない事がとても心苦しいです、、、 InStr関数は「特定文字の存在の有無」だけの意味しか知りませんでした。josyo_m様のような使い方がとても勉強になりました。 ありがとうございました。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

VB6以降で「Split関数」というのがあります。 指定の文字を区切り記号として対象文字列を分割して配列に格納してくれます。 配列の件数を取得すると「区切り記号の数」がわかります。 dim strArrey() as String dim numArrey as Integer strArrey()=Split([文字列の変数でも定数でもOK],"\") numArrey = UBound(strArrey()) これでnumArreyに"\"の個数が入ります。 お試しあれ。

adachi
質問者

お礼

回答していただき、本当にありがとうございます。 みなさまに教えて頂いた手法を試すのに時間がかかってしまい、返信が遅れてしまったことをお詫びします。 これだけの手法があるとは思ってもいませんでした。 どれも参考になった回答ばかりで、この中から次点などの返信をしなければいけない事がとても心苦しいです、、、 bin-chan様の言われたsplit,ubound関数は初めて知りました。 特にsplit関数は便利ですね。とても勉強になり、今後に活かせそうです。 ありがとうございました。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

mid関数を使って左から1文字ずつとりだしていき、 \と一致したときカウントしていくのはどうでしょうか? こんなかんじで for i = 1 to len("C:\MYDOCU~1\THINKB~1\THINKB~1\TEMP") c=mid("C:\MYDOCU~1\THINKB~1\THINKB~1\TEMP",i,1) if c="\" then cnt=cnt+1 next i msgbox ("\は" & cnt &"個ありました。")

adachi
質問者

お礼

回答していただき、本当にありがとうございます。 みなさまに教えて頂いた手法を試すのに時間がかかってしまい、返信が遅れてしまったことをお詫びします。 これだけの手法があるとは思ってもいませんでした。 どれも参考になった回答ばかりで、この中から次点などの返信をしなければいけない事がとても心苦しいです、、、 id関数は知っていましたが、sha-girl様のような上手な扱い方は知りませんでした。とても勉強になり、今後に活かせそうです。 ありがとうごさいました。

関連するQ&A