2016-10-31 7 views
3

ブック内のすべてのワークシートの疑問符を見つけて置き換えるために、VBAコードを書きました。しかし、それは動作していない、誰かが私が間違っていたかを見て私を助けることができますか?Excel VBA質問記号の置換

Sub ReplaceQM() 

    Dim lRow As Long 
    Dim lCol As Long 

    totalSheet = ThisWorkbook.Sheets.Count 

    MsgBox totalSheet 
    For x = 1 To totalSheet 


     lRow = ThisWorkbook.Sheets(x).Cells(Rows.Count, 1).End(xlUp).Row 
     lCol = ThisWorkbook.Sheets(x).Cells(1, Columns.Count).End(xlToLeft).Column 


     For Z = 1 To lRow 
      For i = 1 To lCol 

       getPos = InStr(1, ThisWorkbook.Sheets(x).Cells(Z, i).Value, "~?") 

       If getPos > 0 Then 

        ThisWorkbook.Sheets(x).Cells(Z, i).Value = Replace(ThisWorkbook.Sheets(x).Cells(Z, i).Value, "~?", " ") 

       End If 

      Next i 
     Next Z 
    Next x 
End Sub 
+2

(a)はそれが正常に〜 ''代わる私のためのスペースと?。チルダが前に付いているものだけでなく、すべての疑問符を置き換えたい場合は、コード内の2つの箇所のチルダを取り除きます。 (b)各用紙の最初の行に連続した見出しがない場合は、最初の空白の前の列までのみ置き換えられます。これは意図的なものですか? (c)グラフであるシートがあれば、コードがクラッシュする。 'Sheets'ではなく' Worksheets'を反復する方がよいでしょう。 – YowE3K

+0

(a)チルダを削除しましたが、現在は正常に動作しています。よかった。ありがとう。 (b)はい、すべてのユーザーが使用する標準テンプレートが存在するため、意図的です。 (c)あなたのアドバイスに従って、シートをワークシートに変更しました。ありがとうございます@ YowE3K –

+0

私は '〜'を入れて次の文字をリテラルとして取るようにします。これは、このリンクのように '*'のようなものに取って代わる方法です:https://support.microsoft.com/en-gb/kb/214138 –

答えて

2

あなたは、範囲内Excelのを使用して、より良いオフにしている機能を置き換える:

For Each ws In ThisWorkbook 
    ws.UsedRange.Cells.Replace what:="~?", Replacement:=" ", LookAt:=False, _ 
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
Next ws 
関連する問題