こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

vbaの繰り返し処理について

vbaです。
Sub Test1()
Dim Str As String
Dim Pnt1 As Long
Dim Pnt2 As Long


Str = Range("A1")
Pnt1 = InStr(Str, "重 http://")
If Pnt1 <= 0 Then Exit Sub
Pnt2 = InStr(Pnt1, Str, "要")
If Pnt2 <= 0 Then
Range("B1") = Mid(Str, Pnt1 + 2)
Else
Range("B1") = Mid(Str, Pnt1 + 2, Pnt2 - (Pnt1 + 2))
End If

End Sub

という式でA1からA2.A3と下にURLが入っており空欄になるまで同じ処理をしたいのですがどのように変更すれば作動しますでしょうか?

投稿日時 - 2020-10-23 16:54:13

QNo.9814811

困ってます

質問者が選んだベストアンサー

> str=のところで引数は省略できませんとでてしまいました。

元の宣言の所は省略していますので追加してください。
StrはMyStrとかにした方がいいと思いますよ。

Dim Str As String
Dim Pnt1 As Long
Dim Pnt2 As Long

投稿日時 - 2020-10-23 18:06:46

お礼

ありがとうございました。途中で訂正などしたり、追加での質問にも答えていただいたりとても助かりました。
ありがとうございます。

投稿日時 - 2020-10-23 18:39:36

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

No1の追加です。

Range("B2") は Range("B1")に変わったんですね。

同じ行のB列だとしたら
Range("B1")

Cells(i, "B").Value
に変更してください。

投稿日時 - 2020-10-23 17:09:56

ANo.2

No1の訂正です。

Debug.Print Pnt1

は不要です。

投稿日時 - 2020-10-23 17:02:35

ANo.1

以下のどちらかで試してみてください。


Dim i As Long

For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
Str = Cells(i, "A").Value 'Range("A1")
Pnt1 = InStr(Str, "重 http://")
Debug.Print Pnt1
If Pnt1 <= 0 Then Exit Sub
Pnt2 = InStr(Pnt1, Str, "要")
If Pnt2 <= 0 Then
Range("B2") = Mid(Str, Pnt1 + 2)
Else
Range("B2") = Mid(Str, Pnt1 + 2, Pnt2 - (Pnt1 + 2))
End If
Next



Dim i As Long: i = 1

Do While Cells(i, "A").Value <> ""
Str = Cells(i, "A").Value 'Range("A1")
Pnt1 = InStr(Str, "重 http://")
Debug.Print Pnt1
If Pnt1 <= 0 Then Exit Sub
Pnt2 = InStr(Pnt1, Str, "要")
If Pnt2 <= 0 Then
Range("B2") = Mid(Str, Pnt1 + 2)
Else
Range("B2") = Mid(Str, Pnt1 + 2, Pnt2 - (Pnt1 + 2))
End If
i = i + 1
Loop

投稿日時 - 2020-10-23 17:01:01

補足

ありがとうございました。str=のところで引数は省略できませんとでてしまいました。原因は分かりますでしょうか?

投稿日時 - 2020-10-23 17:28:12

あなたにオススメの質問