2016-04-04 10 views
1

ありがとうございました。数時間捜してみました。私はそれを移動したいExcel VBA - 1セルで動作し、複数の行を変更することはできません。

Sub UpdateStatusTest01() 

Dim s1 As Worksheet, s2 As Worksheet 
Set s1 = Sheets("test") 
Set s2 = Sheets("SIGNUPS") 
v1 = s1.Range("A2") 
v2 = s1.Range("B2") 
s2.Activate 
For Each r In Intersect(ActiveSheet.UsedRange, Range("A:A")) 
    If r.Value = v1 Then 
     r.Offset(0, 1).Value = v2 
    End If 
Next 
End Sub 

この1つは完全に動作しますが、1行のみのため:私はほとんど私がちょうど若干の修正を行う方法がわからない、このマクロは完璧に働いてい"SIGNUPS"シートの次の行に移動し、列Bのデータを見つけて一致/置き換えて、B2を超えた行を探し続けます。私は

v1 = s1.Range("A:A") 
v2 = s1.Range("B:B") 

中に、

v1 = s1.Range("A2") 
v2 = s1.Range("B2") 

を変更しようとすると、コードが

Sub UpdateStatusTest01() 

Dim s1 As Worksheet, s2 As Worksheet 
Set s1 = Sheets("test") 
Set s2 = Sheets("SIGNUPS") 
v1 = s1.Range("A:A") 
v2 = s1.Range("B:B") 
s2.Activate 
For Each r In Intersect(ActiveSheet.UsedRange, Range("A:A")) 
    If r.Value = v1 Then 
     r.Offset(0, 1).Value = v2 
    End If 
Next 
End Sub 

なるが優れてこの行好きではない:

If r.Value = v1 Then 

のときにのみ発生します変更された範囲が1セルから列全体。正確なエラーは、 "実行時エラー '13':型の不一致です。

私はその面倒な行を修正すると思いますが、複数のセルがある範囲を考慮するには何を入れるべきかわかりません。私は助けていただければ幸いです!ありがとう!!

答えて

0

VBAはわかりません。どちらの反復トラフ各可能性や、このように検索を実行します。

Sub UpdateStatusTest01() 
    Dim s1 As Worksheet, s2 As Worksheet 
    Dim v1 As Range, v2 As Range 
    Set s1 = Sheets("test") 
    Set s2 = Sheets("SIGNUPS") 
    Set v1 = s1.Range("A:A") 
    Set v2 = s1.Range("B:B") 
    s2.Activate 
    For Each r In Intersect(ActiveSheet.UsedRange, Range("A:A")) 
    If IsNumeric(Application.Match(r.Value, v1, 0)) Then 
     r.Offset(0, 1).Value = Application.Index(v2, Application.Match(r.Value, v1, 0)) 
    End If 
    Next 
End Sub 

うまくいけば、それは(私には、あなたが望むものを100%明確ではありません)あなたが探しているものです。

これは、単にv1が希望の値になっているかどうかをチェックし、同じ行からv2の値を出力します。

エラー自体は、VBAでは不可能な配列(=)を比較しようとしているためです。

しかし、このような簡単な作業は、ワークシート式でも実行できます)

+0

あなたは男です!これは完璧です。ああ、私は完全に理解しています。私は多くのSQLを頭の中に混乱させ、そのために苦しんでいます。ありがとうございますx1000 – Clickbeast

+0

あなたは歓迎です:) –

関連する問題