Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12015 / 13645 ツリー ←次へ | 前へ→

【12842】文字数が可変の文字列を抽出するには? とむ 04/4/16(金) 20:35 質問
【12843】Re:文字数が可変の文字列を抽出するには? bykin 04/4/16(金) 21:42 回答
【12846】Re:文字数が可変の文字列を抽出するには? とむ 04/4/16(金) 22:45 お礼
【12844】Re:文字数が可変の文字列を抽出するには? Hirofumi 04/4/16(金) 22:00 回答
【12847】Re:文字数が可変の文字列を抽出するには? とむ 04/4/16(金) 22:50 お礼
【12845】Re:文字数が可変の文字列を抽出するには? bykin 04/4/16(金) 22:29 回答
【12852】Re:文字数が可変の文字列を抽出するには? アイエネス 04/4/17(土) 4:22 回答
【12853】Re:文字数が可変の文字列を抽出するには? アイエネス 04/4/17(土) 4:29 回答

【12842】文字数が可変の文字列を抽出するには?
質問  とむ  - 04/4/16(金) 20:35 -

引用なし
パスワード
   こんにちは。初めての投稿です。
よろしくお願いします。

下のような文字列が各セルにあり、特定の文字"\"から右の
文字列を抽出して別のセルに書き出したいのですが、関数を
使って実現することはできるのでしょうか。
自分なりに関数を調べました。文字数が同じであればright関数を
使えば良いのですが、文字数が可変のため、なかなかうまく行きません。
よろしくお願い致します。

c:\Folder1\Folder2\Folder3\Folder4\Folder51111
c:\Folder6\Folder7\Folder8\Folder123


c:\Folder1\Folder2\Folder3\Folder4\Folder51111
                 ↑
                 この"\"から右のFolder51111を抽出する
c:\Folder6\Folder7\Folder8\Folder123
             ↑
             この"\"から右のFolder123を抽出する

【12843】Re:文字数が可変の文字列を抽出するには?
回答  bykin  - 04/4/16(金) 21:42 -

引用なし
パスワード
   こんばんわ。

最後の¥記号の次の文字以降の文字列を取得するってことかな?
とむはんのエクセルのバージョンはナンボなんかな?
2000以降やったらInStrRev関数が使えます。

Sub test()
  Dim s As String
  s = "c:\Folder1\Folder2\Folder3\Folder4\Folder51111"
  s = Mid$(s, InStrRev(s, "\") + 1)
  MsgBox s
End Sub

詳しくはInStrRev関数とMid関数のヘルプを調べてみてな。。
ほな。

【12844】Re:文字数が可変の文字列を抽出するには?
回答  Hirofumi E-MAIL  - 04/4/16(金) 22:00 -

引用なし
パスワード
   InstrRevが使え無いExcel97はコンなやり方

Public Function GetFileName(ByVal strName As String) As String

'  ファイル名をPathから分離

  Dim i As Long
  Dim lngPos As Long
  
  i = 1
  lngPos = InStr(i, strName, "\", vbBinaryCompare)
  Do Until lngPos = 0
    i = lngPos
    lngPos = InStr(i + 1, strName, "\", vbBinaryCompare)
  Loop
  strName = Mid(strName, i + 1)
    
  GetFileName = strName
  
End Function

【12845】Re:文字数が可変の文字列を抽出するには?
回答  bykin  - 04/4/16(金) 22:29 -

引用なし
パスワード
   も一個考えた(^^;;

元の文字列がファイルかフォルダへのパスであるって限定できて、
WSHが使える環境(WIN98以降ならたぶんOK)なら
こんなんでもいけます。(Excel97・2000とも)

Sub test2()
  Dim FSO As Object
  Dim s As String
  
  s = "c:\Folder1\Folder2\Folder3\Folder4\Folder51111"
  Set FSO = CreateObject("Scripting.FileSystemObject")
  s = FSO.GetFileName(s)
  MsgBox s
  Set FSO = Nothing
End Sub

試してみてな。
ほな。

【12846】Re:文字数が可変の文字列を抽出するには?
お礼  とむ  - 04/4/16(金) 22:45 -

引用なし
パスワード
   bykinさん、こんばんは。
どうもありがとうございました。
私のExcelのバージョンは2000です。

さっそくやってみました。
うまくいきました。

でもやはり、関数だけで処理するのは難しいようですね。
自分でもう少し勉強してみます。
ありがとうございました。

【12847】Re:文字数が可変の文字列を抽出するには?
お礼  とむ  - 04/4/16(金) 22:50 -

引用なし
パスワード
   Hirofumiさん、こんばんは。
どうもありがとうございました。

頂いたコードを自分なりに勉強してみます。
また、ご質問させて頂くかもしれません。
その折はまたよろしくお願いします。

VBAって奥が深いんですね。
修行します...

【12852】Re:文字数が可変の文字列を抽出するには?
回答  アイエネス  - 04/4/17(土) 4:22 -

引用なし
パスワード
   こんにちは。
関数でできないことはないと思いますが、やるとしても
一階層で
「=IF(ISERROR(FIND("\",A1))=FALSE,IF(ISERROR(FIND("\",MID(A1,FIND("\",A1)+1,1000)))=FALSE,"まだ\マークがあります",MID(A1,FIND("\",A1)+1,1000)),A1)」

こんなに長くなります。
それならば、ユーザー関数を作った方が後々メンテナンスもしやすいし、なにより分かり易いと思います。

【12853】Re:文字数が可変の文字列を抽出するには?
回答  アイエネス  - 04/4/17(土) 4:29 -

引用なし
パスワード
   ちなみにサンプルのユーザー定義関数のサンプルをbykinさんのコードを参考に作ってみました。

Function Folder(path As Range)
  Dim s As String
  s = path.Value
  s = Mid$(s, InStrRev(s, "\") + 1)
  Folder = s
End Function

これを標準モジュールにコピペして、普通の関数と同じように
「=Folder(対象セルのアドレス)」とセルに入力すれば、最後の"\"以降の文字列が表示されるはずです。試してみてください。

12015 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free