過去ログ

                                Page     186
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼分類ごとにシートを分けたい  gori 02/9/27(金) 15:52
   ┗Re:分類ごとにシートを分けたい  こうちゃん 02/9/30(月) 13:41
      ┗Re:分類ごとにシートを分けたい  gori 02/10/3(木) 16:23
         ┗もう少し詳細におしえてください。  こうちゃん 02/10/3(木) 20:52
            ┗Re:もう少し詳細におしえてください。  gori 02/10/7(月) 10:24
               ┗Re:もう少し詳細におしえてください。  gori 02/10/7(月) 10:34
                  ┗Re:もう少し詳細におしえてください。  こうちゃん 02/10/7(月) 14:09
                     ┗うまくいきません,また教えてください.  gori 02/10/8(火) 15:24
                        ┗Re:うまくいきません,また教えてください.  こうちゃん 02/10/8(火) 21:46
                           ┗Re:うまくいきません,また教えてください.  gori 02/10/9(水) 9:28
                              ┗2,3確認です  こうちゃん 02/10/9(水) 10:58
                                 ┗Re:2,3確認です  gori 02/10/9(水) 16:59
                                    ┗Bookに異常があります。少しまってね。  こうちゃん 02/10/10(木) 11:27
                                       ┗おまちどうさま。(長文注意)  こうちゃん 02/10/10(木) 13:48
                                          ┗Re:おまちどうさま。(長文注意)  gori 02/10/10(木) 15:24

 ───────────────────────────────────────
 ■題名 : 分類ごとにシートを分けたい
 ■名前 : gori
 ■日付 : 02/9/27(金) 15:52
 -------------------------------------------------------------------------
   Sheets.Add 'シート分け
  Sheets("Sheet1").Select
  Sheets("Sheet1").Name = "001"
  Sheets.Add
  Sheets("Sheet2").Select
  Sheets("Sheet2").Name = "002"
  Sheets.Add
  Sheets("Sheet3").Select
  Sheets("Sheet3").Name = "003"
  Sheets.Add
  Sheets("Sheet4").Select
  Sheets("Sheet4").Name = "004"
  Sheets.Add
  Sheets("Sheet5").Select
  Sheets("Sheet5").Name = "005"
  Sheets.Add
  Sheets("Sheet6").Select
  Sheets("Sheet6").Name = "006"
  Sheets.Add
  Sheets("Sheet7").Select
  Sheets("Sheet7").Name = "その他"
'001
  Sheets("Q_廃棄エクセルデータ").Select
  行 = 1
  set行 = 行 + 1
  Do
    行 = 行 + 3
   
  Loop While Left(行, 3) = "001"
'  MsgBox (行)
  Range(Rows(set行), Rows(行 - 1)).Select
  Selection.Copy
  Sheets("001").Select
  ActiveSheet.Paste
って書いたんですけど、全然コピーされません。
教えてください。
 ───────────────────────────────────────  ■題名 : Re:分類ごとにシートを分けたい  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/9/30(月) 13:41  -------------------------------------------------------------------------
   gori さん、こんにちは

レスがつかないようですね。
何をしたいのかがよくわからないのでレスが付けづらいのだと思います。

なんとなく想像だとこんなかんじでしょうか?

「Q_廃棄エクセルデータ」シートの2行目、3行目をヘッダ(項目名行)として、3行づつセットのデータがあります。
各3行ごとのデータの1行目の1列目に"001"が含まれるデータを選択して"001"シートにコピーします。

ってところでしょうか?

>'001
>  Sheets("Q_廃棄エクセルデータ").Select
>  行 = 1
>  set行 = 行 + 1
>  Do
>    行 = 行 + 3
>   
>  Loop While Left(行, 3) = "001"
ここが何をしたいのかがわからないのです。
最初の判定時に、変数「行」には判定時点で 4 が代入されています。
当然、Left(行, 3) は Falseになってしまいます。
もし変数「行」の行のデータに"001"が含まれるということであれば・・

  Loop While Left(Cells(行, 1), 3) = "001"

としなければいけません。

>'  MsgBox (行)
>  Range(Rows(set行), Rows(行 - 1)).Select
>  Selection.Copy
>  Sheets("001").Select
ペーストする位置も明示したほうがいいと思いますよ。
  Range("A1").Select
>  ActiveSheet.Paste


>って書いたんですけど、全然コピーされません。
gori さんのコードのままでも、2行目から6行目はコピーされると思いますが、全然されませんか?
 ───────────────────────────────────────  ■題名 : Re:分類ごとにシートを分けたい  ■名前 : gori  ■日付 : 02/10/3(木) 16:23  -------------------------------------------------------------------------
   ▼こうちゃん さん:
