[あすかぜ・ねっと]あすかぜ・ねっと自作ソフトCassava > サポート掲示板

Cassava Editor サポート掲示板

スレッド一覧に戻る返信

[932] 重複レコードの削除と個数の合算

MEHR [2026/01/11 12:12:16]

お世話になっております。
お助けください。

CSVファイルの編集に関して

2列目(注文番号)が同一 かつ 41列目(商品ID)が重複している場合
重複レコードの1番上だけ残して他重複レコードは削除
ただし42列目(注文個数)の合算を残したレコードに適用する

例)
(処理前)注文番号 商品ID 注文個数
     12345 AAA 1
     12345 AAA 2
     12345 AAA 3
     12345 BBB 3

(処理後)ECサイト注文番号 商品ID 注文個数
     12345 AAA 6
     12345 BBB 3

こんなのできそうですか?
AIでは無理でした

Re: [932] 重複レコードの削除と個数の合算

MEHR [2026/01/11 17:02:00]

すみません これ「質問」カテゴリとなります。

よろしくお願いいたします m(_ _)m

Re: [932] 重複レコードの削除と個数の合算

あすかぜ [2026/01/11 23:30:49]

次のようなマクロでどうでしょうか。


seen = {};

for (y = 1; y <= Bottom; y++) {
  key = [2,y] + "\n" + [41,y];
  if (key in seen) {
    [42,seen[key]] += [42,y];
    DeleteRow(y);
    y--;
  } else {
    seen[key] = y;
  }
}


最初に 2 列目と 41 列目の組み合わせが現れた行を保存しておき、
2 回目以降はその行を更新してから削除しています。

試してみてください。

Re: [932] 重複レコードの削除と個数の合算

MEHR [2026/01/12 16:54:39]

神様、ありがとうございます。
いつも助かっております。 m(_ _)m

Re: [932] 重複レコードの削除と個数の合算

MEHR [2026/01/14 17:19:13]

追加相談お願いします。
以下のように調整しました。
※44列目も合算
------------------------------------------------------------
seen = {};

for (y = 1; y <= Bottom; y++) {
  key = [2,y] + "\n" + [41,y];
  if (key in seen) {
    [42,seen[key]] = ([42,seen[key]]+0) + ([42,y]+0);
    [44,seen[key]] = ([44,seen[key]]+0) + ([44,y]+0);
    
    DeleteRow(y);
    y--;
  } else {
    seen[key] = y;
  }
}
------------------------------------------------------------

要点を言えば、42列目が「個数」 44列目が「単価」となります
※現状は価格が1行目に集約されています
44列目の単価を42列目の個数で割り返した値にすることは可能でしょうか?

例)
(処理前)注文番号 商品ID 注文個数 単価
     12345 AAA 1 1200
     12345 AAA 2 0
     12345 AAA 3 0
     12345 BBB 3 500

(処理後)ECサイト注文番号 商品ID 注文個数
     12345 AAA 6 200   ← 1200/6=200で計算
     12345 BBB 3 500


お手すき時でいいので、お助けください m(_ _)m

Re: [932] 重複レコードの削除と個数の合算

MEHR [2026/01/14 17:20:11]

※補足
>>※現状は価格が1行目に集約されています

重複しているレコードの「1行目」となります。

Re: [932] 重複レコードの削除と個数の合算

あすかぜ [2026/01/14 22:12:33]

マクロを書いてみました。


data = {};
for (y = 1; y <= Bottom; y++) {
  key = [2,y] + "\n" + [41,y];
  if (!(key in data)) {
    data[key] = {firstRow: y, quantity: 0, total: 0};
  }
  data[key].quantity += [42,y];
  data[key].total += [42,y] * [44,y];
}

for (y = Bottom; y >= 1; y--) {
  key = [2,y] + "\n" + [41,y];
  if (y == data[key].firstRow) {
    [42,y] = data[key].quantity;
    [44,y] = data[key].total / data[key].quantity;
  } else {
    DeleteRow(y);
  }
}


2 回 for ループを回し、1 回目に注文個数と金額の合計を取得して 2 回目でテーブルを更新するようにしてみました。
だいぶ複雑になってしまいましたが、役に立つでしょうか。

Re: [932] 重複レコードの削除と個数の合算

MEHR [2026/01/15 15:53:52]

ありがとうございます!
とてもいい感じに動いています。

いつも助かっております。
感謝感謝です。

Re: [932] 重複レコードの削除と個数の合算

MEHR [2026/01/16 10:09:52]

何度も申し訳ございません。
もう一点だけお助けください。

1行目(タイトル行)だけ処理の対象外にするには
どうすればいいでしょうか?

よろしくお願いいたします。 m(_ _)m

Re: [932] 重複レコードの削除と個数の合算

MEHR [2026/01/16 10:22:55]

要点を言えば 42列目と44列目のタイトル情報が
一部文字化けしてしまいます。

Re: [932] 重複レコードの削除と個数の合算

MEHR [2026/01/16 10:28:50]

AI使ってみました。
どうですか?

※44列目は少数以下切り捨てにしました


data = {};
// y = 2 にすることで、画面上の1行目(見出し)と2行目(変な値が入った行)を飛ばします
for (y = 2; y <= Bottom; y++) {
  key = [2,y] + "\n" + [41,y];
  if (!(key in data)) {
    data[key] = {firstRow: y, quantity: 0, total: 0};
  }
  // 数値として認識させるために * 1 を追加
  data[key].quantity += [42,y] * 1;
  data[key].total += ([42,y] * 1) * ([44,y] * 1);
}

// こちらも y >= 2 にして、見出し行に触らせないようにします
for (y = Bottom; y >= 2; y--) {
  key = [2,y] + "\n" + [41,y];
  if (data[key] && y == data[key].firstRow) {
    [42,y] = data[key].quantity;
    [44,y] = int(data[key].total / data[key].quantity);
  } else if (data[key]) {
    DeleteRow(y);
  }
}

MessageBox("重複処理完了 郵便番号と都道府県のチェックをお願いします");

Re: [932] 重複レコードの削除と個数の合算

MEHR [2026/01/16 10:39:28]

※44列目は少数以下切り捨てにしました。
↑これが原因かもしれないです 変な数値になってしまってます

42列目は項目名の頭に「0」が付いてしまいます

Re: [932] 重複レコードの削除と個数の合算

あすかぜ [2026/01/16 22:13:04]

はい、for (y = 2; y <= Bottom; y++)、for (y = Bottom; y >= 2; y--) とすれば 1 行目が処理の対象外になるはずです。
10:28 のマクロで特に問題ないように見えます。

> 変な数値になってしまってます
具体的にどのように変になっているでしょうか?

> 42列目は項目名の頭に「0」が付いてしまいます
項目名は 1 行目でしょうか?
42 列目が文字列の場合は頭に「0」が付いてしまうので、y の範囲を調整して処理対象から外してください。
もし 2 行目も処理したくないのであれば、y = 3; y >= 3; のように処理対象を 3 行目からとしてください。

よろしくお願いします。

Re: [932] 重複レコードの削除と個数の合算

MEHR [2026/01/17 15:16:56]

返信ありがとうございます。
現在は10:28のマクロで動いてる感じなので
しばらく様子見てみます。

>>具体的にどのように変になっているでしょうか?
タイトル情報が膨大なマイナス値になってました。
「-21589755468」みたいな感じで

また何かあれば相談させてください。
ご対応ありがとうございました。 m(_ _)m

スレッド一覧に戻る返信