• ベストアンサー

Excelについて質問します

Excel2000を使用しております。 早速ですが、たとえば以下のようなシートがあります。 <Sheet1> 「商品コード」「数量」「金額」「商品グループコード」   A0001    10  ¥500    01   A0002    12  ¥580    01   A0003    17  ¥690    02 このシートから以下のようなシートを作成します。 <Sheet2>   商品グループ 01  「商品コード」「数量」「金額」    A0001    10  ¥500      A0002    12  ¥580      ・        商品グループ 02  「商品コード」「数量」「金額」   A0003    17  ¥690 このとき、Sheet1の商品グループは毎月の売上状況により変わります(その月売れないものもあれば、新たに売れるものもある)。 Sheet2を自動的(マクロ、VBA)に作成したいのですが、何か良い方法はないでしょうか?うまく表現できなくてすみません。

質問者が選んだベストアンサー

  • ベストアンサー
  • madman
  • ベストアンサー率24% (612/2465)
回答No.1

こんな感じで作成できるでしょう。 ただ、シートを行ったり来たりする方法しか知らないので、画面はちらちらします。 Sub Make_Sheet2() ' ' Macro1 Macro ' マクロ記録日 : 2002/5/14 ユーザー名 : Naoki Higashida ' ' Sheets("Sheet1").Select i = 0 k = 1 j = 0 LP1 = True LP2 = True While LP1 buff = "D" & 2 + i GroupCode = Range(buff).Value If GroupCode = "" Then LP1 = False Else Sheets("Sheet2").Select Range("A" & k).Value = "商品グループコード" Range("B" & k).Value = GroupCode k = k + 1 Range("A" & k).Value = "商品コード" Range("B" & k).Value = "数量" Range("C" & k).Value = "金額" k = k + 1 LP2 = True j = i End If While LP2 Sheets("Sheet1").Select If GroupCode = Range("D" & 2 + j).Value Then Code = Range("A" & 2 + j).Value Num = Range("B" & 2 + j).Value Price = Range("C" & 2 + j).Value Sheets("Sheet2").Select Range("A" & k).Value = Code Range("B" & k).Value = Num Range("C" & k).Value = Price k = k + 1 j = j + 1 Else i = j - 1 LP2 = False End If Wend i = i + 1 Wend End Sub

aikun
質問者

お礼

度々すみません。 追加質問のしかたがわからないでこの項目で質問させていただきます。 上記のコードを試してみたのですが、たしかに2つのシート間を行き来して動いているようなのですが、処理が終わらず暴走(?)してしまいます。 私自身VBAをよく理解していないのかもしれませんが、アドバイスしていただければ幸いです。

aikun
質問者

補足

早速の回答ありがとうございます。 最初の方にある、i,k,j,buffは変数ですようか? 変数なら型は整数型で良いでしょうか?

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

時間がないので、ロジックだけ記します。わかって頂けますように。今日の昼にも、同じようなタイプのプログラム を組んで走らせました。結構似たタイプの処理があるので 私は自分のスタイルとしています。 (1)Sheet1の「商品グループコード」でソートする。 (2)Sheet2の行ポインターをjとする。初期値j=3(例えば)第1行目は見だし。第2行めは項目見だし。 (3)データの最上行3(と仮定)から最下行ll=CurrenntRegion.Row.Count-  1まで、をSheet1の行ポインターとして   For i=3 to ll ( 処理) next i   の(処理)について (4)最初行を除いて、前の行の「商品グループコード」と変わっていないか、For文のすぐ下で、If文で最初に聞く。 (5)変わったら合計をSheet2に入れる等する。入れたあと J=J+1(1行下へ進める) (6)変わらなければ、別シートに転記する。入れた後 J=J+1。別シートへの転記は、列毎に    WorkSheets("Sheet2").cells(j,1)=WorkSheets("Sheet1").cells(i,1) A列の例 で出来る。 (7)For Nextが終わったら、最後の「商品グループコード」の合計書き出しを忘れず、総合計の書き出しも忘れず行って終わる。

aikun
質問者

お礼

回答ありがとうございます。 さっそくためしてみます。

aikun
質問者

補足

度々すみません。 おっしゃていることはわかるのですが、今の私のレベルではこれをコードに書くことができません。おこがましいお願いですが、お暇な時にサンプルコードをお教えいただければ幸いです。

  • madman
  • ベストアンサー率24% (612/2465)
回答No.2

i,j,kは整数型です。 宣言しなくても別段問題なく動作します。(速度が少し落ちますが) i,j,kが各読出し、書き出しの行数を決めています。 今は、 <Sheet1>   A      B   C    D 1「商品コード」「数量」「金額」「商品グループコード」 2  A0001    10  ¥500    01 3  A0002    12  ¥580    01 4  A0003    17  ¥690    02 として、見ています。 また、グループコードは同じコードが連続していないとダメな作りになっています。 レコードは何レコードあっても問題ありません。

aikun
質問者

お礼

ご連絡が遅くなりました。 回答ありがとうござまいす。早速ためしてみます。

関連するQ&A