Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
データを編集して転記
投稿日時: 23/10/28 22:29:30
投稿者: ひろまさ

いつもお世話になっております。
アドバイスをお願いしたい事がございます。
元シートの親CDが同じで、構成する子CDが同じ場合、同レートを加算
して転記先シートに転記を行う処理です。
しかし、例外がございます。
 
・例外@
 構成の子CDの同レートに”未”が存在する場合は、転記先シートに
 ”未”で転記
・例外A
 構成の子CDの同レートが空白の場合、転記先シートに0(ゼロ)を転記
 
具体的には以下の結果です。
 
■元シート
親CD 子CD  Aレート@ AレートA Bレート@ BレートA
100  10   100    200    100   200
100  20   未     未    100   200
100  30   200    300    200   100
200  10   100    200    未    未
300  10              200   100
 
 
■転記先シート
親CD  Aレート  Bレート
 
 
■転記先シート(結果)
親CD  Aレート  Bレート
100   未    900
200   300    未
300   0     300
 
いろいろと検索をして確認を行いましたが、先に進まないのでご質問を
させて頂きました。
よろしくお願い致します。

投稿日時: 23/10/29 00:01:26
投稿者: ひろまさ

転記先シートですが、親CDが順不同で入力されています。
 
誤)
■転記先シート
親CD  Aレート  Bレート
 
正)
■転記先シート
親CD  Aレート  Bレート
100
200
300
 
申し訳ございませんでした。

回答
投稿日時: 23/10/29 11:05:27
投稿者: simple

(1)ワークシート関数で計算できそうに思います。

 親cdごとに以下を実行(親cdをkeyとする)
 ・親cdがkeyと一致し、かつAレート@が"未"である個数をカウント(COUNTIFS)
 ・親cdがkeyと一致し、かつAレートAが"未"である個数をカウント(COUNTIFS)
 ・合計件数が1以上なら、Aレートには"未"とする
 ・合計件数が0なら、
     ・親cdがkeyと一致するAレート@の合計を計算(SUMIFS)
     ・親cdがkeyと一致するAレートAの合計を計算(SUMIFS)
     ・両者の合計を Aレートに書き込む
 ・以上をIF関数で一つの式にまとめる。
 ・Bレートも同様に計算

学習のためにVBAで実行したいということなら、以下。
(2)
   オートフィルタで親cdごとに抽出し、C:D列の可視セルを対象に
     ・"未"Aレートの有無をFindメソッドで判定する
     ・合計は Application.Sum で計算して、"未" または合計額を書き込む
     ・E:F列についても同様。
   以上を各親cdごとに繰り返す。
(3)すべてをFor ... Loopで計算する
 
ご自分でできるところまでトライされたらいかがですか?
そのうえで、詰まっているところを具体的に質問してください。

回答
投稿日時: 23/10/29 16:02:12
投稿者: WinArrow

数式での対応案
  
元シートをSheet1,
転記先シートをSheet2
とします。
  
Sheet2のセルB2に
=IF(COUNTIFS(Sheet1!$C$2:$C$6,"未",Sheet1!$A$2:$A$6,$A2)+COUNTIFS(Sheet1!$D$2:$D$6,"未",Sheet1!$A$2:$A$6,$A2)>0,"未",SUMIFS(Sheet1!$C$2:$C$6,Sheet1!$A$2:$A$6,Sheet2!$A2)+SUMIFS(Sheet1!$D$2:$D$6,Sheet1!$A$2:$A$6,Sheet2!$A2))
 
Sheet2のセルC2に
=IF(COUNTIFS(Sheet1!$E$2:$E$6,"未",Sheet1!$A$2:$A$6,$A2)+COUNTIFS(Sheet1!$F$2:$F$6,"未",Sheet1!$A$2:$A$6,$A2)>0,"未",SUMIFS(Sheet1!$E$2:$E$6,Sheet1!$A$2:$A$6,Sheet2!$A2)+SUMIFS(Sheet1!$F$2:$F$6,Sheet1!$A$2:$A$6,Sheet2!$A2))
 
 
Sheet2のセルB2:C2を下へコピー

投稿日時: 23/10/29 21:57:48
投稿者: ひろまさ

simpleさん、WinArrowさん アドバイスを頂きありがとうございます。
お返事が大変おそくなりお詫び申しあげます。
 
