• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel2000での列集計)

Excel2000での列集計

imogasiの回答

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

マクロが判らないというより、フローチャート(ロジック)作成の問題と認識すべきです。 補足に対する回答有難うございました。判りました。 2ステップに分けるほうが判り易いと思いますので分けます。 まず列を縮約する処理を下記に載せます。少数例でテスト済み。 (仮定1)第1行は毎日(列)に、月数字が入っていると仮定。今年2003年と仮定。 (仮定2)月を越えて次の月曜がある週で、月末で切っていない。(月末までと月初から月曜までに分けていない) (仮定3)1表は256列が限度ですが(365日入れられませんが、)どうするか、疑問のまま256列以内と仮定。 (1)源データ(Sheet1)の保存、繰り返しテストのやりやすさのために、別シートSheet2に目的の結果データを作る。 (2)下記プログラムロジックとなる。 (A)初期値セット。    Sheet1のセル(3,3)よりスタート。    i=3、j=4    Sheet2もセル(3,4)よりスタート。    k=3,m=4  (B)Sheet1の最下行か---->処理終わり。    最下行を調べfor・nextでやればこのステップなし。 Sheet1の最右行か---->この行の処理終わり。次行の処理へ。i=i+1    最下行を調べfor・nextでやればこのステップなし。 (C)Sheet1の最右列か----><であるとき>                    Sheet1の                   次ぎの行へ進む                    i=i+1。                    そして(B)                    へ。 (D)月曜日か(1行j列&2行j列で曜日判定)--> <であるとき>     月日セット。              Sheet2でm=m+1。  <でないとき>     (E)へ。 (E)セル(i,j)は空白か。-->(G)へ。 (F)Sheet1のセル(i,j)をSheet2のセル(k、m)へセット。(前日等と同じでも上書きする。ロジックを単調にするため) (G)Sheet1の次ぎの列へ進む。j=j+1 (H)(C)へ行く。 ----------------- Sub test01() Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") d = Range("d3").CurrentRegion.Rows.Count r = Range("d3").CurrentRegion.Columns.Count '---- For i = 3 To d k = i m = 4 sh2.Cells(1, m) = sh1.Cells(1, 4) sh2.Cells(2, m) = sh1.Cells(2, 4) m = m + 1 For j = 4 To r '------ y1 = 2003 m1 = sh1.Cells(1, j) d1 = sh1.Cells(2, j) ds = DateSerial(y1, m1, d1) yb = Weekday(ds) '---月曜日か If yb = 2 Then sh2.Cells(1, m) = sh1.Cells(1, j) sh2.Cells(2, m) = sh1.Cells(2, j) m = m + 1 End If '----セル空白でないか-- If sh1.Cells(i, j) <> "" Then sh2.Cells(k, m) = sh1.Cells(i, j) End If Next j Next i End Sub

RRHH
質問者

補足

imogasiさん、早々のご回答ありがとうございます。 ですが、私の知識では少し難しいようで理解できません。すみません。 Sub test01() からEnd Subまでがマクロですよね。 これをVBAのModule1に貼り付けさせていただき実行したところds = DateSerial(y1, m1, d1)のところで引っかかってしまいました。 多分1行目の仮定が違うせいだと思うのですが、私には直す事ができません。 ちなみに1行目には、D1のセルから右に20030106~20030630までこのような形で入力されていると考えてください。(半年分) 2行目は、D2のセルから月~日の繰り返しで、20030630は月で終わっています。 どこを変えればいいのか、教えていただけると助かります。 何度も申し訳ありませんが、宜しくお願いいたします。

