2016-05-23 1 views
0

このコードの塊でランタイムエラーが発生しました13「型の不一致」が発生し、その理由がわかりません。以前はMid()関数を使用していませんでした。これはエラーをスローする行です。初心者は、すべてのヘルプに感謝します。型の不一致エラーを取得する

文字列の3番目の文字が4に等しいかどうかを確認する行が必要な場合は、私はそれを望んでいます。

For k = 2 To NRow 
    If Mid(SummarySheet.Range("B2:B" & k), 3, 3) = 4 Then 
     SummarySheet.Range("B" & k & ":D" & k).Cut 
     SummarySheet.Range("R" & k & ":T" & k).PasteSpecial xlPasteValues 
    End If 
Next 
+1

私はカットを使用しているときにのみ、値を貼り付けることができるとは思いません。そのすべてか何か問題。 –

+2

Midについても、セルの範囲ではなく、一度に1つのセルしか実行できません。 –

+0

'mid'は3文字ですが、' 4'だけテストしますか?編集:うん、スコットが言っているように、あなたは 'Range(" B "&k)' – findwindow

答えて

3

私は、これはあなたがやろうとしているものであると信じて:

あなたはあなたのデータを逆方向に反復する必要があります。

Midでは、一度に1つのセルしか使用できません。そして3番目の基準は長さなので、1にする必要があります。

値を設定してから、データをセットから削除することができます。

For k = Nrow To 2 Step -1 
    If Mid(SummarySheet.Range("B" & k), 3, 1) = "4" Then 
     SummarySheet.Range("R" & k & ":T" & k).Value = SummarySheet.Range("B" & k & ":D" & k).Value 
     SummarySheet.Range("B" & k & ":D" & k).Delete xlshiftUp 
    End If 
Next 

今、あなただけの値をクリアして、データに空白行を維持したいならば、これを使用する:

For k = Nrow To 2 Step -1 
    If Mid(SummarySheet.Range("B" & k), 3, 1) = "4" Then 
     SummarySheet.Range("R" & k & ":T" & k).Value = SummarySheet.Range("B" & k & ":D" & k).Value 
     SummarySheet.Range("B" & k & ":D" & k).Clear 
    End If 
Next 
+0

が必要です。これは間違っていると思います。 N = 100とし、k = 94で初めてifが真であるとしましょう。次にB95:D100とR94:T94の範囲が設定され、B2:D94は削除されます。 –

+0

逆方向反復を追加しないとうまくいくかもしれませんが、xlUpを使った削除は意図していないと思います。 –

+1

@SeanScottはい、それは 'xlshiftup'だったはずです。それがなぜ後方に反復するのかを修正しました。もし我々が順方向に反復していて、真である行6に到達すると、行をコピーして削除し、データがシフトアップします。行7は行6になり、forループが反復するとスキップされます。 –

2

Mid()は、単一のテキスト値の部分文字列を取得するために使用されます。あなたが配列上でこれを試しているので、動作しません。私はこれが何をしたいです完全にわからないんだけど、これはエラーをスローしないでください。

If Mid(SummarySheet.Range("B" & k).Value, 3, 1) = "4" Then 

お知らせ参照が単一のセルのためのものであり、「4」は、それが文字列だことを示すために引用されています。 1つの文字を探しているので、最後の引数を1に変更しました。