>gori さん、こんにちは
>
>レスがつかないようですね。
>何をしたいのかがよくわからないのでレスが付けづらいのだと思います。
>
>なんとなく想像だとこんなかんじでしょうか?
>
>「Q_廃棄エクセルデータ」シートの2行目、3行目をヘッダ(項目名行)として、3行づつセットのデータがあります。
>各3行ごとのデータの1行目の1列目に"001"が含まれるデータを選択して"001"シートにコピーします。
>
お返事ありがとうございます、全然ご返事が無くてないてました。
こうちゃんさんの想像とちょっと違いまして、
>各3行ごとのデータの1行目の1列目に"001"が含まれるデータを選択して"001"シートにコピーします
ではなくて、C列に分類コードとして“0010111101”のような10桁の数字が“0190919101”まで昇順で並んでいます。10桁のうち右から3桁の数字が”001”のものは”001”シートに行ごと移したいのです。”0020131301”なら“002”シートに移しさらに2〜3行目の項目名行もちゃんと移したいのです。
質問の内容わかっていただけたでしょうか
 ───────────────────────────────────────  ■題名 : もう少し詳細におしえてください。  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/10/3(木) 20:52  -------------------------------------------------------------------------
   goriさん、こんばんは

>お返事ありがとうございます、全然ご返事が無くてないてました。
>こうちゃんさんの想像とちょっと違いまして、
>>各3行ごとのデータの1行目の1列目に"001"が含まれるデータを選択して"001"シートにコピーします
>ではなくて、C列に分類コードとして“0010111101”のような10桁の数字が“0190919101”まで昇順で並んでいます。10桁のうち右から3桁の数字が”001”のものは”001”シートに行ごと移したいのです。”0020131301”なら“002”シートに移しさらに2〜3行目の項目名行もちゃんと移したいのです。

ここはとりあえず了解です。
「10桁のうち右から3桁」ではなく「10桁のうち左から3桁」でいいんですか?
とすれば、判定が
Loop While Left(Cells(行, 3), 3) = "001"
となりますね?

>質問の内容わかっていただけたでしょうか
わたしの質問に答えていただいていませんが、3行ごとにセットで判定してコードの左3桁が001〜006までは各シートにコピーする、それ以外のものは「その他」シートにコピーする、でいいんですよね。
あとは、外側にもうひとつループをつけて、「Q_廃棄エクセルデータ」シートの全データを見ればいいんじゃないでしょうか?

できれば、データの並びの例をUPできませんか?
そうすればもう少しはっきり回答できると思うのですが・・
 ───────────────────────────────────────  ■題名 : Re:もう少し詳細におしえてください。  ■名前 : gori  ■日付 : 02/10/7(月) 10:24  -------------------------------------------------------------------------
   ▼こうちゃん さん:
こうちゃんさんおはようございます。
またまたご面倒見ていただきありがとうございます。

>「10桁のうち右から3桁」ではなく「10桁のうち左から3桁」でいいんですか?
>とすれば、判定が
>Loop While Left(Cells(行, 3), 3) = "001"
>となりますね?

そうでございます,私の間違えでした。左からです。
    A       B             C     D   E
1 
2   商品コード    商品名          分類コード  売上  廃棄
3  0200000011020    「大地の野菜」レタス    0010111101  3000  30
4  0000000000005    レタス              0010111101   ・
5  0200000020047    国産和牛バラ肉カルビ焼用    0020131301   ・
6  0200000020051    国産和牛肩バラ肉切落し    0020131301   ・
7  0200000030048    まぐろたたき         0030151501   ・
8  0200000030050    ネギトロ              0030151501   ・
9  4903110059011    1・2便サンドR女峰苺G&M    0040191902   ・ 
:  4903110021322    1・2便 あんぱん         0040191902   ・
:  4973330000018    徳用餃子 20粒         0050232308   ・
:  4901003501272    ごぼうサラダ 270g    0050232309   ・
:  4971658116367    涼彩小鉢ざるうどん120G    0060262614   ・
:  0200000026368    チンジャオロース         0060262616   ・ 
:  4902466200153    海苔辛子 11枚         0080636301   ・
:  0200000010010    若鶏唐揚              0190919101   ・
                           合計   3000  30

こんな感じです。
C列の分類コードを下にシートごとに分けて1・2行の項目と最後の合計の行をそれぞれに付けたいのです。
これで,わかっていただけたでしょうか?不明な点があればまたおっしゃってください。
 ───────────────────────────────────────  ■題名 : Re:もう少し詳細におしえてください。  ■名前 : gori  ■日付 : 02/10/7(月) 10:34  -------------------------------------------------------------------------
   ▼こうちゃん さん:

