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)です。" と表示させる方法は無いでしょうか。配列を使えば出来るように思うのですが、 もっと 簡単な方法でも結構です。 |
こんにちは。 配列使ってませんが。 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 |
▼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 |
>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 |
こんなコードで、どうでしょーか ? 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 |
▼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 |
では、これならどうでしょーか ? 考え方としては、"("の位置と")"の位置をそれぞれ配列に入れ、もう一度ループして 文字を切り出すということです。先のコードよりは分かりやすいかと思いますが・・。 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 |
▼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 |
▼日高久雄 さん: >▼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 |