過去ログ

                                Page     348
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼文字列を配列変数に取得する方法  日高久雄 02/11/13(水) 12:56
   ┣Re:文字列を配列変数に取得する方法  Jaka 02/11/13(水) 15:40
   ┃  ┗Re:文字列を配列変数に取得する方法  日高久雄 02/11/13(水) 18:23
   ┃     ┗Re:文字列を配列変数に取得する方法  Jaka 02/11/15(金) 10:44
   ┗Re:文字列を配列変数に取得する方法  Kein 02/11/14(木) 3:59
      ┗Re:文字列を配列変数に取得する方法  日高久雄 02/11/14(木) 13:19
         ┗Re:文字列を配列変数に取得する方法  Kein 02/11/15(金) 2:45
            ┗Re:文字列を配列変数に取得する方法  日高久雄 02/11/15(金) 10:45
               ┗Re:文字列を配列変数に取得する方法  日高久雄 02/11/15(金) 10:47

 ───────────────────────────────────────
 ■題名 : 文字列を配列変数に取得する方法
 ■名前 : 日高久雄 <hisao_hidaka@hotmail.com>
 ■日付 : 02/11/13(水) 12:56
 -------------------------------------------------------------------------
   申し訳ありませんが ちょっと 教えてください。


例えば range("A1")に "Aは(東京)です、Bは(大阪)です、Cは(名古屋)です。"

と文字列があったとします。

VBAを使って range("B1")に東京、range("C1")に大阪、range("D1")に名古屋と表示

更に range("A2")に "Aは(1)です、Bは(2)です、Cは(3)です。"

と表示させる方法は無いでしょうか。配列を使えば出来るように思うのですが、

もっと 簡単な方法でも結構です。
 ───────────────────────────────────────  ■題名 : Re:文字列を配列変数に取得する方法  ■名前 : Jaka  ■日付 : 02/11/13(水) 15:40  -------------------------------------------------------------------------
   こんにちは。
配列使ってませんが。

Sub aiop()
  aa = Range("A1").Value
  R = 0
  Do Until InStr(aa, ")") = 0
    a1 = InStr(aa, "(")
    a2 = InStr(aa, ")")
    R = R + 1
    Range("A1").Offset(, R).Value = Mid(aa, a1 + 1, a2 - a1 - 1)
    Range("A1").Offset(1, R).NumberFormatLocal = "@"
    Range("A1").Offset(1, R).Value = "(" & R & ")"
    aa = Mid(aa, a2 + 1)
  Loop
End Sub
 ───────────────────────────────────────  ■題名 : Re:文字列を配列変数に取得する方法  ■名前 : 日高久雄 <hisao_hidaka@hotmail.com>  ■日付 : 02/11/13(水) 18:23  -------------------------------------------------------------------------
   ▼Jaka さん:
>こんにちは。
早速のお返事有難う御座いました。感激しました。
ついでと言ったら何ですが
range("b")には 数字だけでなく
原文通りで( )内を数字に変換して
"Aは(1)です、Bは(2)です、Cは(3)です"と言う風に書きたいのですが。
もうちょっと教えていただけませんか。


>配列使ってませんが。
>
>Sub aiop()
>  aa = Range("A1").Value
>  R = 0
>  Do Until InStr(aa, ")") = 0
>    a1 = InStr(aa, "(")
>    a2 = InStr(aa, ")")
>    R = R + 1
>    Range("A1").Offset(, R).Value = Mid(aa, a1 + 1, a2 - a1 - 1)
>    Range("A1").Offset(1, R).NumberFormatLocal = "@"
>    Range("A1").Offset(1, R).Value = "(" & R & ")"
>    aa = Mid(aa, a2 + 1)
>  Loop
>End Sub
 ───────────────────────────────────────  ■題名 : Re:文字列を配列変数に取得する方法  ■名前 : Jaka  ■日付 : 02/11/15(金) 10:44  -------------------------------------------------------------------------
   >range("B1")に東京、range("C1")に大阪、range("D1")に名古屋と表示
>更に range("A2")に "Aは(1)です、Bは(2)です、Cは(3)です。"

