アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。

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

** 環境 **
VB6.0(sp5)

A 回答 (6件)

ご質問の「文字列」から察するにあるファイルのパス(ドライブ+パス+ファイル名)を


ドライブ+パスとファイル名に分解する、のような使い方をされるのでしょうか?
先の例ですと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 & "]"

'ここまで
    • good
    • 1
この回答へのお礼

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

お礼日時:2002/06/06 03:29

模範的なものを書かせていただきます。


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文の後の条件判断式は「\」が半角でも全角でも良いようにしています。多分これが一番分かりやすく簡単な方法だと思います。
    • good
    • 3
この回答へのお礼

回答していただき、本当にありがとうございます。
みなさまに教えて頂いた手法を試すのに時間がかかってしまい、返信が遅れてしまったことをお詫びします。

これだけの手法があるとは思ってもいませんでした。
どれも参考になった回答ばかりで、この中から次点などの返信をしなければいけない事がとても心苦しいです、、、

right、left関数を工夫するんですね。また、半角と全角についてのコメントがとても勉強になりました。

ありがとうございました。

お礼日時:2002/06/06 03:35

こんな方法はどうでしょうか。



 Dim moji As String 'path
 Dim Cot As Integer '\の個数

 moji="C:\MYDOCU~1\THINKB~1\THINKB~1\TEMP"
 Cot=Len(moji)-Len(Replace(moji,"\",""))
    • good
    • 2
この回答へのお礼

回答していただき、本当にありがとうございます。
みなさまに教えて頂いた手法を試すのに時間がかかってしまい、返信が遅れてしまったことをお詫びします。

これだけの手法があるとは思ってもいませんでした。
どれも参考になった回答ばかりで、この中から次点などの返信をしなければいけない事がとても心苦しいです、、、

Len関数の使い方は、意表をつかれたというか、眼からウロコが落ちた状態です(苦笑)nishi6様のような使い方があるんですね~。

ありがとうございました。

お礼日時:2002/06/06 03:31

お疲れ様です。



いろいろな方法が考えられると思います^^
一例を挙げますと、

例)

  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関数で"\"の位置を探しあればカウントアップし、また次の文字から"\"を探しています。この繰り返しです。
"\"がなくなったらループを抜けて終了です。

間違っていたらごめんなさい。
    • good
    • 0
この回答へのお礼

回答していただき、本当にありがとうございます。
みなさまに教えて頂いた手法を試すのに時間がかかってしまい、返信が遅れてしまったことをお詫びします。

これだけの手法があるとは思ってもいませんでした。
どれも参考になった回答ばかりで、この中から次点などの返信をしなければいけない事がとても心苦しいです、、、

InStr関数は「特定文字の存在の有無」だけの意味しか知りませんでした。josyo_m様のような使い方がとても勉強になりました。
ありがとうございました。

お礼日時:2002/06/06 03:24

VB6以降で「Split関数」というのがあります。



指定の文字を区切り記号として対象文字列を分割して配列に格納してくれます。
配列の件数を取得すると「区切り記号の数」がわかります。

dim strArrey() as String
dim numArrey as Integer

strArrey()=Split([文字列の変数でも定数でもOK],"\")

numArrey = UBound(strArrey())

これでnumArreyに"\"の個数が入ります。

お試しあれ。
    • good
    • 0
この回答へのお礼

回答していただき、本当にありがとうございます。
みなさまに教えて頂いた手法を試すのに時間がかかってしまい、返信が遅れてしまったことをお詫びします。

これだけの手法があるとは思ってもいませんでした。
どれも参考になった回答ばかりで、この中から次点などの返信をしなければいけない事がとても心苦しいです、、、

bin-chan様の言われたsplit,ubound関数は初めて知りました。
特にsplit関数は便利ですね。とても勉強になり、今後に活かせそうです。
ありがとうございました。

お礼日時:2002/06/06 03:21

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 &"個ありました。")
    • good
    • 0
この回答へのお礼

回答していただき、本当にありがとうございます。
みなさまに教えて頂いた手法を試すのに時間がかかってしまい、返信が遅れてしまったことをお詫びします。

これだけの手法があるとは思ってもいませんでした。
どれも参考になった回答ばかりで、この中から次点などの返信をしなければいけない事がとても心苦しいです、、、

id関数は知っていましたが、sha-girl様のような上手な扱い方は知りませんでした。とても勉強になり、今後に活かせそうです。
ありがとうごさいました。

お礼日時:2002/06/06 03:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!