WinArrowさん
 数式での対応案についてありがとうございます。
 ご質問をさせて頂いた例では望んでいた結果が表示されるのですが、
 実際に利用したい処理ではどうしても”未”の判定が表示されないで、
 0(ゼロ)が表示されます。
 誠に恐縮ではございますが、何か考えられる原因がございましたら
 ご教示を頂けないでしょうか。
 
 実際には以下のような数式を記載しています。
 =IF(COUNTIFS(構成表!$G$2:$G$5000,"未",構成表!$B$2:$B$5000,$B2)+COUNTIFS(構成表!$H$2:$H$5000,"未",構成表!$B$2:$B$5000,$B2)>0,"未",SUMIFS(構成表!$G$2:$G$5000,構成表!$B$2:$B$5000,元データ!$A2)+SUMIFS(構成表!$H$2:$H$5000,構成表!$B$2:$B$5000,元データ!$A2))
 
元シートを「構成表」、転記先シートを「元データ」としています。
そして、「元データ」シートのJ列に貼り付けて下にコピーを行いました。
 
■構成表の項目
 a@図番 レベル 子図番 実質同じ 個数 マシンレートA マンレートB ・・・
■元データの項目
図番 部番 機種名 品名 ロット数 鋼材 その他 調整 管理 加工(J列) ・・・
 
よろしくお願い致します。
 
 
 

回答
投稿日時: 23/10/29 22:44:24
投稿者: WinArrow

2つの疑問点
 
(1)「AレートA」や「BレートA」
最初の質問時には、
「AレートA」や「BレートA」
があったのに、実際のレイアウトにはありません。
 
(2)■元データの項目:図番に位置
↑は、A列ということですよね?
 
しかし、数式の中では、B2 となっています。
こちらが、致命的です。
 

回答
投稿日時: 23/10/29 23:00:14
投稿者: WinArrow

追記
 
↑の疑問(1)
項目がなくなったら、数式を変更しなくちゃいけないよね?
まずは、数式の意味を理解するのが先決でしょう。

投稿日時: 23/10/29 23:14:50
投稿者: ひろまさ

WinArrowさん 大変申し訳ございませんでした。
最初はVBAでの作成を考えており、実際の処理でご質問をさせて頂くのは
問題があると思い、例としてご質問をさせて頂きました。
 
(1)「AレートA」や「BレートA」
最初の質問時には、
「AレートA」や「BレートA」
があったのに、実際のレイアウトにはありません。
 
 ⇒2回目のご質問に対しても記載に誤りがございました。
  マシンレートA マンレートBと記載させて頂きましたが、実際には
  「マシンレートA」、「マンレートA」、「マシンレートB」、「マンレートB」
  になります。
 
(2)■元データの項目:図番に位置
↑は、A列ということですよね?
 
しかし、数式の中では、B2 となっています。
こちらが、致命的です。
 
 ⇒WinArrowさんのおっしゃる通りです。
  図番は、例の親CDに該当します。
  数式の元データの2ヶ所の箇所については「元データ!$A2!」と記載して
  おります。
  恐縮ではございますが、改めてご指摘を頂ければ幸いです。
 
お詫び申し上げます。
 
 
 
 
 

回答
投稿日時: 23/10/30 06:25:17
投稿者: simple

横から失礼します。
現在の数式を整形すると以下です。
=IF(COUNTIFS(構成表!$G$2:$G$5000,"未",構成表!$B$2:$B$5000,$B2)
      +COUNTIFS(構成表!$H$2:$H$5000,"未",構成表!$B$2:$B$5000,$B2)>0,
    "未",
    SUMIFS(構成表!$G$2:$G$5000,構成表!$B$2:$B$5000,元データ!$A2)
      +SUMIFS(構成表!$H$2:$H$5000,構成表!$B$2:$B$5000,元データ!$A2)
 )
赤字の部分が致命的なミスです、と指摘されているんですが、通じませんか?
私の回答の最初に、説明を書いていますが、
式の意味をよく考えて、それを理解することが大切かと思います。
 
# 結果もらってOKといったことを繰り返していくうちに、
# 地道に理解することが億劫になりがちです。
# こうした質問掲示板を利用する際に、お互いに気を付けないといけません。
なお、シート名を省略したものは、式が書かれている自シートを意味します。
(混在していますがご愛敬ですかね)

投稿日時: 23/10/30 09:23:12
投稿者: ひろまさ

simpleさん ご指摘ありがとうございます。
simpleさんがおっしゃる通り私のミスです。
ネットで数式の意味を確認しながら、現在作成している処理のセルに合わせて
いきましたが、私の理解不足でした。
今後はきちんと確認を行ない、ご質問をさせて頂きます。
大変申し訳ございませんでした。
 
WinArrowさん
ご指摘を頂いた箇所の修正を行い、”未”が表示される事を確認しました。
他の列に対しても変更を行い確認を行なっていきます。
数式での対応案を記載して頂き大変助かりましたが、きちんと確認をしないで
再度、ご質問をさせて頂いた事に対して反省しています。
大変申し訳ございませんでした。
 
 
今後ともよろしくお願いいたします。