何でこうなるのか解りませんが...。
注)Chr$(Range("A1").Offset(, R - 1).Column + Asc("@"))は、A〜Z列までしか対応してません。

Sub aiop()
  Dim St As String
  aa = Range("A1").Value
  R = 0: St = ""
  Do Until InStr(aa, ")") = 0
    a1 = InStr(aa, "(")
    a2 = InStr(aa, ")")
    R = R + 1
    Range("A1").Offset(, R).Value = Mid(aa, a1 + 1, a2 - a1 - 1)
    Retu = Chr$(Range("A1").Offset(, R - 1).Column + Asc("@"))
    St = St & Retu & "は、(" & R & ")です、"
    aa = Mid(aa, a2 + 1)
  Loop
  Range("A2") = Left(St, Len(St) - 1)
End Sub
 ───────────────────────────────────────  ■題名 : Re:文字列を配列変数に取得する方法  ■名前 : Kein  ■日付 : 02/11/14(木) 3:59  -------------------------------------------------------------------------
   こんなコードで、どうでしょーか ?

Sub Test_MySt()
  Dim i As Integer, j As Integer
  Dim Ck1 As Boolean, Ck2 As Boolean
  Dim St As String, AllSt As String
   
  With Range("A1")
   Range("A2").Value = .Value: j = 1
   For i = 2 To Len(.Value)
     If .Characters(i - 1, 1).Text = "(" Then
      Ck1 = True
     ElseIf .Characters(i - 1, 1).Text = ")" Then
      Ck1 = False: Ck2 = True
     End If
     If Ck1 = True Then
      St = St & .Characters(i, 1).Text
     ElseIf Ck2 = True Then
      Range("A2").Replace Left(St, Len(St) - 1), j
      j = j + 1: AllSt = AllSt & St
      St = "": Ck2 = False
     End If
   Next i
  End With
  With Range("B1")
   .Value = AllSt
   .TextToColumns DataType:=xlDelimited, _
   Other:=True, OtherChar:=")"
  End With
End Sub
 ───────────────────────────────────────  ■題名 : Re:文字列を配列変数に取得する方法  ■名前 : 日高久雄 <hisao_hidaka@hotmail.com>  ■日付 : 02/11/14(木) 13:19  -------------------------------------------------------------------------
   ▼Kein さん:
>有難う御座います。

早速 実験したのですが 2回目の( )が拾えないようです。

大変難しくて 構文が良く理解できないのですが 宜しくお願い致します。


こんなコードで、どうでしょーか ?
>
>Sub Test_MySt()
>  Dim i As Integer, j As Integer
>  Dim Ck1 As Boolean, Ck2 As Boolean
>  Dim St As String, AllSt As String
>   
>  With Range("A1")
>   Range("A2").Value = .Value: j = 1
>   For i = 2 To Len(.Value)
>     If .Characters(i - 1, 1).Text = "(" Then
>      Ck1 = True
>     ElseIf .Characters(i - 1, 1).Text = ")" Then
>      Ck1 = False: Ck2 = True
>     End If
>     If Ck1 = True Then
>      St = St & .Characters(i, 1).Text
>     ElseIf Ck2 = True Then
>      Range("A2").Replace Left(St, Len(St) - 1), j
>      j = j + 1: AllSt = AllSt & St
>      St = "": Ck2 = False
>     End If
>   Next i
>  End With
>  With Range("B1")
>   .Value = AllSt
>   .TextToColumns DataType:=xlDelimited, _
>   Other:=True, OtherChar:=")"
>  End With
>End Sub
 ───────────────────────────────────────  ■題名 : Re:文字列を配列変数に取得する方法  ■名前 : Kein  ■日付 : 02/11/15(金) 2:45  -------------------------------------------------------------------------
   では、これならどうでしょーか ?
考え方としては、"("の位置と")"の位置をそれぞれ配列に入れ、もう一度ループして
文字を切り出すということです。先のコードよりは分かりやすいかと思いますが・・。

