2016-03-23 7 views
0

を動作していないこれは私のコードです:マクロは言葉を交換しようとしたときVBA Range.Replace方法は

Dim ValDate As String 
Dim FName As String 
Dim rows As Integer 
Dim col As Integer 

ValDate = InputBox("Enter cell range:") 

If ValDate = "" Then 
    Exit Sub 
End If 

r = 1 
c = 20 
rows = Range(ValDate).Row 
col = Range(ValDate).Column 


FName = InputBox("Enter name:") 

Range("B2:G22").Select 
Selection.Copy 
Range(ValDate).Select 
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ 
    SkipBlanks:=False, Transpose:=False 
ActiveSheet.Paste 
Range(ValDate).Offset(0, 1) = FName 


With Range(Cells(rows, col), Cells(rows + c, col)).Offset(1, 0) 
.Replace "ABCDE", FName 
End With 
With Range(Cells(rows, col), Cells(rows + c, col)).Offset(1, 1) 
.Replace "ABCDE", FName 
End With 
With Range(Cells(rows, col), Cells(rows + c, col)).Offset(1, 3) 
.Replace "ABCDE", FName 
End With 

問題があります。何も起こらない。昨日、私はこれに取り組んでいました。今日私はこのマクロの作業を続け、テストのために走ろうとしました。何もない。なぜ誰かが説明できますか?私は何も変えていない。 マクロを実行するとエラーは発生しません。ちょうどコードを読んでそれをスキップします。あなたのコードで

答えて

0

私が期待していた方法とは異なる方法でやりたいと思っても、これが役立つことを願っています。このコードは、 "ABCDE"のテキストを入力FNameに置き換えます(たとえ "ABCDE"がセルの内容の一部であっても)。 すべての変更は元のデータに適用されます。

あなたが最初の編集によってシートの名前を指定する必要があります。 シート名= "シート1"

次に編集することにより、データの範囲を指定: V_DATA = .Range( "B2:グラム" & thelastrow)

最後の行は、データを含むシートの最後の行として自動的に設定されます。

コードの動作を変更したい場合は、教えてください。

Dim FName As String, sheetname As String 
Dim thelastrow As Integer, dataRow As Integer, dataCol As Integer 
Dim v_data As Variant 

Application.ScreenUpdating = False 

sheetname = "Sheet1" 

With ThisWorkbook.Worksheets(sheetname) 
    thelastrow = .Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
    v_data = .Range("b2:g" & thelastrow) 

    FName = InputBox("Enter name:") 

    For dataRow = LBound(v_data) To UBound(v_data) 
     For dataCol = LBound(v_data, 2) To UBound(v_data, 2) 
      If InStr(1, v_data(dataRow, dataCol), "ABCDE") <> 0 Then 
       v_data(dataRow, dataCol) = Replace(v_data(dataRow, dataCol), "ABCDE", FName) 
      End If 
     Next dataCol 
    Next dataRow 

    .Range("b2:g" & thelastrow) = v_data 

End With 

Application.ScreenUpdating = True 
+0

コメントありがとうございました。私はちょうどそれを解決しました。単純なもの: '範囲(セル、行、col)、セル(行+ c、col))オフセット(1,0) .Replace What:=" ABCDE "、置換:= FName、LookAt:= xlPart、 MatchCase:= True'となります。今は毎回動作します:)マクロは範囲内の単語を見つけることができないので、スキップするか何もしません。 –

0

、あなたは上で動作しているワークブック/シート指定:

this_workbook = "myWorkBook.xlsm" 
mySheet = "theSheet" 
' then specify the range like this 
yourRange = "[" & this_workbook & "]" & mySheet & "!B2:G22" 
0

また、あなたはこのコードを使用して仕事をしたい範囲を指定することができます:あなたが欲しいときに

dim ws as worksheet 
set ws = ThisWorkBook.sheets(1) 'set the first tab of this work book 

ws.Range("B2:G22").select 

また、セルに値を貼り付ける場合は、あなたがそのユーザーを表示しない限り、それを「選択」する必要はありません。 あなたのコード:私は与えることができる

Range("B2:G22").Copy 
Range(ValDate).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ 
    SkipBlanks:=False, Transpose:=False 
+0

同様に、すべての範囲は 'ws.Range'です。多分あなたは私が 'ws.Range(" B2:G22 ")をコピーするだけなので、私は誤解されるかもしれません。私はI2細胞で働いています。私は説明しましょう:rows = 2 col = 9(I2 = Cells(2,9))だからws.Range(Cells(2,9)、Cells(22,9))。Offset(1,0)= ws .Range(I2:I22) '。私は、範囲I2:I22の単語 "ABCDE"をInputboxからの単語で置き換えるマクロにします。 –

0

Dim Rng as Range 

Set Rng = Range(Cells(rows, col), Cells(rows + c, col)).Offset(1, 0) 

Rng.Value = Replace(Rng.Value, "ABCDE", FName) 
+0

エラー13:Replace関数を実行しようとするとタイプが一致しない –

2

のために代わりに.Replace

の置き換え()関数を使用してみてください:

Range("B2:G22").Select 
Selection.Copy 
Range(ValDate).Select 
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ 
    SkipBlanks:=False, Transpose:=False 

に変更することができますあなたは魚ですが、私はあなたに釣り竿を渡します。

同様の問題が発生した場合は、開発者タブに移動してVisual Basicを選択します。コードを含むオブジェクトを見つけて右クリックし、コードを表示します(コードがシート内に直接存在する場合は、シートタブ上で右クリック+コードを表示するだけです)。

デバッグを容易にするため、(変数を宣言する前に)常にマクロの上にOption Explicitを追加することを忘れないでください。

コード内でF8キーを繰り返し押してマクロを1行ずつ実行し、画面の更新が偽でない場合は、シートの現在のマクロ結果をプレビューできます。また、問題の原因となっているコードの一部に絞り込むこともできます。

+0

これは最初から私が作成したマクロなので、Visual Basicを使用する必要があります。 Option Explicitはデフォルトで設定されており、F8でマクロをデバッグして、マクロが良い変数を使用しているかどうかを確認しています。だからコメントはここでは無関係です...エラーはなく、コードには問題ありません。ただ、なぜマクロSKIPSが.Replaceでコード化して何もしないのを理解できません。 –

関連する問題