|
少し手直しですが、、御免なさいJAKAさん
ちゃんとチェック(コード)してないのですが
画面更新を停止とループの中のSELECTを辞めてあります。
また、ループの中のWorksheets(MAIN)は入らない気がしますが
>Sub 品番抽出プログラム()
>
> Dim BOOKNAME As String '元ファイル名
> Dim DISTINATION As String '変更ファイル名
> Dim MAIN As String 'アクティブシート名
> Dim KITEN As Range '原点
> Dim C As Integer '表MAIN最終行
> Dim HINBAN As String '品番名
> Dim A As Integer 'カウンタ
> Dim B As Integer 'サブカウンタ
> Dim FLAG As String
>
>Dim TB(1 To 6) As Variant '←ちゃんと2次元にしようかと思ったけれど1次元
Public WBK1 As Workbook
Public SH1 As Worksheet
Application.ScreenUpdating = False
Application.EnableEvents = False
> 'ファイルを開く
> BOOKNAME = Application.GetOpenFilename(MultiSelect:=False)
> Workbooks.Open Filename:=BOOKNAME
* Set WBK1 = ActiveWorkbook ' 現在ブック
' BOOKを開くとひらいたBOOKがアクティブに成ります
>
>
> 'シート名確保
> MAIN = Left(BOOKNAME, 12)
’ こういう方法もあります セルを指定はSH1.Cells(1, 1)で可能です
* MAIN=ActiveSheet.Name
* Set SH1 = WBK1.ActiveSheet
> 'アクティブシート名取得
> Workbooks(BOOKNAME).Activate ’’これもいいらないのでは
> Set KITEN = Worksheets(MAIN).Range("A1")
> C = KITEN.CurrentRegion.Rows.Count '最終行取得
>
> A = 2
>
> Do While Len(Cells(A, 6)) > 0 'セルの文字数0ならば
> A = A + 1
> B = A - 1
>
> ’Sheets(MAIN).Select ??このSELECTっているのかな?
’ ループにいる間同じシート指定ですね。
> FLAG = StrComp(Cells(A, 6), Cells(B, 6), vbTextCompare)
>
> If FLAG = 0 Then '一致していれば
’’ここも配列にしたほうが速いです。
''
変数の宣言は外でしてください
dim ZA as variant,ZB as variant
dim i as integer
ZA = SH1.Cells(A, 15).Resize(6,1).Value
BZ = SH1.Cells(B, 15).Resize(6,1).Value
for i=15 to 20
TB(i-14)=Cells(B, i) + Cells(A, i)
next i
Cells(B, 15).Resize(, 6).Value = TB
’ここにもSELECTがありましたSELECTすると遅くなります。
Range(Cells(A, 2), Cells(A, 4)).EntireRow.Delete
A = A - 1
Else
End If
Loop
>Erase TB '静的配列の中身消去。
>
Application.ScreenUpdating = False
Application.EnableEvents = False
End Sub
|
|