2017-11-09 6 views
2

ここでは、Stackoverflowの人々のおかげで、以下のスクリプトをうまく動作させることができました。基本的には、列Aの値がスクリプトの値のリストと一致する行とは別の行をすべて削除します。長いリストの値を管理する

しかし、私は約400レコードでスクリプトを実行したいと思います。下の例の値10049、10046を同じ構造体(すべての数字、各5文字の長さ)に続く400個の値で置き換えると、エラーメッセージが表示されます。

コンパイルエラー。構文エラー

値の数に制限はありますか?もしそうなら、とにかく回避策を講じていますか?

私は親切に助言が必要です!ありがとう!

//ピーター

これは正常に動作します:

Sub DeleteArticles() 
Dim i As Long 
Dim ws As Worksheet 
Dim lastRow As Long 

For Each ws In Worksheets 
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row 
    For i = lastRow To 8 Step -1 
    'if ID isn't present in array of IDs to keep, then we delete entire row 
    If UBound(Filter(Array(10049, 10046), ws.Cells(i, 1).Value)) = -1 Then 
     ws.Rows(i).EntireRow.Delete 
    End If 
    Next 
Next 
End Sub 

そして、これは、その行がための長さの制限を超えているためです

Sub DeleteArticles() 
Dim i As Long 
Dim ws As Worksheet 
Dim lastRow As Long 

For Each ws In Worksheets 
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row 
    For i = lastRow To 8 Step -1 
    'if ID isn't present in array of IDs to keep, then we delete entire row 
    If UBound(Filter(Array(10049 ,10048 ,10047 ,10046 ,10045 ,10044 ,10043 ,10042 ,10041 ,10050 ,10053 ,10052 ,10051 ,10054 ,10012 ,10010 ,10008 ,10007 ,10006 ,10004 ,10013 ,10022 ,10021 ,10020 ,10019 ,10017 ,10016 ,10015 ,10023 ,10032 ,10030 ,10029 ,10027 ,10024 ,10039 ,10038 ,10037 ,10036 ,10035 ,10034 ,10040 ,10063 ,10062 ,10061 ,10060 ,10059 ,10058 ,10057 ,10056 ,10055 ,10064 ,10066 ,10065 ,10067 ,10195 ,10218 ,10217 ,10216 ,10215 ,10214 ,10213 ,10212 ,10211 ,10219 ,10873 ,10870 ,10868 ,11029 ,11301 ,11302 ,11303 ,11304 ,11305 ,11306 ,11307 ,11308 ,11309 ,11333 ,11331 ,11330 ,11328 ,11327 ,11334 ,11342 ,11341 ,11339 ,11337 ,11353 ,11349 ,11348 ,11363 ,11362 ,11360 ,11359 ,11358 ,11357 ,11374 ,11372 ,11370 ,11369 ,11368 ,11367 ,11387 ,11385 ,11384 ,11383 ,11382 ,11381 ,11380 ,11390 ,10000 ,10002 ,10097 ,10207 ,10206 ,10205 ,10204 ,10203 ,10202 ,10201 ,10208 ,10209 ,10210 ,10230 ,10229 ,10228 ,10227 ,10226 ,10225 ,11040 ,11071 ,11112 ,11110 ,11108 ,11117 ,11215 ,11214 ,11209 ,11226 ,11225 ,11224 ,11223 ,11221 ,11227 ,11236 ,11234 ,11233 ,11232 ,11231 ,11229 ,11228 ,11237 ,11246 ,11245 ,11244 ,11242 ,11240 ,11239 ,11238 ,11247 ,11278 ,11167 ,11169 ,11168 ,11179 ,11191 ,11206 ,11203 ,11201 ,11207 ,11256 ,11255 ,11253 ,11252 ,11251 ,11249 ,11248 ,11257 ,11266 ,11265 ,11261 ,11260 ,11259 ,11267 ,11275 ,11272 ,11270 ,11268 ,11276 ,11083 ,11084 ,11085 ,11088 ,10251 ,10301 ,10302 ,10312 ,10311 ,10310 ,10309 ,10308 ,10307 ,10306 ,10305 ,10304 ,10313 ,10317 ,10316 ,10315 ,10314 ,10323 ,10326 ,10343 ,10348 ,10350 ,10415 ,10414 ,10413 ,10416 ,10423 ,10424 ,10426 ,10428 ,10446 ,10445 ,10444 ,10443 ,10442 ,10441 ,10440 ,10439 ,10438 ,10447 ,10466 ,10465 ,10464 ,10463 ,10462 ,10461 ,10460 ,10459 ,10458 ,10467 ,10471 ,10470 ,10469 ,10468 ,10472 ,10448 ,10449 ,10450 ,10451 ,10452 ,10453 ,10454 ,10455 ,10456 ,10494 ,10495 ,10500 ,10507 ,10508 ,10509 ,10510 ,10511 ,10512 ,10513 ,10514 ,10517 ,10518 ,10628 ,10643 ,10732 ,10731 ,10730 ,10729 ,10728 ,10727 ,10726 ,10725 ,10724 ,10733 ,10742 ,10741 ,10740 ,10739 ,10738 ,10737 ,10736 ,10735 ,10734 ,10743 ,10799 ,10809 ,10808 ,10807 ,10805 ,10804 ,10803 ,10802 ,10801 ,10810 ,10819 ,10818 ,10817 ,10816 ,10815 ,10814 ,10813 ,10812 ,10811 ,10820 ,10829 ,10828 ,10827 ,10826 ,10825 ,10824 ,10823 ,10822 ,10821 ,10830 ,10839 ,10838 ,10837 ,10836 ,10835 ,10834 ,10833 ,10832 ,10831 ,10840 ,10844 ,10843 ,10842 ,10841 ,10845 ,10293 ,10294 ,10303 ,10320 ,10331 ,10344 ,10327 ,10368 ,10367 ,10366 ,10365 ,10364 ,10363 ,10387 ,10381 ,10379 ,10377 ,10373 ,10412 ,10430 ,10432 ,10473 ,10474 ,10477 ,10629 ,10621 ,10620 ,10652 ,10654 ,10744 ,10749 ,10750 ,10751 ,10752 ,10756 ,10291 ,10962 ,10963 ,10964 ,10974 ,10975 ,10971), ws.Cells(i, 1).Value)) = -1 Then 
     ws.Rows(i).EntireRow.Delete 
    End If 
    Next 
Next 
End Sub 

答えて

9

動作しないものですが1行のコード(1024文字)。カンマの後のアンダースコアを使用して分割して、次の行で非常に長い式を続けることができます。おそらく2行以上に分割する必要があります。例えば

If UBound(Filter(Array(10049 ,10048 ,10047 ,10046 ,10045 ,10044 ,10043 , _ 
10049 ,10048 ,10047 ,10046 ,10045 ,10044 ,10043 , _ 
10049 ,10048 ,10047 ,10046 ,10045 ,10044 ,10043 , _ 
10971), ws.Cells(i, 1).Value)) = -1 Then 

ライン継続(下線)は、「論理コード行」スパン複数の「物理的なコード行」を作ることができます。

単一の論理コード行に使用できる行継続の数にも制限があることに注意してください。

この手法は、同様の式を並べてエラーをチェックし、水平にスクロールすることなくすべてのコードを一度に見ることができるようにするのにも役立ちます。

+2

1回の手順で20本程度の線の延長の数に(不快に小さい)制限があることに注意してください。 –

関連する問題