[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『単語も反転してしまいます。』(教えて欲しいです。)
Apple grape Orangeの単語をOrange grape Appleという並び順にしたいのですが、自分の力では、並び順はいいんですが、文字まで反転してしまうんです。Orange grape Appleという並び順だけ変更するには、どのようなプログラミングが必要ですか?Do Loopを使ってやりたいので、効率的じゃないのは重々承知の上です。
Sub sample()
Dim s As String
s = "Apple Grape Orange"
MsgBox reverse(s)
End Sub
Function reverse(s As String) As String
reverse = s
n1 = 1
n2 = Len(s)
Do While n1 < n2
c1 = Mid(s, n1, 1) c2 = Mid(s, n2, 1) Mid(reverse, n1, 1) = c2 Mid(reverse, n2, 1) = c1
n1 = n1 + 1 n2 = n2 - 1 Loop
End Function
< 使用 Excel:unknown、使用 OS:Windows10 >
Sub sample()
Dim s As String
s = "Apple Grape Orange"
MsgBox WordReverse(s)
End Sub
Function WordReverse(ByVal s As String) As String
Dim vv As Variant
Dim v As Variant
Dim i As Long
Dim ss() As String
vv = Split(s)
i = UBound(vv)
ReDim ss(0 To i)
For Each v In vv
ss(i) = v
i = i - 1
Next
WordReverse = Join(ss, " ")
End Function
こんな感じとか。
(まっつわん) 2021/12/28(火) 21:01
Dim vv As Variant
Dim i As Long
Dim j As Long
Dim ss() As String
vv = Split(s)
i = UBound(vv)
j = 0
ReDim ss(j To i)
Do
ss(i) = vv(j)
i = i - 1
j = j + 1
Loop Until i = 0
WordReverse = Join(ss, " ")
End Function
こんな感じ?動作確認してないです。
(まっつわん) 2021/12/28(火) 21:26
こんばんは! 例の場合は、三つの単語と考えればいいのではないのでしょうか?と思いますけど、、 久々なんで勘違いしているかも???です。。。
Option Explicit
Sub sample()
Dim s As String
s = "Apple Grape Orange"
MsgBox reverse(s)
End Sub
Function reverse(s As String) As String
Dim n1 As Long
Dim n2 As Long
Dim c1 As String
Dim c2 As String
Dim v As Variant
v = Split(s, " ")
n1 = 0
n2 = UBound(v)
Do While n1 < n2
c1 = v(n1)
c2 = v(n2)
v(n1) = c2
v(n2) = c1
n1 = n1 + 1
n2 = n2 - 1
Loop
reverse = Join(v, " ")
End Function
(SoulMan) 2021/12/28(火) 21:57
参考に
Sub Test()
Dim s As String
Dim a As Variant
Dim v As Variant
s = "Apple Grape Orange"
With CreateObject("System.Collections.ArrayList")
For Each a In Split(s)
.Add a
Next
.Reverse
v = .toarray
End With
MsgBox Join(v)
End Sub
(ピンク) 2021/12/28(火) 22:19
>Do Loopを使ってやりたいので、
無理やり使ってみました。
Sub sample()
Dim s As String
s = "Apple Grape Orange"
MsgBox reverse(s)
End Sub
Function reverse(s As String) As String
Dim v As Variant
Dim w As Variant
Dim i As Long
v = Split(s)
ReDim w(UBound(v))
Do While i <= UBound(v)
w(i) = v(UBound(v) - i)
i = i + 1
Loop
reverse = Join(w)
End Function
(ピンク) 2021/12/28(火) 23:03
もう『 お腹いっぱい 』でしょうが… 参考として コードを短く簡潔に…理解し易く(品評会)なら、確実に最下位です。(笑)
Option Explicit
Sub Sample()
Dim s As String
s = "Apple Grape Orange"
ReDim s_str(2)
s_str(0) = Left_str(s)
s_str(1) = Middle_str(s)
s_str(2) = Right_str(s)
Call reverse(s_str)
End Sub
Sub reverse(s_str())
Dim n1 As Long, n2 As Long
Dim s, r
If IsArray(s_str) = False Then
Exit Sub
End If
n1 = LBound(s_str)
n2 = UBound(s_str)
Do
If n1 >= n2 Then
Exit Do
End If
s = s_str(n1)
s_str(n1) = s_str(n2)
s_str(n2) = s
Exit Do '' Exit Do か添え字を移動させる
'n1 = n1 + 1
'n2 = n2 - 1
Loop
r = Join(s_str, " ")
MsgBox r
End Sub
Function Left_str(s As String) As String
Left_str = Left(s, InStr(s, " ") - 1)
End Function
Function Right_str(s As String) As String
Right_str = Right(s, InStr(s, " ") + 1)
End Function
Function Middle_str(s As String) As String
Dim Change_str As String
Change_str = Mid(s, InStr(s, " ") + 1)
Middle_str = Left(Change_str, InStr(Change_str, " ") - 1)
End Function
(あみな) 2021/12/29(水) 17:00
こんばんは! なるべく原型を尊重しつつ Split や Join を使わずに だだっだぁ〜〜とタイプする感じにしてみました。 でもこれだと文字数に制限があるかもしれませんね? まぁ、、サンプルということで何かの参考になれば幸いです。。。。 では、、では、、、
Option Explicit
Sub sample()
Dim s As String
s = "Apple Grape Orange"
MsgBox reverse(s)
End Sub
Function reverse(s As String) As String
Dim n1 As Long
Dim n2 As Long
Dim c1 As Variant
Dim c2 As Variant
Dim x As Variant
Dim v As Variant
Dim y As String
Dim i As Long
Dim n As Long
ReDim x(0)
ReDim v(0)
For i = 0 To Len(s) - 1
v(UBound(v)) = Mid(s, i + 1, 1)
If Mid(s, i + 1, 1) = " " Then
ReDim Preserve v(UBound(v) - 1)
x(UBound(x)) = v
ReDim v(0)
ReDim Preserve x(UBound(x) + 1)
Else
x(UBound(x)) = v
ReDim Preserve v(UBound(v) + 1)
End If
Next
ReDim Preserve v(UBound(v) - 1)
n1 = 0
n2 = UBound(x)
Do While n1 < n2
c1 = x(n1)
c2 = x(n2)
x(n1) = c2
x(n2) = c1
n1 = n1 + 1
n2 = n2 - 1
Loop
For i = LBound(x) To UBound(x)
For n = LBound(x(i)) To UBound(x(i))
y = y & x(i)(n)
Next
y = y & " "
Next
y = Left(y, Len(y) - 1)
reverse = y
Erase c1, c2, x, v
End Function
(SoulMan) 2021/12/29(水) 20:30
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.