すいません見にくかったのでもう一度送ります
>こうちゃんさんおはようございます。
>またまたご面倒見ていただきありがとうございます。
>
>>「10桁のうち右から3桁」ではなく「10桁のうち左から3桁」でいいんですか?
>>とすれば、判定が
>>Loop While Left(Cells(行, 3), 3) = "001"
>>となりますね?
>
>そうでございます,私の間違えでした。左からです。
>    A       B         C     D   E
1 
2 商品コード    商品名     分類コード  売上  廃棄
3 0200000011020「大地の野菜」   0010111101  3000  30
4 0000000000005 レタス      0010111101   ・
5 0200000020047 国産和牛バラ肉  0020131301   ・
6 0200000020051 国産和牛肩バラ  0020131301   ・
7 0200000030048 まぐろたたき   0030151501   ・
8 0200000030050 ネギトロ     0030151501   ・
9 4903110059011 1・2便サンド  0040191902   ・ 
: 4903110021322 1・2便     0040191902   ・
: 4973330000018 徳用餃子 20粒 0050232308   ・
: 4901003501272 ごぼうサラダ   0050232309   ・
: 4971658116367 涼彩小鉢ざる   0060262614   ・
: 0200000026368 チンジャオ    0060262616   ・ 
: 4902466200153 海苔辛子     0080636301   ・
: 0200000010010 若鶏唐揚     0190919101   ・
                     合計   3000  30

こんな感じです。
C列の分類コードをもとにシートごとに分けて1・2行の項目と最後の合計の行をそれぞれに付けたいのです。
これで,わかっていただけたでしょうか?不明な点があればまたおっしゃってください。
 ───────────────────────────────────────  ■題名 : Re:もう少し詳細におしえてください。  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/10/7(月) 14:09  -------------------------------------------------------------------------
   gori さん、こんにちは

>>    A       B         C     D   E
>1 
>2 商品コード    商品名     分類コード  売上  廃棄
>3 0200000011020「大地の野菜」   0010111101  3000  30
>4 0000000000005 レタス      0010111101   ・
>5 0200000020047 国産和牛バラ肉  0020131301   ・
>6 0200000020051 国産和牛肩バラ  0020131301   ・
>7 0200000030048 まぐろたたき   0030151501   ・
>8 0200000030050 ネギトロ     0030151501   ・
>9 4903110059011 1・2便サンド  0040191902   ・ 
>: 4903110021322 1・2便     0040191902   ・
>: 4973330000018 徳用餃子 20粒 0050232308   ・
>: 4901003501272 ごぼうサラダ   0050232309   ・
>: 4971658116367 涼彩小鉢ざる   0060262614   ・
>: 0200000026368 チンジャオ    0060262616   ・ 
>: 4902466200153 海苔辛子     0080636301   ・
>: 0200000010010 若鶏唐揚     0190919101   ・
>                     合計   3000  30
>
>こんな感じです。
>C列の分類コードをもとにシートごとに分けて1・2行の項目と最後の合計の行をそれぞれに付けたいのです。
>これで,わかっていただけたでしょうか?不明な点があればまたおっしゃってください。

理解力が不足していて申し訳ありません。
もしかするとまだわかっていないかもしれませんが・・・

C列の分類コードの左3桁が001〜006はそれぞれ各シートに、その他のコードのものは「その他」シートに行ごとにコピーする。
その際「Q_廃棄エクセルデータ」の1、2行目をヘッダとして各シートの1,2行目にコピーする。
さらに、売上(D)列と、廃棄(E)列にはデータ行の下に合計の計算式を設定したい。

ということでいいでしょうか?

goriさんの最初の質問の
>    行 = 行 + 3
を見て、データは3行ずつセットだと思ってしまって、そのあとの私からの
>>「Q_廃棄エクセルデータ」シートの2行目、3行目をヘッダ(項目名行)として、3行づつセットのデータがあります。
の質問を否定されなかったので、ずっと3行セットだと思ってました。

ということで、示されたデータの例を私なりに理解した形でコード書いてみました。
標準モジュールにコピペして実行してみてください。