Sub Test_MySt2()
  Dim i As Integer, j As Integer, k As Integer
  Dim MyAr1() As Integer, MyAr2() As Integer
  Dim Buf As String, Buf2 As String
  
  Buf = Range("A1").Value
  Range("A2").Value = Buf
  For i = 1 To Len(Buf)
   If Mid(Buf, i, 1) = "(" Then
     ReDim Preserve MyAr1(j)
     MyAr1(j) = i + 1
     j = j + 1
   ElseIf Mid(Buf, i, 1) = ")" Then
     ReDim Preserve MyAr2(k)
     MyAr2(k) = i
     k = k + 1
   End If
  Next i
  For i = LBound(MyAr1) To UBound(MyAr1)
   Buf2 = Mid(Buf, MyAr1(i), MyAr2(i) - MyAr1(i))
   Range("IV1").End(xlToLeft).Offset(, 1).Value = Buf2
   Range("A2").Replace Buf2, i + 1
  Next i
End Sub
 ───────────────────────────────────────  ■題名 : Re:文字列を配列変数に取得する方法  ■名前 : 日高久雄 <hisao_hidaka@hotmail.com>  ■日付 : 02/11/15(金) 10:45  -------------------------------------------------------------------------
   ▼Kein さん:
有難う御座いました。バッチリです。
本当にすばらしい。私も勉強しますので 今後も宜しく。

>では、これならどうでしょーか ?
>考え方としては、"("の位置と")"の位置をそれぞれ配列に入れ、もう一度ループして
>文字を切り出すということです。先のコードよりは分かりやすいかと思いますが・・。
>
>Sub Test_MySt2()
>  Dim i As Integer, j As Integer, k As Integer
>  Dim MyAr1() As Integer, MyAr2() As Integer
>  Dim Buf As String, Buf2 As String
>  
>  Buf = Range("A1").Value
>  Range("A2").Value = Buf
>  For i = 1 To Len(Buf)
>   If Mid(Buf, i, 1) = "(" Then
>     ReDim Preserve MyAr1(j)
>     MyAr1(j) = i + 1
>     j = j + 1
>   ElseIf Mid(Buf, i, 1) = ")" Then
>     ReDim Preserve MyAr2(k)
>     MyAr2(k) = i
>     k = k + 1
>   End If
>  Next i
>  For i = LBound(MyAr1) To UBound(MyAr1)
>   Buf2 = Mid(Buf, MyAr1(i), MyAr2(i) - MyAr1(i))
>   Range("IV1").End(xlToLeft).Offset(, 1).Value = Buf2
>   Range("A2").Replace Buf2, i + 1
>  Next i
>End Sub
 ───────────────────────────────────────  ■題名 : Re:文字列を配列変数に取得する方法  ■名前 : 日高久雄 <hisao_hidaka@hotmail.com>  ■日付 : 02/11/15(金) 10:47  -------------------------------------------------------------------------
   ▼日高久雄 さん:
>▼Kein さん:
>有難う御座いました。バッチリです。
>本当にすばらしい。私も勉強しますので 今後も宜しく。
>
>>では、これならどうでしょーか ?
>>考え方としては、"("の位置と")"の位置をそれぞれ配列に入れ、もう一度ループして
>>文字を切り出すということです。先のコードよりは分かりやすいかと思いますが・・。
>>
>>Sub Test_MySt2()
>>  Dim i As Integer, j As Integer, k As Integer
>>  Dim MyAr1() As Integer, MyAr2() As Integer
>>  Dim Buf As String, Buf2 As String
>>  
>>  Buf = Range("A1").Value
>>  Range("A2").Value = Buf
>>  For i = 1 To Len(Buf)
>>   If Mid(Buf, i, 1) = "(" Then
>>     ReDim Preserve MyAr1(j)
>>     MyAr1(j) = i + 1
>>     j = j + 1
>>   ElseIf Mid(Buf, i, 1) = ")" Then
>>     ReDim Preserve MyAr2(k)
>>     MyAr2(k) = i
>>     k = k + 1
>>   End If
>>  Next i
>>  For i = LBound(MyAr1) To UBound(MyAr1)
>>   Buf2 = Mid(Buf, MyAr1(i), MyAr2(i) - MyAr1(i))
>>   Range("IV1").End(xlToLeft).Offset(, 1).Value = Buf2
>>   Range("A2").Replace Buf2, i + 1
>>  Next i
>>End Sub
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 348