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

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

甘夏の収穫断念。

2009-02-01 11:20:18 | いろんなこと
昨日は天気が好ければ甘夏の収穫でもしようかと思っていましたがおとといからの雨が止まずに断念しました。

天気予報によると日曜日は良い天気、ただし冬型の気圧配置なので風強し、とのことでしたが案の定鬼のような強風が夜半からずっと吹き荒んでいます。

これでは空気もすぐ乾燥し風邪を引くかもしれないし、何より脚立の上に乗って収穫なんて状況じゃありません、私が落ちたら拾えば済むなんて冗談では済まないかも・・・。

職場では営業の一人にインフルエンザ罹患者が発生、地声が鬼のようにでかい奴です、まあ本人には悪いがおかげでその声に邪魔されずに自分の仕事に集中できます。

私も木曜の夜から金曜の日中喉がおかしかったです、大分楽になりましたが少しまだイガイガします。

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)として使うべきだと今回思った次第です。