Sub test()

  Dim TempClass As String
  Dim Srow As Long
  Dim Erow As Long
  Dim MaxRow As Long
  Dim ThisRow As Long
  Dim HeadRange As Range
  Dim MyRange As Range
  Dim ThisSheet As Worksheet

  Sheets.Add , Sheets(Sheets.Count)
  ActiveSheet.Name = "001"
  Sheets.Add , Sheets(Sheets.Count)
  ActiveSheet.Name = "002"
  Sheets.Add , Sheets(Sheets.Count)
  ActiveSheet.Name = "003"
  Sheets.Add , Sheets(Sheets.Count)
  ActiveSheet.Name = "004"
  Sheets.Add , Sheets(Sheets.Count)
  ActiveSheet.Name = "005"
  Sheets.Add , Sheets(Sheets.Count)
  ActiveSheet.Name = "006"
  Sheets.Add , Sheets(Sheets.Count)
  ActiveSheet.Name = "その他"

  Sheets("Q_廃棄エクセルデータ").Select
  Set HeadRange = Range("A1:A2").EntireRow
  MaxRow = Range("A65536").End(xlUp).Row
  ThisRow = 3
  Srow = 3
  TempClass = Left(Cells(ThisRow, 3).Value, 3)
  Do While ThisRow <= MaxRow
   If TempClass <> Left(Cells(ThisRow, 3).Value, 3) And TempClass <= "006" Then
    Set MyRange = Union(HeadRange, Range(Cells(Srow, 1), _
            Cells(ThisRow - 1, 1)).EntireRow)
    MyRange.Copy Sheets(StrConv(TempClass, vbWide)).Cells(1, 1)
    Srow = ThisRow
    TempClass = Left(Cells(ThisRow, 3).Value, 3)
   End If
   ThisRow = ThisRow + 1
  Loop
  
  Set MyRange = Union(HeadRange, Range(Cells(Srow, 1), Cells(ThisRow - 1, 1)).EntireRow)
  MyRange.Copy Sheets("その他").Cells(1, 1)

  For Each ThisSheet In Worksheets
    If (ThisSheet.Name >= "001" And _
      ThisSheet.Name <= "006") Or _
      ThisSheet.Name <= "その他" Then
      ThisRow = ThisSheet.Range("A65536").End(xlUp).Row + 1
      ThisSheet.Cells(ThisRow, 3).Value = "合計"
      ThisSheet.Cells(ThisRow, 4).FormulaR1C1 = _
          "=SUM(R[-" & ThisRow - 2 & "]C:R[-1]C)"
      ThisSheet.Cells(ThisRow, 5).FormulaR1C1 = _
          "=SUM(R[-" & ThisRow - 2 & "]C:R[-1]C)"
    End If
  Next

End Sub
 ───────────────────────────────────────  ■題名 : うまくいきません,また教えてください.  ■名前 : gori  ■日付 : 02/10/8(火) 15:24  -------------------------------------------------------------------------
   ▼こうちゃん さん:
早速やってみましたが,うまくいきません。

>Sub test()
>
>  Dim TempClass As String
>  Dim Srow As Long
>  Dim Erow As Long
>  Dim MaxRow As Long
>  Dim ThisRow As Long
>  Dim HeadRange As Range
>  Dim MyRange As Range
>  Dim ThisSheet As Worksheet
>
>  Sheets.Add , Sheets(Sheets.Count)
>  ActiveSheet.Name = "001"
>  Sheets.Add , Sheets(Sheets.Count)
>  ActiveSheet.Name = "002"
>  Sheets.Add , Sheets(Sheets.Count)
>  ActiveSheet.Name = "003"
>  Sheets.Add , Sheets(Sheets.Count)
>  ActiveSheet.Name = "004"
>  Sheets.Add , Sheets(Sheets.Count)
>  ActiveSheet.Name = "005"
>  Sheets.Add , Sheets(Sheets.Count)
>  ActiveSheet.Name = "006"
>  Sheets.Add , Sheets(Sheets.Count)
>  ActiveSheet.Name = "その他"
ここまではうまくいくんですが、その後シートごとにコピーされません(泣)
そして,循環参照とか言うメッセージボックスが出てきてしまいます。
>  Sheets("Q_廃棄エクセルデータ").Select
>  Set HeadRange = Range("A1:A2").EntireRow
>  MaxRow = Range("A65536").End(xlUp).Row
>  ThisRow = 3
>  Srow = 3
>  TempClass = Left(Cells(ThisRow, 3).Value, 3)
>  Do While ThisRow <= MaxRow
>   If TempClass <> Left(Cells(ThisRow, 3).Value, 3) And TempClass <= "006" Then
>    Set MyRange = Union(HeadRange, Range(Cells(Srow, 1), _
>            Cells(ThisRow - 1, 1)).EntireRow)
>    MyRange.Copy Sheets(StrConv(TempClass, vbWide)).Cells(1, 1)
>    Srow = ThisRow
>    TempClass = Left(Cells(ThisRow, 3).Value, 3)
>   End If
>   ThisRow = ThisRow + 1
>  Loop
>  
>  Set MyRange = Union(HeadRange, Range(Cells(Srow, 1), Cells(ThisRow - 1, 1)).EntireRow)
>  MyRange.Copy Sheets("その他").Cells(1, 1)
>
>  For Each ThisSheet In Worksheets
>    If (ThisSheet.Name >= "001" And _
>      ThisSheet.Name <= "006") Or _
>      ThisSheet.Name <= "その他" Then
>      ThisRow = ThisSheet.Range("A65536").End(xlUp).Row + 1
>      ThisSheet.Cells(ThisRow, 3).Value = "合計"
>      ThisSheet.Cells(ThisRow, 4).FormulaR1C1 = _
>          "=SUM(R[-" & ThisRow - 2 & "]C:R[-1]C)"
>      ThisSheet.Cells(ThisRow, 5).FormulaR1C1 = _
>          "=SUM(R[-" & ThisRow - 2 & "]C:R[-1]C)"
>    End If
>  Next
>
>End Sub
 ───────────────────────────────────────  ■題名 : Re:うまくいきません,また教えてください.  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/10/8(火) 21:46  -------------------------------------------------------------------------
   gori さん、こんばんは
