VBAを使った質問ならなんでもござれ
本来の対象であるオフィスアプリを操作する以外の話もOK
ゲーム作り、Webアクセス、外部アプリの操作
COM(ActiveX)、Win32API、.NET Framework、DirectXなどなど
VBAで実行するものであればなんでも質問してください
VBAを開発環境としていろいろ作っちゃいましょう
前スレ
VBAなんでも質問スレ
http://peace.2ch.net/test/read.cgi/tech/1342087380/
関連スレ
Excel VBA 質問スレ Part36 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1419718732/
Access VBA 質問スレ Part1
http://peace.2ch.net/test/read.cgi/tech/1328536426/
VBプログラマ質問スレ(Ver.6.0 まで) part64
http://peace.2ch.net/test/read.cgi/tech/1393069842/
Excel総合相談所 118 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/bsoft/1430352555/
探検
VBAなんでも質問スレ Part2 [転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
2015/05/21(木) 10:52:44.71ID:KLv0vQmm979デフォルトの名無しさん
2020/12/26(土) 04:11:48.30ID:NJB8+QKa >>978
自己解決
自己解決
980デフォルトの名無しさん
2021/05/14(金) 13:33:45.79ID:Kf/7Ycdt WordのVBAで質問させてください。
文書内の2種類の括弧「」『』の中にある改行だけを削除するマクロを作りたいと思っています。
例えば以下のような文章に対してマクロをかけたときに
「み
か
ん」
ば
な
な
「り
ん
ご
」
以下のような結果になるマクロです。
「みかん」
ば
な
な
「りんご」
つづきます
文書内の2種類の括弧「」『』の中にある改行だけを削除するマクロを作りたいと思っています。
例えば以下のような文章に対してマクロをかけたときに
「み
か
ん」
ば
な
な
「り
ん
ご
」
以下のような結果になるマクロです。
「みかん」
ば
な
な
「りんご」
つづきます
981デフォルトの名無しさん
2021/05/14(金) 13:34:48.74ID:Kf/7Ycdt Sub 括弧内の改行を削除()
Dim myRange As Range
Set myRange = ActiveDocument.Range(0, 0)
With myRange.Find
.Text = "[「『""]*^13*[""』」]"
.Forward = True
.Wrap = wdFindStop
.MatchWildcards = True
Do While .Execute = True
With myRange.Find
.Text = "^13"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
DoEvents
End With
Loop
End With
Set myRange = Nothing
End Sub
Dim myRange As Range
Set myRange = ActiveDocument.Range(0, 0)
With myRange.Find
.Text = "[「『""]*^13*[""』」]"
.Forward = True
.Wrap = wdFindStop
.MatchWildcards = True
Do While .Execute = True
With myRange.Find
.Text = "^13"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
DoEvents
End With
Loop
End With
Set myRange = Nothing
End Sub
982デフォルトの名無しさん
2021/05/14(金) 13:35:33.64ID:Kf/7Ycdt 自分なりに以上のようなマクロを組んでみたのですが、実行してみると、
最初の「みかん」の改行は削除されるのですが、そのあとの「りんご」の改行が削除されません
やり方をお教えいただけると助かります。
最初の「みかん」の改行は削除されるのですが、そのあとの「りんご」の改行が削除されません
やり方をお教えいただけると助かります。
983デフォルトの名無しさん
2021/05/14(金) 13:58:15.10ID:dwsPOlKo 馬鹿には無理
984デフォルトの名無しさん
2021/05/14(金) 20:08:25.19ID:YZr2qR8x 正規表現使えば一発じゃん。
VBAって正規表現使えるんだっけ?
VBAって正規表現使えるんだっけ?
985デフォルトの名無しさん
2021/05/14(金) 20:22:39.22ID:pWuJPMFY RegExpオブジェクトを使えば。
面倒だから俺はどうしてもというとき以外は使わない。
面倒だから俺はどうしてもというとき以外は使わない。
986デフォルトの名無しさん
2021/05/14(金) 20:24:37.07ID:6X3W89ka Wordなら最初から正規表現もどきが使えるから、Excel VBAよりはちょっとだけ楽に文字列操作ができる
987デフォルトの名無しさん
2021/05/15(土) 04:20:48.68ID:rI+eK0KL988デフォルトの名無しさん
2021/06/10(木) 19:25:30.25ID:CLREf/YK splitでいい感じに分割して判定してreplaceで改行無くしてくっ付けろ
「」は自分でつけたせ
「」は自分でつけたせ
989デフォルトの名無しさん
2021/08/25(水) 17:06:39.36ID:qYcBJ8fd あんま実験してないから文句いうなよ
まずはさ、アホでも考えられるような地道な形でやるべきだと思うわ
そのあとに、効率性とか考えて無駄排除したりすればいいわ
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
まずはさ、アホでも考えられるような地道な形でやるべきだと思うわ
そのあとに、効率性とか考えて無駄排除したりすればいいわ
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
990デフォルトの名無しさん
2021/08/25(水) 17:06:59.82ID:qYcBJ8fd >>989の続き
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
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
991デフォルトの名無しさん
2021/08/25(水) 17:07:53.23ID:qYcBJ8fd つかさ、rightとleftが逆だったわ
まぁ動くからいいわ
まぁ動くからいいわ
992デフォルトの名無しさん
2021/08/25(水) 17:18:37.37ID:qYcBJ8fd あれだ、最期の方に「だけが単独であると無限ループだわな
ループの条件にその辺の修正いれておいてくれ
もう寝る
ループの条件にその辺の修正いれておいてくれ
もう寝る
993デフォルトの名無しさん
2021/08/25(水) 17:34:31.79ID:qYcBJ8fd おっきした
>>990を↓に修正
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
Dim textForCheck As String
If textForCheck = text Then
MakeText = text
Exit Function
End If
textForCheck = text
Loop
MakeText = text
End Function
>>990を↓に修正
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
Dim textForCheck As String
If textForCheck = text Then
MakeText = text
Exit Function
End If
textForCheck = text
Loop
MakeText = text
End Function
994デフォルトの名無しさん
2021/08/28(土) 10:10:42.16ID:rHnN1cM5 動けば良いんだよ
995デフォルトの名無しさん
2021/08/28(土) 12:36:26.70ID:3DqqBWFs 腕が重くて
996デフォルトの名無しさん
2021/09/01(水) 00:13:05.25ID:7BIbcRgh h
997デフォルトの名無しさん
2021/09/01(水) 00:13:11.43ID:7BIbcRgh t
998デフォルトの名無しさん
2021/09/01(水) 00:13:18.16ID:7BIbcRgh l
999デフォルトの名無しさん
2021/09/01(水) 00:17:13.66ID:7BIbcRgh n
1000小倉優子 ◆YUKOH0W58Q
2021/09/01(水) 00:17:27.14ID:7BIbcRgh ∧,,,∧
( ・∀・) 1000ならジュースでも飲むか
( )
し─J
( ・∀・) 1000ならジュースでも飲むか
( )
し─J
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 2294日 13時間 24分 43秒
新しいスレッドを立ててください。
life time: 2294日 13時間 24分 43秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 「外国人はもう日本を選ばなくなる」経営者たちが抱く深刻な懸念 ベトナム人実習生なしでは「成り立たない街」…【多文化共生企画】★2 [少考さん★]
- 【東京】わずか9平方メートル…都心に近い「極小」アパートが若者に人気 狭くても“住めば都” ★2 [煮卵★]
- 【訃報】『スタンド・バイ・ミー』ロブ・ライナー監督の自宅で2人の遺体が発見される [Anonymous★]
- 上野動物園の双子パンダ、1月末に中国に返還へ 国内でパンダ不在に ★2 [蚤の市★]
- 【調査】“割り勘負け”がSNSで話題 お酒を飲まない人にとってどんな会計が理想? 「飲んだ人が多めに払う」よりも多かった回答とは [ぐれ★]
- 中国軍機のレーダー照射1週間 駆け引き続く 中国、米のレッドライン模索 日本、米以外の同志国とも連携探る 米は対立から距離置く★4 [ぐれ★]
- 「装神少女まとい」ってなんで過小評価されてるの? [221372791]
- 高市政府「残クレ」推奨へ。金子国交大臣「金融機関の損失をカバーする保険制度を創設」「普及を図っていく」 [256556981]
- ジャップの人手不足、限界突破wwwwwwwwwwwwwwwww34年ぶりの高水準 [271912485]
- 【年金支給日】今日は偶数月の15日だ❗うおおおおおおおおおお★2🏡
- 【悲報】新宿駅の再開発、頓挫WWWWWWWWWWWWWWWW [253542839]
- 愛国者「731部隊のデマに反論したいが、歴史に詳しくない。誰か代わりに反論してほしい」 [834922174]