関連するQ&A

  • Excelで行方向に並んだデータを列に

    こんばんは。 質問タイトルをどう書いていいのかわからず、わかりにくくてすみません。 こういうExcelの表があります。 A表 A列 B列 No  code   1  10 1  11 1  12 2  10 3  14 4  14 4  15 それを次のようにしたいと思ってます。 B表 A列 B列  C列  D列 No  code1 code2 code3 1  10   11  12 2  10 3  14 4  14   15 A列にあるのがサンプルNoで、それぞれに対応するコードが縦に並んでいる(A表)のを、サンプルNoを重複させずにコードを横に展開(B表)したいのです。 今は各サンプルで重複しているコード数を出して、2以上だったらif関数で横に持っていくという非常に面倒な方法を取っています。 他によい方法はないでしょうか。なお、マクロは嫌がられるので使えません。 データ数よりもシート数(1シートに1つの表)が多く、できるだけ簡単な方法があれば教えていただけますでしょうか。 以上よろしくお願いします。

  • 関数でなんとかなりませんか?(EXCEL)

    マクロや関数に関してはあまり知識がありません。 そこでお教えいただきたいことがあり、質問させていただきました。 まず、あるワークシートに以下のような表があります。 A列|B列 a   1 b   1 c   1 d   2 e   2 この表を新しいワークシート(ワークシート名:並べ替え)以下のように並べ替えたいと思っています。 A列|B列|C列|D列 1   a   b   c 2   d   e 要するに、B列の値を認識して値が同じものを1行目に横並びにしたいのです。 関数やマクロでなんとかなりませんか? 膨大なデータがあるので手作業でやるととてもしんどいですし、間違いがでやすくなり困っています。 お願いいたします。

  • [EXCEL2000]複数の列からデータを取り出して1列にまとめたい!

    (1)一行にA列、B列、C列があります。 (2)各行のどれか1つの列には、必ずデータが入っています。 (3)データの入っているセルからデータを取り出し、D列の同じ行のセルに移します。(コピーでもかまいません) (4)結果、D列には、A列~C列のデータが1列にまとまる! 具体的には↓のようになりますが、どのような関数を使えばよいですか?教えてください。 (具体例) A列 B列 C列 D列 12         12        50  50      32     32

  • 【Excel VBA】条件つき行削除

    Excel2003を使用しています。 システムからCSVで落としたデータで、データの並び方に規則性があるので、それを利用して、不要部分のデータをマクロで削除できないかと思い、質問させていただきます。 A列に『累計』を含む文字があった場合、その行のD列が0だったら、その行より上の行のA列に『計上日』と入力されている行までを削除するということをしたいです。 下記でいうと、2~5行までを削除したいです。    A     B     C     D 1 2 計上日 3 4 5 累計                0 6 7 計上日 8 9 累計              1000 上記では、B列、C列には何も書いていませんが、実際はデータが入力されていたり、空欄だったりです。 D列が0の行を削除するコードはわかるのですが、さらに、条件が加わっても同じように処理は可能でしょうか? よろしくお願いします。

  • 複数列の集計(Excel)

    下記のような物をExcel2000で作りたいのですが可能でしょうか? まず、データとして下のようなリストがあります。 A(列)     B(列)     C(列)     D(列) 日付1     数値1   日付2    数値2 2004/6/1   100    2004/7/2   500 2004/1/3   300    2004/1/3   400 2004/3/15   540    2004/5/4   980 2004/1/1   800    2004/8/6   230 2004/1/3   200    2004/2/8   450    ・      ・       ・      ・    ・      ・       ・      ・    ・      ・       ・      ・ 列数は決まってますが、行数は増えていきます。 そして別のシートに下のようなリストが別にあり、 A(列)       B(列)       C(列)      D(列) 2004/1/1    2004/1/2    2004/1/3    2004/1/4・・・(31日まで続きます) ここにある日付と先ほどのリストの日付1と日付2を照合して、 日付1で一致したら数値1の数値を 日付2で一致したら数値2の数値を 持ってきて、なおかつそれを合計した数値を表示したいのです。 上のデータを使って表現すると下のようになって欲しいのです。 A(列)       B(列)       C(列)      D(列) 2004/1/1    2004/1/2    2004/1/3    2004/1/4・・・(31日まで続きます) 800                  900 つまりはその日毎の数値の合計値が欲しいのですが、 検索値となる日付が2列(複数列)に分かれてしまっていて うまくいきません。 自分の仕事を丸投げするようで大変申し訳ないのですが どなたかお教えいただけませんでしょうか?

  • エクセルでの集計

    A列に下記のようなデータが千件くらい入っています。 例:C-100/50/5/5   A-200/100/50/5   B-100/100/10/10   C-100/50/5/5   A-200/100/50/5   D-300/50/50       ・       ・ かなり重複もあります。 C列にA列のデータを以下の様に集計したいと思います。 例:A-200/100/50/5   B-100/100/10/10   C-100/50/5/5   D-300/50/50      ・      ・ 重複している場合は1行とし抜き出し、順番に集計したいのですが、 マクロか関数でする場合、どのような記述になるのでしょうか? よろしくお願いします。

  • Excelで1列のデータを5列に振り分けする

    Excel2003でA列に1行にあるデータ(半角英数字)を 次のシートに、1行ずつコピーして、それを5列に振り分けするというマクロを作りたいです。 (ただし、コピーは2つずつの時もあります。) 元データ ●A列 B列 C列  1  2  3  4  5  ・  ・ 加工後 ●A列 B列 C列 D列 E列   1   1   2   2   3   3   4   4   5   5   上記のような感じです。ただデータは数字のみでなくて、英数字です。 Excelのマクロは全くの初心者で大変困っています。 どうぞよろしくお願いたします。

  • 【Excel】ある文字列を含んだ行の数値をとりだしたい

    Excel2003を使用しています。       A列     B列      C列     D列   1行  2行  ○月計    100      50      50  3行  4行  5行  ×月計    200      100     100 A列に「月計」を含んだセルがあったら、そのD列は[=B-C]としたいのですが どうすればいいでしょうか? 例えば、上記の場合だとA2セルに「○月計」と入っているので、D2セルには[=B2-C2]の計算結果を 表示させたいのです。 いろいろやってみましたが、うまくいきません。 よろしくお願いします。

  • エクセル集計

    エクセルで質問です。 sheet1   列   A           B 行          (名称)       (判定) 1   あいうえお        A 2   あいうえお        C 3   かきくけこ        C  4   かきくけこ        B 5   かきくけこ        B という元データがあり、みてのとおり同じ名前のものが複数あり各々で判定が違います。 次に、別のシートには(※同じシートで列をAAとしてもよいが) sheet2   列  A       B    C    D 行                判定 1             A    B    C 2   あいうえお    1         1 3   かきくけこ         2    1 という具合に、A列には名前が複数あってもひとつとしその右側に判定の種別ごとに数を記入する。 という集計表を作成したいのですが、どなたか教えてください。 ちなみにマクロはできませんのであしからず・・・・

  • EXCEL2007 集計方法を教えて下さい。

    EXCEL2007 集計方法を教えて下さい。 sheet1は、商品の出荷データが入っています。 A列・・得意先コード、B列・・品番、C列・・出荷数 sheet2で集計します。 A2以降に商品コードが入力してあります。 A1に得意先コードを入力すれば、sheet1のA列を参照し、該当得意先の商品出荷数をsheet2のC列に集計したいのです。 (sheet1のデータは羅列です。 例えば、山本屋のりんご購入履歴が1行目や10行目21行目と入力されているイメージです。