標準機能でできないこともかなりのことが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)として使うべきだと今回思った次第です。
定型処理、その多くはある条件に従って、データを決められた条件を元に加工したり間引いたり転記したりする作業がほとんどですがこの作業を膨大なデータに対して行うプログラムを作るのが楽しみとも言えます、つまりデータをひとつひとつ順番に処理するわけです。
しかし前回書いた、
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)として使うべきだと今回思った次第です。