Excel VBA質問箱 IV

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

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


12715 / 13646 ツリー ←次へ | 前へ→

【9054】トークン? まつ 03/11/16(日) 11:55 質問
【9055】Re:トークン? ハマゾウ 03/11/16(日) 13:28 回答
【9056】Re:トークン? りん 03/11/16(日) 13:34 回答
【9057】Re:トークン? まつ 03/11/16(日) 15:05 お礼
【9058】Re:トークン? kein 03/11/16(日) 17:51 回答

【9054】トークン?
質問  まつ E-MAIL  - 03/11/16(日) 11:55 -

引用なし
パスワード
   またまた関数の使い方で困っています
セルA1 に"23/25/200/300"と入力するとします "/"区切りで文字列を修得したいのですが・・・ 
関数をそのまま書くと

'"/"位置修得 Find(検索文字列,対象セル,開始位置)
A=Find("/",A1,1)     '1番目の"/"位置
B=Find("/",A1,A+1)    '2番目の"/"位置
C=Find("/",A1,B+1)    '3番目の"/"位置
'文字修得 Mid(文字列,開始位置,文字数)
W=Mid(A1,1,A-1)     '23修得
X=Mid(A1,A+1,B-A-1)   '25修得
Y=Mid(A1,B+1,C-B-1)   '200修得
Z=Mid(A1,C+1,LEN(A1-C)) '300修得


ハマゾウさんに教えて頂いたようにWorksheetFunctionを使ってみたのですが( )内の書き方がわかりません。
宜しくお願いします。

【9055】Re:トークン?
回答  ハマゾウ E-MAILWEB  - 03/11/16(日) 13:28 -

引用なし
パスワード
   ▼まつ さん:

WorksheetFunctionを使わなくても良いのであれば、以下のコードをお試しください。

Sub test()
  Dim a() As String
  Dim i As Long
  Dim j As Long
  Dim k As Long
  Dim Moji As String
  
  Moji = Sheets("sheet1").Range("a1").Value
  
  j = 0: k = 1
  
  For i = 1 To Len(Moji)
    If Len(Moji) = i Then
      j = j + 1
      ReDim Preserve a(j)
      a(j) = Mid(Moji, k, i - k + 1)
    ElseIf Mid(Moji, i, 1) = "/" Then
      j = j + 1
      ReDim Preserve a(j)
      a(j) = Mid(Moji, k, i - k)
      k = i + 1
    End If
  Next
  
  For i = 1 To UBound(a())
    MsgBox a(i)
  Next i
End Sub

もっとスマートな方法がありそうですが・・・

【9056】Re:トークン?
回答  りん E-MAIL  - 03/11/16(日) 13:34 -

引用なし
パスワード
   まつ さん、こんにちわ。

>またまた関数の使い方で困っています
>セルA1 に"23/25/200/300"と入力するとします "/"区切りで文字列を修得したいのですが・・・ 

WorksheetFunctionは使っていませんが、考え方は同じです。
Sub test()
  Dim a1$, p1%, p2%
  '
  a1$ = "23/25/200/300/"
  p1% = 1
  Do
   p2% = InStr(p1%, a1$, "/")
   If p2% = 0 Then p2% = Len(a1$) + 1
   MsgBox Mid(a1$, p1%, p2% - p1%)
   '
   p1% = p2% + 1
  Loop While p1% < Len(a1$)
End Sub

こんな感じです。

【9057】Re:トークン?
お礼  まつ E-MAIL  - 03/11/16(日) 15:05 -

引用なし
パスワード
   ハマゾウさん りんさんありがとうございました。
早速使ってみます 助かりました。

【9058】Re:トークン?
回答  kein  - 03/11/16(日) 17:51 -

引用なし
パスワード
   Excel2000以降のバージョンをお使いなら・・

Sub MySPData()
  Dim DAry As Variant

  With Range("A1")
   If InStr(1, .Value, "/") > 0 Then
     DAry = Split(.Value, "/")
     MsgBox DAry(0)
   End If
  End With
End Sub

で、最初の値が表示できます。配列の上限(UBound(DAry))まで、添え字を1つずつ
加算していけば "/" で区切られた n番目のデータが取得できます。

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