| 
    
     |  | ExcelにてCSVファイルを取込で計画数を処理するマクロをくんでいます 65536行ふるに使うとどうしても処理が固まり動かなくなります
 どのようにしたらいいかわかるかたおしえてください。
 ///////////////ボタン1で下記プログラムが動く
 Sub 取込()
 
 
 Application.ScreenUpdating = False '画面の移動停止
 
 Dim vri As Variant 'Vriをvariant型で宣言(メモリー格納)
 
 
 vri = Application.GetOpenFilename( _
 Filefilter:="テキストファイル,*.csv,", _
 Title:="他のファイルを開く", _
 MultiSelect:=False)
 'ファイルを開く処理
 If vri = False Then
 MsgBox "ファイルは選択されませんでした。", _
 vbOKOnly + vbExclamation, "ファイル名の入力チェック"
 Exit Sub
 'ファイルが選択されない場合エラーメッセージ処理する
 Else
 Workbooks.Open (vri)
 '選ばれた場合は選択したCSVファイルを開く
 End If
 
 Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
 Selection.Copy           'CSVファイルのデータ選択してコピー
 Windows("進度.xls").Activate '進度xlsに移動
 Sheets("データ取込").Select  '(データ取込)シートに移動
 Range("A1").Select      'セルA1を選択してデータを貼り付け処理する
 ActiveSheet.Paste
 
 
 Union(Columns("A"), Columns("C:d"), Columns("F"), _
 Columns("I"), Columns("K")).Select
 Selection.Delete
 '選択した列(不要なデータ)を削除する
 Range("F1").Activate 'セルF1に移動する
 With Range("F1") 'F1に対しての処理(Withステートメントの開始)
 .FormulaR1C1 = "=RC[-1]&RC[-4]" '文字連結
 .AutoFill Destination:=Range("F1", Range("E" & Rows.Count).End(xlUp).Offset(, 1)), _
 Type:=xlFillDefault
 '指定行までオートフィルする
 End With '(Withステートメントの終了)
 Range("F1", Range("F65536").End(xlUp)).Select
 Selection.Copy  '文字連結したセルを選択してコピーする
 
 Range("G1").Activate 'G1へ移動
 Selection.PasteSpecial Paste:=xlPasteValues '値のみ貼り付け
 
 Range("H1").Activate 'H1へ移動
 ActiveCell.FormulaR1C1 = "=TRIM(RC[-1])" 'TRIM関数で文字間の不要なスペースを削除
 ActiveCell.AutoFill Destination:=Range("H1", Range("G" & Rows.Count).End(xlUp).Offset(, 1)), _
 Type:=xlFillDefault  '指定行までオートフィルする
 
 Range("H1", Range("H" & Rows.Count).End(xlUp)).Select
 Selection.Copy '指定行まで、コピー
 Range("I1").Activate 'セルI1へ移動
 Selection.PasteSpecial Paste:=xlPasteValues 'コピーした値を貼り付ける
 
 
 Union(Columns("B"), Columns("E:H")).Select
 Selection.Delete '指定列を削除
 
 Range("A1").Activate  'A1セルに移動
 
 
 Range("A1").CurrentRegion.Select '文字入力されている範囲を選択
 
 
 Columns("A:D").Select '列 A〜Eを選択
 
 Columns("A").Select '列Aを選択する
 Selection.Insert '列Aを挿入する
 Columns("E").Select
 Selection.Copy '列Dを選択してコピーする。
 Columns("A").Select 'A列を選択
 
 
 Selection.PasteSpecial Paste:=xlPasteValues '貼り付ける
 Application.CutCopyMode = False 'コピー処理を中止する
 Columns("E").Select
 Selection.Delete '列Eを選択して削除する。
 
 
 Columns("B").Select '列Bを選択
 Selection.Copy 'B列をコピー
 Range("E1").Select 'セルE1を選択
 Selection.PasteSpecial 'B列の値を貼り付け
 Columns("B").Delete 'B列を選択
 Range("A1", Range("D" & Rows.Count).End(xlUp)).Select
 
 
 Selection.Copy '選択したセルをコピーする
 
 Sheets("展開").Activate 'シート("展開")に移動
 If Sheets("展開").Range("A1") = "" Then  'A1が空白なら下記処理を実行
 Range("A1").Select  'セルA1を選択
 Selection.PasteSpecial Paste:=xlPasteValues '値のみ貼り付け
 
 Else
 Sheets("展開").Range("A1").End(xlDown).Offset(1, 0).Select '最終行を選択
 Selection.PasteSpecial    '値を貼り付け
 
 Columns("A:D").Select  '列A〜Cを選択
 
 Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1") _
 , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
 False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
 
 '品番、納期の順番で昇順に並べ替える
 
 
 End If
 
 
 Application.CutCopyMode = False
 'コピーする処理を中止する
 Columns("B").Select '列Bを選択
 Selection.NumberFormatLocal = "yyyy/m/d" '日付形式に変換
 
 Sheets("メニュー画面").Activate 'メニュー画面に戻る
 Application.ScreenUpdating = True '画面の移動実行
 
 MsgBox "データ取込終了" '取込み終了メッセージ
 
 
 End Sub
 ///////ボタン2で下記プログラムが動くこちらで止まる
 Sub Ver2maedaosi()
 '
 ' Ver2maedaosi Macro
 ' マクロ記録日 : 2010/1/30 ユーザー名 : 加藤 鉄也
 '
 
 '
 Application.ScreenUpdating = False '画面の移動停止
 Sheets("展開").Select 'シート展開を選択
 Columns("B:B").Select '列Bを選択
 Selection.Insert Shift:=xlToRight '右方向に挿入
 Columns("D:D").Select 'D列を選択
 Selection.Insert Shift:=xlToRight '右方向に選択
 Columns("A:A").Select '列Aを選択
 Selection.Copy '列Aに貼り付け
 Columns("B:B").Select '列Bを選択
 ActiveSheet.Paste '貼り付け
 Application.CutCopyMode = False '貼り付けモードをやめる
 Columns("C:C").Select '列Cを選択
 Selection.Copy ' 列Cをコピー
 Columns("D:D").Select ' 列Dを選択
 ActiveSheet.Paste '貼り付け
 Application.CutCopyMode = False '貼り付けモードをやめる
 Range("G1").Select 'G1を選択
 
 ActiveCell.FormulaR1C1 = "=RC[-6]&""_""&RC[-4]" '関数を入力品番と納期を連結
 Selection.AutoFill Destination:=Range("G1").Resize(Range("A65536").End(xlUp).Row), Type:=xlFillDefault
 ' 関数をオートフィルして式をデータがあるところまで入力
 
 
 Range("H1").Select '列H1を選択
 ActiveCell.FormulaR1C1 = _
 "=IF((RC[-7]:R[443]C[-7]=RC[-6])*(RC[-5]:R[443]C[-5]=RC[-4])*COUNTIF(RC[-1]:R1C[-1],RC[-1])>1,"""",RC[-5])"
 Selection.AutoFill Destination:=Range("H1").Resize(Range("A65536").End(xlUp).Row), Type:=xlFillDefault
 ' 関数を入力配列として条件を出して納期の重複行を空白しデーター範囲までアートフィルする
 Columns("H:H").Select '列Hを選択
 
 Range("I1").Select 'セルI1を選択
 Selection.FormulaArray = _
 "=SUM(IF((RC[-8]:R[443]C[-8]=RC[-7])*(RC[-6]:R[443]C[-6]=RC[-5]),RC[-4]:R[443]C[-4]),)"
 '関数を配列として条件をだして同じ納期なら計画数を合計しデーター範囲までアートフィルする
 Selection.AutoFill Destination:=Range("I1").Resize(Range("A65536").End(xlUp).Row), Type:=xlFillDefault
 
 Columns("F:F").Select '列Fを選択
 Selection.Copy     '列Fをコピー
 Columns("J:J").Select '列Jを選択
 ActiveSheet.Paste    '列Jに貼り付け
 Application.CutCopyMode = False '貼り付け状態を中止
 Union(Columns("A"), Columns("H:J")).Select '列AとH~J列を選択
 Selection.Copy 'コピーする
 Columns("K:N").Select '列K~Nを選択
 Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
 False, Transpose:=False '値を貼り付け
 Columns("K:N").EntireColumn.AutoFit '列K~Nの列調整
 Application.CutCopyMode = False
 
 Columns("L:L").EntireColumn.AutoFit '列Lの幅調整
 Columns("K:K").EntireColumn.AutoFit '列Kの幅調整
 Columns("N:N").EntireColumn.AutoFit '列Nの幅調整
 
 Range("A:j").Select 'セルA~Jを選択
 Selection.Delete '削除
 Columns("A:D").Select '列A~Dを選択
 Selection.AutoFilter
 Selection.AutoFilter Field:=2, Criteria1:="<>" 'オートフィルターで空白以外のセルを絞り込む
 Columns("A:D").Select '列A~Dを選択
 Selection.Copy 'コピーする
 Range("E1").Select 'セルE1を選択
 Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
 False, Transpose:=False '貼り付け
 Selection.AutoFilter Field:=2
 Application.CutCopyMode = False '貼り付け状態中止
 Selection.AutoFilter 'フィルター解除
 Columns("A:D").Select '列A~Dを選択
 
 Range("D1").Activate 'セルD1を選択
 Selection.Delete Shift:=xlToLeft '右方向に削除
 Columns("B:B").Select '列Bを選択
 Selection.NumberFormatLocal = "yyyy/m/d" ' 日付け形式に変更
 Sheets("メニュー画面").Select 'メニュー画面を選ぶ
 Application.ScreenUpdating = True '画面の移動実行
 
 MsgBox " 追加処理終了" 'メッセージ画面表示
 
 End Sub
 他にボタン3,4とありますがこちらは問題ないので省略します
 
 
 ボタン2で固まりますやはりシートを分けた方がいいのでしょうか・・・?
 OS Widows98SE
 EXCEl2000
 よろしくおねがいします。
 
 |  |