>▼こうちゃん さん:
>早速やってみましたが,うまくいきません。


>
>>Sub test()
>>
>>  Dim TempClass As String
>>  Dim Srow As Long
>>  Dim Erow As Long
>>  Dim MaxRow As Long
>>  Dim ThisRow As Long
>>  Dim HeadRange As Range
>>  Dim MyRange As Range
>>  Dim ThisSheet As Worksheet
>>
>>  Sheets.Add , Sheets(Sheets.Count)
>>  ActiveSheet.Name = "001"
>>  Sheets.Add , Sheets(Sheets.Count)
>>  ActiveSheet.Name = "002"
>>  Sheets.Add , Sheets(Sheets.Count)
>>  ActiveSheet.Name = "003"
>>  Sheets.Add , Sheets(Sheets.Count)
>>  ActiveSheet.Name = "004"
>>  Sheets.Add , Sheets(Sheets.Count)
>>  ActiveSheet.Name = "005"
>>  Sheets.Add , Sheets(Sheets.Count)
>>  ActiveSheet.Name = "006"
>>  Sheets.Add , Sheets(Sheets.Count)
>>  ActiveSheet.Name = "その他"
>ここまではうまくいくんですが、その後シートごとにコピーされません(泣)
>そして,循環参照とか言うメッセージボックスが出てきてしまいます。

私の書いた条件でいいんですか?違うところがありますか?
もし、違うところがあればもう少し詳細に教えてください。

goriさんのサンプルデータを使用して、当方でこのコードで試験したときは問題なく動いています。

ステップ実行して、どこでエラーが発生するか、確認してみていただけますか?
また途中で変数の値も予想と違わないか確認してみてください。
さらに「循環参照とか言う」ではなくエラーメッセージも正確に教えてください。

また、環境条件(Winの種別、ExcelのVersion等)も教えてください。

>>  Sheets("Q_廃棄エクセルデータ").Select
>>  Set HeadRange = Range("A1:A2").EntireRow
>>  MaxRow = Range("A65536").End(xlUp).Row
>>  ThisRow = 3
>>  Srow = 3
>>  TempClass = Left(Cells(ThisRow, 3).Value, 3)
>>  Do While ThisRow <= MaxRow
>>   If TempClass <> Left(Cells(ThisRow, 3).Value, 3) And TempClass <= "006" Then
>>    Set MyRange = Union(HeadRange, Range(Cells(Srow, 1), _
>>            Cells(ThisRow - 1, 1)).EntireRow)
>>    MyRange.Copy Sheets(StrConv(TempClass, vbWide)).Cells(1, 1)
>>    Srow = ThisRow
>>    TempClass = Left(Cells(ThisRow, 3).Value, 3)
>>   End If
>>   ThisRow = ThisRow + 1
>>  Loop
>>  
>>  Set MyRange = Union(HeadRange, Range(Cells(Srow, 1), Cells(ThisRow - 1, 1)).EntireRow)
>>  MyRange.Copy Sheets("その他").Cells(1, 1)
>>
>>  For Each ThisSheet In Worksheets
>>    If (ThisSheet.Name >= "001" And _
>>      ThisSheet.Name <= "006") Or _
>>      ThisSheet.Name <= "その他" Then
>>      ThisRow = ThisSheet.Range("A65536").End(xlUp).Row + 1
>>      ThisSheet.Cells(ThisRow, 3).Value = "合計"
>>      ThisSheet.Cells(ThisRow, 4).FormulaR1C1 = _
>>          "=SUM(R[-" & ThisRow - 2 & "]C:R[-1]C)"
>>      ThisSheet.Cells(ThisRow, 5).FormulaR1C1 = _
>>          "=SUM(R[-" & ThisRow - 2 & "]C:R[-1]C)"
>>    End If
>>  Next
>>
>>End Sub
 ───────────────────────────────────────  ■題名 : Re:うまくいきません,また教えてください.  ■名前 : gori  ■日付 : 02/10/9(水) 9:28  -------------------------------------------------------------------------
   ▼こうちゃん さん:
こうちゃんさん早速返事いただきありがとうございます。
いつも言葉すくなですいません。

>私の書いた条件でいいんですか?違うところがありますか?
>もし、違うところがあればもう少し詳細に教えてください。
こうちゃんさんの書いた条件で大丈夫です。
>goriさんのサンプルデータを使用して、当方でこのコードで試験したときは問題なく動いています。
>
>ステップ実行して、どこでエラーが発生するか、確認してみていただけますか?
エラーは発生していないのです。
>また途中で変数の値も予想と違わないか確認してみてください。
>さらに「循環参照とか言う」ではなくエラーメッセージも正確に教えてください。
分類のシートごとにコピーされているのではなく、その他に全部コピーされているのです。
最終行の合計式だけが各分類のシートにつけられて、プログラム終了後
循環参照というメッセージボックスが表示されます。
>また、環境条件(Winの種別、ExcelのVersion等)も教えてください。
Windows2000 Professional,Excel2000(Office2000)です。
甘えてばかりいてすいません。


>>>  Sheets("Q_廃棄エクセルデータ").Select
>>>  Set HeadRange = Range("A1:A2").EntireRow
>>>  MaxRow = Range("A65536").End(xlUp).Row
>>>  ThisRow = 3
>>>  Srow = 3
>>>  TempClass = Left(Cells(ThisRow, 3).Value, 3)
>>>  Do While ThisRow <= MaxRow
>>>   If TempClass <> Left(Cells(ThisRow, 3).Value, 3) And TempClass <= "006" Then
>>>    Set MyRange = Union(HeadRange, Range(Cells(Srow, 1), _
>>>            Cells(ThisRow - 1, 1)).EntireRow)
>>>    MyRange.Copy Sheets(StrConv(TempClass, vbWide)).Cells(1, 1)
>>>    Srow = ThisRow
>>>    TempClass = Left(Cells(ThisRow, 3).Value, 3)
>>>   End If
>>>   ThisRow = ThisRow + 1
>>>  Loop
>>>  
>>>  Set MyRange = Union(HeadRange, Range(Cells(Srow, 1), Cells(ThisRow - 1, 1)).EntireRow)
>>>  MyRange.Copy Sheets("その他").Cells(1, 1)
>>>
>>>  For Each ThisSheet In Worksheets
>>>    If (ThisSheet.Name >= "001" And _
>>>      ThisSheet.Name <= "006") Or _
>>>      ThisSheet.Name <= "その他" Then
>>>      ThisRow = ThisSheet.Range("A65536").End(xlUp).Row + 1
>>>      ThisSheet.Cells(ThisRow, 3).Value = "合計"
>>>      ThisSheet.Cells(ThisRow, 4).FormulaR1C1 = _
>>>          "=SUM(R[-" & ThisRow - 2 & "]C:R[-1]C)"
>>>      ThisSheet.Cells(ThisRow, 5).FormulaR1C1 = _
>>>          "=SUM(R[-" & ThisRow - 2 & "]C:R[-1]C)"
>>>    End If
>>>  Next
>>>
>>>End Sub
 ───────────────────────────────────────  ■題名 : 2,3確認です  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/10/9(水) 10:58  -------------------------------------------------------------------------
   gori さん、こんにちは

1.分類コード列のデータは、文字列か?
書式で文字列表示にしていないか?実際に"0010111101"のようなものになっているか?
2.分類コード列はコード順にならんでいるか?

1.で文字列でない場合はコードが変わってきます。
現在のコードではgoriさんのおっしゃるような「循環参照」の可能性もあります。

2.の場合で3行目のデータの分類コードが"001*******”〜"006*******”以外のものである場合は「その他」シートにすべてのデータがコピーされます。

#当方で再現できませんので、よろしければgoriさんが試験している実データを送ってみていただけませんか?(もちろん金額等はダミーでもいいのですが・・)

#合計の計算式の設定にミスがありました。計算式の設定部分を下記コードに変更してください。

  For Each ThisSheet In Worksheets
    If (ThisSheet.Name >= "001" And _
      ThisSheet.Name <= "006") Or _
      ThisSheet.Name <= "その他" Then
      ThisRow = ThisSheet.Range("A65536").End(xlUp).Row + 1
      If ThisRow > 4 Then
        ThisSheet.Cells(ThisRow, 3).Value = "合計"
        ThisSheet.Cells(ThisRow, 4).FormulaR1C1 = "=SUM(R[-" & ThisRow - 3 & "]C:R[-1]C)"
        ThisSheet.Cells(ThisRow, 5).FormulaR1C1 = "=SUM(R[-" & ThisRow - 3 & "]C:R[-1]C)"
      End If
    End If
  Next
 ───────────────────────────────────────  ■題名 : Re:2,3確認です  ■名前 : gori <inasaka@sbsystems.co.jp>  ■日付 : 02/10/9(水) 16:59  -------------------------------------------------------------------------
   ▼こうちゃん さん:
こうちゃんさん,お世話かけすぎですいません。
>
>1.分類コード列のデータは、文字列か?
>書式で文字列表示にしていないか?実際に"0010111101"のようなものになっているか?
>2.分類コード列はコード順にならんでいるか?

>1.で文字列でない場合はコードが変わってきます。
>現在のコードではgoriさんのおっしゃるような「循環参照」の可能性もあります。
アクセスからはきだしているのですが,元のテーブルを見ても型はテキストになってます。
>2.の場合で3行目のデータの分類コードが"001*******”〜"006*******”以外のものである場合は「その他」シートにすべてのデータがコピーされます。
順に並んでいます。
>#当方で再現できませんので、よろしければgoriさんが試験している実データを送ってみていただけませんか?(もちろん金額等はダミーでもいいのですが・・)
設定でメールが開けませんので,すいませんお手数ですが私のメールにアドレスを送っていただけませんでしょうか。

