VBAなんでも質問スレ Part2at TECH
VBAなんでも質問スレ Part2 - 暇つぶし2ch1005:デフォルトの名無しさん
21/05/14 13:58:15.10 dwsPOlKo.net
馬鹿には無理

1006:デフォルトの名無しさん
21/05/14 20:08:25.19 YZr2qR8x.net
正規表現使えば一発じゃん。
VBAって正規表現使えるんだっけ?

1007:デフォルトの名無しさん
21/05/14 20:22:39.22 pWuJPMFY.net
RegExpオブジェクトを使えば。
面倒だから俺はどうしてもというとき以外は使わない。

1008:デフォルトの名無しさん
21/05/14 20:24:37.07 6X3W89ka.net
Wordなら最初から正規表現もどきが使えるから、Excel VBAよりはちょっとだけ楽に文字列操作ができる

1009:デフォルトの名無しさん
21/05/15 04:20:48.68 rI+eK0KL.net
>>984
正規表現でマルチラインを設定して改行を空文字に置換
RegExpオブジェクトの使い方は、他の言語より面倒な書き方だったりするけど文字を操作するなら必須だと思うよ

1010:デフォルトの名無しさん
21/06/10 19:25:30.25 CLREf/YK.net
splitでいい感じに分割して判定してreplaceで改行無くしてくっ付けろ
「」は自分でつけたせ

1011:デフォルトの名無しさん
21/08/25 17:06:39.36 qYcBJ8fd.net
あんま実験してないから文句いうなよ
まずはさ、アホでも考えられるような地道な形でやるべきだと思うわ
そのあとに、効率性とか考えて無駄排除したりすればいいわ
Sub MainProcess()
Dim text As String
text = Sheet1.Cells(1, 1) 'A1に括弧が含まれる文字列をいれろ
Const right1 As String = "「"
Const left1 As String = "」"
Const right2 As String = "『"
Const left2 As String = "』"
text = MakeText(text, right1, left1)
text = MakeText(text, right2, left2)
'B1に結果が返ってくるぞ。途中結果はメッセージボックスで順次表示されるからループ終わるまで何度もOKおせ
Sheet1.Cells(1, 2) = text
End Sub

1012:デフォルトの名無しさん
21/08/25 17:06:59.82 qYcBJ8fd.net
>>991の続き 
Function MakeText(text As String, rightChar As String, leftChar As String) As String
Dim startPosition As Integer
Dim endPosition As Integer
Dim InstrStartPosition As Integer
InstrStartPosition = 1
Do While InStr(InstrStartPosition, text, rightChar) <> 0
startPosition = InStr(InstrStartPosition, text, rightChar)
If startPosition <> 0 Then
endPosition = InStr(startPosition + 1, text, leftChar)
End If
Dim midText As String
midText = Mid(text, startPosition, endPosition - startPosition + 1)
Dim midTextChanged As String
midTextChanged = Replace(midText, vbLf, "")
text = Replace(text, midText, midTextChanged)
InstrStartPosition = startPosition + Len(midTextChanged)
MsgBox "無限ループになっちゃった時はctrl + Breakを押せ" & vbCrLf & vbCrLf & text
Loop
MakeText = text
End Function

1013:デフォルトの名無しさん
21/08/25 17:07:53.23 qYcBJ8fd.net
つかさ、rightとleftが逆だったわ
まぁ動くからいいわ

1014:デフォルトの名無しさん
21/08/25 17:18:37.37 qYcBJ8fd.net
あれだ、最期の方に「だけが単独であると無限ループだわな
ループの条件にその辺の修正いれておいてくれ
もう寝る

1015:デフォルトの名無しさん
21/08/25 17:34:31.79 qYcBJ8fd.net
おっきした
>>992を↓に修正
Function MakeText(text As String, rightChar As String, leftChar As String) As String
Dim startPosition As Integer
Dim endPosition As Integer
Dim InstrStartPosition As Integer
InstrStartPosition = 1
Do While InStr(InstrStartPosition, text, rightChar) <> 0
startPosition = InStr(InstrStartPosition, text, rightChar


1016:) If startPosition <> 0 Then endPosition = InStr(startPosition + 1, text, leftChar) End If Dim midText As String midText = Mid(text, startPosition, endPosition - startPosition + 1) Dim midTextChanged As String midTextChanged = Replace(midText, vbLf, "") text = Replace(text, midText, midTextChanged) InstrStartPosition = startPosition + Len(midTextChanged) MsgBox "無限ループになっちゃった時はctrl + Breakを押せ" & vbCrLf & vbCrLf & text Dim textForCheck As String If textForCheck = text Then MakeText = text Exit Function End If textForCheck = text Loop MakeText = text End Function



1017:デフォルトの名無しさん
21/08/28 10:10:42.16 rHnN1cM5.net
動けば良いんだよ

1018:デフォルトの名無しさん
21/08/28 12:36:26.70 3DqqBWFs.net
腕が重くて

1019:デフォルトの名無しさん
21/09/01 00:13:05.25 7BIbcRgh.net


1020:デフォルトの名無しさん
21/09/01 00:13:11.43 7BIbcRgh.net


1021:デフォルトの名無しさん
21/09/01 00:13:18.16 7BIbcRgh.net


1022:デフォルトの名無しさん
21/09/01 00:17:13.66 7BIbcRgh.net


1023:小倉優子
21/09/01 00:17:27.14 7BIbcRgh.net
  ∧,,,∧ 
 (  ・∀・) 1000ならジュースでも飲むか
  (    ) 
  し─J 

1024:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 2294日 13時間 24分 43秒

1025:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch