会社を卒業したのんちおじさん。

人生は知恵と工夫と思いやり!
優しさほど強いものはなく、本当の強さほど優しいものはない -ラルフ・W・ソックマン-

VBAはVBAとして使うべき

2009-02-01 10:52:57 | Excelのお話
標準機能でできないこともかなりのことがVBAでできるようになります、VBAをそこそこ使えるようになると得意になってなんでもかんでもVBAでやろうとするようになり挙げ句に標準機能でやった方が早いことまでVBAで処理しようとするようになります。

定型処理、その多くはある条件に従って、データを決められた条件を元に加工したり間引いたり転記したりする作業がほとんどですがこの作業を膨大なデータに対して行うプログラムを作るのが楽しみとも言えます、つまりデータをひとつひとつ順番に処理するわけです。

しかし前回書いた、

Sub 特価があるか()
Max_GYO = Cells(1).CurrentRegion.Rows.Count
Set flg = Range(Cells(1, 16), Cells(Max_GYO, 16))
With flg
  .Value = "=COUNTIF(特別価格!F:G,B1&J1)"
  .Copy
  .PasteSpecial Paste:=xlValues
End With
Application.CutCopyMode = False
End Sub

をはじめは

Sub 特価があるか()
Max_GYO1 = Cells(1).CurrentRegion.Rows.Count
Max_GYO2 = Worksheets("特別価格").Cells(1).CurrentRegion.Rows.Count

With Worksheets("特別価格")

For i = 1 To Max_GYO1
  For j = 2 To Max_GYO2
    If Cells(i, 2) & Cells(i, 10) = .Cells(j, 2) & .Cells(j, 1) Then
      Cells(i, 16).Value = 1
    End If
  Next j
Next i
End With
End Sub

と書いたのです。

職場のPCはとても非力でなんと3分もかかるのです、そこで標準機能をVBAの中で使えば早いのではないかと考えて前者のコードで走らせてみたところそれこそ一瞬で終わってしまいました。

何がなんでもVBではなく個別アプリの機能を利用した(VB for Application)として使うべきだと今回思った次第です。

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。