>#合計の計算式の設定にミスがありました。計算式の設定部分を下記コードに変更してください。
>
>  For Each ThisSheet In Worksheets
>    If (ThisSheet.Name >= "001" And _
>      ThisSheet.Name <= "006") Or _
>      ThisSheet.Name <= "その他" Then
>      ThisRow = ThisSheet.Range("A65536").End(xlUp).Row + 1
>      If ThisRow > 4 Then
>        ThisSheet.Cells(ThisRow, 3).Value = "合計"
>        ThisSheet.Cells(ThisRow, 4).FormulaR1C1 = "=SUM(R[-" & ThisRow - 3 & "]C:R[-1]C)"
>        ThisSheet.Cells(ThisRow, 5).FormulaR1C1 = "=SUM(R[-" & ThisRow - 3 & "]C:R[-1]C)"
>      End If
>    End If
>  Next
勝手ばかり申し上げて,すいません。

よろしくお願い致します。
 ───────────────────────────────────────  ■題名 : Bookに異常があります。少しまってね。  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/10/10(木) 11:27  -------------------------------------------------------------------------
   goriさん、こんにちは

送ってもらったBookを確認しましたが、Bookが不正なようです。
原因はまだ判明しませんが、現象としては以下のとおりです。

1.フォントがMSゴシックと表示されているが、シートを見ると明朝で表示されている。
2.いずれかのセルを編集して、Enter押下すると文字化けする。
3.前レスのコードを実行すると「循環参照」フォームが表示されるが、循環先等はみつからない。データもコードどおりにはコピーされない。

対策としては、

1.「Q_廃棄エクセルデータ.xls」のデータをコピーする。(クリップボード)
2.新規Bookの新規シートに「形式を指定してコピー」(値)する。

で正常なBookを作って、コードを実行すればエラーは発生しません。

なお、データ行が2行目から始まっていますので、前レスのコードは1部手直しが必要です。
前記対策を含めてコードを検討しますので、ちょっとお時間くださいね。
 ───────────────────────────────────────  ■題名 : おまちどうさま。(長文注意)  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/10/10(木) 13:48  -------------------------------------------------------------------------
   goriさん、こんにちは

やはり原因は特定できませんでした。

対策コードを書いてみましたので試験してみてください。
新しいBookを「Q_廃棄エクセルデータ.xls」と同じフォルダに作成してください。
Book名は任意です。(シートは1枚でもOK)
以下のプロシージャを標準モジュールに貼ります。
Mainを実行してください。

Sub Main()

  Call DataCopy
  
  Call Classify

End Sub

Sub DataCopy()

  Dim MyBook As Workbook
  Dim Q_Book As Workbook
  Dim ThisSheet As Worksheet

  Set MyBook = ActiveWorkbook
  
  Application.ScreenUpdating = False
  
  '前処理・1番目のシートデータをクリア
  MyBook.Sheets(1).Cells.ClearContents
  '001〜006とその他シート削除
  Application.DisplayAlerts = False
  For Each ThisSheet In Worksheets
    If (ThisSheet.Name >= "001" And _
      ThisSheet.Name <= "006") Or _
      ThisSheet.Name = "その他" Then
      ThisSheet.Delete
    End If
  Next
  Application.DisplayAlerts = True
  
  'Q_廃棄エクセルデータ.xlsを開く
  Set Q_Book = Workbooks.Open(Filename:=MyBook.Path & "\Q_廃棄エクセルデータ.xls")
    
  'Q_廃棄エクセルデータ.xlsの1番目のシートをコピー
  Q_Book.Sheets(1).Cells.Copy
  'このBookの1番目のシートに値貼り付け
  MyBook.Sheets(1).Cells.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
  
  'Q_廃棄エクセルデータ.xlsを閉じる
  Application.CutCopyMode = False
  Q_Book.Close
  
  MyBook.Sheets(1).Name = "Q_廃棄エクセルデータ"
  
  Application.ScreenUpdating = True

  Set Q_Book = Nothing
  Set MyBook = Nothing

End Sub

