2016-11-22 9 views
0

タイトルはすべてです。私はこの短いコードをウェブサイトのURLを試してみるために書いた。しかし、何らかの理由で私がたくさん使ってきたこの種のテンプレートは、コードに直接呼び出された唯一のセルであるB2へのロイヤルトリートメントを与えるだけで、今度は私にはうまくいかなかった。私はデバッグをうまくやって、うまくいきません。エラーがないと、問題の内容を識別することが難しくなります。あなたの誰かがここで何が起こっているかを見ることができるなら、私に知らせてください。私のコードは、その最初のセルに設定されています。他のセルはありません

Sub Website() 
Application.ScreenUpdating = False 

Range("B2").Select 

Dim TitleString As Range, cel As Range 
Set TitleString = ActiveCell 
Do Until IsEmpty(ActiveCell) 
    For Each cel In TitleString 
    If InStr(1, cel.Value, "https://") > 0 Then ' 
     Selection.Replace What:="https://", Replacement:="", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 
    End If 

    If InStr(1, cel.Value, "http://") > 0 Then 
     Selection.Replace What:="http://", Replacement:="", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 
    End If 

    If InStr(1, cel.Value, "/") > 0 Then 
     Selection.Replace What:="/*", Replacement:="", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 
    End If 

    If InStr(1, cel.Value, "www.") > 0 Then 
     Exit For 

    ElseIf InStr(1, cel.Value, "www.") = 0 Then 
     ActiveCell.Value = "www." & ActiveCell.Value 

    Exit For 
    End If 

    Next cel 
ActiveCell.Offset(1, 0).Select 
Loop 


Application.ScreenUpdating = True 
End Sub 
+0

ActiveCellが自身で問題になる可能性が使用して...のhttp://stackoverflow.com/questions/10714251/how-to-avoid-use-select-in-excel-vba-macros – Rdster

+0

@Rdster私はそれが問題になるかもしれないと聞きましたが、私のデータセットの範囲は1,000から500k +です。これは、500kをオフにした配列が、アクティブなセルで各オブジェクトを実行するこのような処理よりも処理に時間がかかるようです。私は間違っているかもしれません。 –

+1

選択の使用は常に遅くなります。 –

答えて

0

いつでも1つ選択すると、vbaの速度が低下します。

これは、選択およびループを回避します。

Sub Website() 
Dim rng As Range 
Dim ws As Worksheet 

Application.ScreenUpdating = False 
Set ws = ActiveSheet 
Set rng = ws.Range(ws.Cells(2, 2), ws.Cells(ws.Rows.Count, 2).End(xlUp)) 
rng.Replace "https://", "" 
rng.Replace "http://", "" 
rng.Replace "/*", "" 
rng.Replace "www.", "" 
rng.Value = Evaluate("INDEX(""www.""&" & rng.Address & ",)") 

Application.ScreenUpdating = True 
End Sub 

前:

enter image description here

後:

enter image description here

+0

これは非常にうまくいくようです。 –

0

それが失敗しているように全体をループに一つだけのセルをありますので、あなたがループの外TitleString範囲を設定するため、これが見えます。 doループを完全に削除することで、これを大幅に簡素化できます。代わりに、最初に範囲としてループするセルを宣言します。

Sub Website() 
    Application.ScreenUpdating = False 

    Range("B2").Select 
    Dim rng As Range 
    Dim cel As Range 

    Set rng = Range(Selection, Selection.End(xlDown)) 

    For Each cel In rng 

     ' IF STATEMENTS 

    Next 

    Application.Screenupdating = True 
End Sub 
関連する問題