Sub Classify()

  Dim TempClass As String
  Dim Srow As Long
  Dim Erow As Long
  Dim MaxRow As Long
  Dim ThisRow As Long
  Dim HeadRange As Range
  Dim MyRange As Range
  Dim ThisSheet As Worksheet
  Dim i As Integer
  Dim j As Integer
  
  Application.ScreenUpdating = False
  
  Sheets.Add , Sheets(Sheets.Count)
  ActiveSheet.Name = "001"
  Sheets.Add , Sheets(Sheets.Count)
  ActiveSheet.Name = "002"
  Sheets.Add , Sheets(Sheets.Count)
  ActiveSheet.Name = "003"
  Sheets.Add , Sheets(Sheets.Count)
  ActiveSheet.Name = "004"
  Sheets.Add , Sheets(Sheets.Count)
  ActiveSheet.Name = "005"
  Sheets.Add , Sheets(Sheets.Count)
  ActiveSheet.Name = "006"
  Sheets.Add , Sheets(Sheets.Count)
  ActiveSheet.Name = "その他"

  Sheets("Q_廃棄エクセルデータ").Select
  Set HeadRange = Rows(1)
  MaxRow = Range("A65536").End(xlUp).Row
  ThisRow = 2
  Srow = 2
  
  '2行目のC列の3桁を保持
  TempClass = Left(Cells(ThisRow, 3).Value, 3)
  
  'データを最後までループ
  Do While ThisRow <= MaxRow
   If TempClass <> Left(Cells(ThisRow, 3).Value, 3) And TempClass <= "006" Then
    'TempClassと分類コードが違ったらそこまでの行をクリップボードにコピー
    Set MyRange = Union(HeadRange, Range(Cells(Srow, 1), _
            Cells(ThisRow - 1, 1)).EntireRow)
    '該当の分類シートの3行目以降にコピー
    MyRange.Copy Sheets(TempClass).Cells(3, 1)
    Srow = ThisRow
    TempClass = Left(Cells(ThisRow, 3).Value, 3)
   End If
   ThisRow = ThisRow + 1
  Loop
  
  '分類コード006以降を「その他」シートにコピー
  Set MyRange = Union(HeadRange, Range(Cells(Srow, 1), Cells(ThisRow - 1, 1)).EntireRow)
  MyRange.Copy Sheets("その他").Cells(3, 1)

  For Each ThisSheet In Worksheets
    If (ThisSheet.Name >= "001" And _
      ThisSheet.Name <= "006") Or _
      ThisSheet.Name = "その他" Then
      ThisRow = ThisSheet.Range("A65536").End(xlUp).Row + 1
      '合計計算式設定
      If ThisRow > 4 Then
        ThisSheet.Cells(ThisRow, 4).FormulaR1C1 = "=SUM(R[-" & ThisRow - 3 & "]C:R[-1]C)"
        ThisSheet.Cells(ThisRow, 5).FormulaR1C1 = "=SUM(R[-" & ThisRow - 3 & "]C:R[-1]C)"
        '合計計算式コピー
        ThisSheet.Select
        Range(Cells(ThisRow, 4), Cells(ThisRow, 5)).Copy
        Range("H" & ThisRow & ",L" & ThisRow & ",P" & ThisRow & _
          ",T" & ThisRow & ",X" & ThisRow & ",AB" & ThisRow & _
          ",AF" & ThisRow & ",AJ" & ThisRow & ",AN" & ThisRow & _
          ",AR" & ThisRow & ",AV" & ThisRow & ",AZ" & ThisRow).Select
        ActiveSheet.Paste
        
        '廃棄率欄作成
        Range("H:I,L:M,P:Q,T:U,X:Y,AB:AC,AF:AG,AJ:AK,AN:AO,AR:AS,AV:AW,AZ:BA").Select
        Application.CutCopyMode = False
        Selection.Insert Shift:=xlToRight
        '項目名の補正
        Cells(3, 1).Value = "商品コード"
        Cells(3, 2).Value = "商品名"
        For i = 4 To 70 Step 6
          Cells(2, i).Value = "'" & Left(Cells(3, i).Value, 3)
          For j = 0 To 3
            Cells(3, i + j).Value = Right(Cells(3, i + j).Value, 4)
          Next
          Cells(2, i + 4).Value = "廃棄率"
          Cells(3, i + 4).Value = "金額"
          Cells(3, i + 5).Value = "点数"
        Next
        
        '罫線(大体のところだけです。ちゃんと補正してください)
        Range("A2:CA3").Select
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeTop)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeBottom)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeRight)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
        
        Range("D3:CA3").Select
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeTop)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeBottom)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeRight)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlInsideVertical)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
        
        Range("A4:CA" & ThisRow).Select
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeTop)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeBottom)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeRight)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlInsideVertical)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlInsideHorizontal)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
      
        '項目色つけ
        Range("A2:CA3").Select
        With Selection.Interior
          .ColorIndex = 15
          .Pattern = xlSolid
        End With
      
        'A〜C列オートフィット
        Columns("A:C").EntireColumn.AutoFit
      
      End If
      
      Range("A1").Select
    
    End If
  
  Next
  
  Application.ScreenUpdating = True

End Sub
 ───────────────────────────────────────  ■題名 : Re:おまちどうさま。(長文注意)  ■名前 : gori  ■日付 : 02/10/10(木) 15:24  -------------------------------------------------------------------------
   ▼こうちゃん さん:
ありがとうございました。
早速実行させていただきました。

長々とご迷惑をかけ本当に申し訳ありませんでした。

またわからないことがあったら質問させていただきます。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 186