
tatsu99様
いつもお世話になっております。
以前、ご教授頂きました件で変更がございましたので
質問させていただきます。
↓
https://oshiete.goo.ne.jp/qa/10992933.html
module1
最優秀拠点部署
module3
最優秀拠点部署数量金額
module5
最優秀拠点部署売上金額
※module4、6については下記にて修正いただきました。
https://oshiete.goo.ne.jp/qa/11003131.html
別件で対象列が変動した場合についてご教授頂きましたが
再度、本件の場合についてもマクロのどの部分を修正すればよいのか?
ご教授頂けますと幸いです。
ひと月ごとの列数がC列から23列→41列へ変更。
対象列が下記へ変更となりました。
対象項目対象行には変更ございません。
計画
数量/売上→O列
粗利→Q列
実績
数量/売上→AA列
粗利→AC列
数量/売上達成率→AM列
粗利達成率→AN列
お忙しいかと存じますが、何卒ご教授願います。


No.9ベストアンサー
- 回答日時:
module5の修正点
1.ひと月ごとの列数がC列から23列→41列へ変更。
Private Function get_src_col_by_index(ByVal mx As Long)
をmodule1と同様に修正する。
2.項目対応の変更点
下記プロシージャの以下の個所を修正します。
Private Sub sheet_rank(ByVal ws1 As Worksheet, ByVal wbook As Workbook, ByVal trow As Long)
----------------------------------------
'全月分繰り返す
For i = 0 To UBound(month_flg)
'当該月インデックスの月が到来済みなら処理する
If month_flg(i) = True Then
src_col = get_src_col_by_index(i)
wk_col = get_work_col_by_index(i)
If IsNumeric(src_ws.Cells(trow, src_col + 6).Value) = False Then・・・・①
MsgBox ("数量不正")
src_ws.Cells(trow, src_col + 6).Select・・・・①
Application.Calculation = xlCalculationAutomatic
End
End If
'拠点
If src_ws.Range("A1").Value = 1 Then
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col).Value = src_name 'エリア/支店
Else
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 1).Value = src_name '店舗/課・営業所
End If
'20191001修正開始
'20191002修正開始
If src_ws.Cells(trow, src_col + 5).Value <> "" Then・・・・②
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 2).Value = _
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 2).Value + src_ws.Cells(trow, src_col + 5).Value '売上粗利計画・・・②
End If
If src_ws.Cells(trow, src_col + 8).Value <> "" Then・・・・③
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 3).Value = _
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 3).Value + src_ws.Cells(trow, src_col + 8).Value '売上粗利実績・・・③
End If
'達成率粗利
kei_val = ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 2).Value
jis_val = ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 3).Value
If kei_val = 0 Then
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 4).Value = ""
Else
If kei_val < 0 Then
If jis_val < kei_val Then
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 4).Value = Abs(jis_val) / kei_val
Else
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 4).Value = jis_val / Abs(kei_val) + 2
End If
Else
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 4).Value = jis_val / kei_val
End If
End If
'20191002修正終了
'20191001修正終了
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 5).Value = src_ws.Range("A1").Value 'A1の値(ソートに使用)
'対計画達成/未達成額 追加開始20190311
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 6).Value = _
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 3).Value - ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 2).Value
'対計画達成/未達成額 追加終了20190311
End If
Next
End If
--------------------------------------
上記の①~③の行について、以下の変更を行います。
① 2か所 6→24
② 2か所 5→14
③ 2か所 8→26
以上で、完了です。

No.17
- 回答日時:
>第一四半期におきましては達成/未達成額の列がFJ列となります。
これは、あなたの提示された図の10月の伸長額対計画金額(AO列)のことですね。
そうであれば、第一四半期ではFH列(相対位置38)ではないでしょうか。
お世話になっております。
ご返信が遅くなり、申し訳ありません。
№5でご教授頂きましたように22→38に修正したので、ご教授頂いた通りになっておりました。
また、再度検証しませいたところ、やはり月、Qによって金額が違っているようでした。。。
お騒がせして申し訳ございません。
再度元データを精査した上で検証したいと思います。
お手数をおかけして申し訳ございません。
また、別途要望がございまして、どのようにしたらよいかお知恵をお借りできましたら幸いです。
決まりましたら、ご質問させて頂きます。
お忙しい中、ご教授頂きましてありがとうございます。

No.16
- 回答日時:
到来月と設定される月の関係です。
参考までに。到来月 設定される月
10 10,1Q,上半期、年間
11 10,11,1Q,上半期、年間
12 10,11,12,1Q,上半期、年間
1 10,11,12,1Q,1,2Q,上半期、年間
2 10,11,12,1Q,1,2,2Q,上半期、年間
3 10,11,12,1Q,1,2,3,2Q,上半期、年間
4 10,11,12,1Q,1,2,3,2Q,上半期、4,3Q,下半期,年間
5 10,11,12,1Q,1,2,3,2Q,上半期、4,5,3Q,下半期,年間
6 10,11,12,1Q,1,2,3,2Q,上半期、4,5,6,3Q,下半期,年間
7 10,11,12,1Q,1,2,3,2Q,上半期、4,5,6,3Q,7,4Q,下半期,年間
8 10,11,12,1Q,1,2,3,2Q,上半期、4,5,6,3Q,7,8,4Q,下半期,年間
9 10,11,12,1Q,1,2,3,2Q,上半期、4,5,6,3Q,7,8,9,4Q,下半期,年間

No.14
- 回答日時:
>module1なのですが、ひと月分の達成/未達成額は表示されるのですが
>第一、第二、第三四半期、上半期、下半期、年間の部分が0になってしまいます。
元データの第一、第二、第三四半期、上半期、下半期、年間の達成/未達成額が設定されていないと思われます。
元データに上記項目が設定されていないと、0になります。
以前の処理でも、同じことが起こると思いますが、いかがでしょうか。
お世話になっております。
わたしも元データ確認したのですが
元データには入っておりました。
明日、もう一度確認させていただきまして、ご報告させていただきます。
もし、元データに入っているのに表示されないのはわたしの修正に誤りがある可能性がありますでしょうか?

No.13
- 回答日時:
修正個所は以下のようになります。
If src_ws.Cells(176, src_col + 21).Value <> "" And IsNumeric(src_ws.Cells(176, src_col + 21).Value) = False Then・・・①
MsgBox ("経常利益達成率不正")
src_ws.Cells(176, src_col + 21).Select
Application.Calculation = xlCalculationAutomatic
End
End If
'20191001修正開始
'経常利益
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col).Value = src_name 'エリア/支店
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 1).Value = _
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 1).Value + src_ws.Cells(176, src_col + 5).Value '粗利計画
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 2).Value = _
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 2).Value + src_ws.Cells(176, src_col + 8).Value '粗利実績
If src_ws.Cells(176, src_col + 21).Value <> "" Then・・・②開始
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 3).Value = _
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 3).Value + src_ws.Cells(176, src_col + 21).Value '達成率対計画金額
End If・・・②終了
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 4).Value = _
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 4).Value + src_ws.Cells(176, src_col + 22).Value '伸長額対計画金額
If src_ws.Cells(181, src_col + 21).Value <> "" And IsNumeric(src_ws.Cells(181, src_col + 21).Value) = False Then・・・③
MsgBox ("収支 合計達成率不正")
src_ws.Cells(181, src_col + 21).Select
Application.Calculation = xlCalculationAutomatic
End
End If
'収支 合計
ThisWorkbook.Worksheets(wn2).Cells(wk_row, wk_col).Value = src_name 'エリア/支店
ThisWorkbook.Worksheets(wn2).Cells(wk_row, wk_col + 1).Value = _
ThisWorkbook.Worksheets(wn2).Cells(wk_row, wk_col + 1).Value + src_ws.Cells(181, src_col + 5).Value '粗利計画
ThisWorkbook.Worksheets(wn2).Cells(wk_row, wk_col + 2).Value = _
ThisWorkbook.Worksheets(wn2).Cells(wk_row, wk_col + 2).Value + src_ws.Cells(181, src_col + 8).Value '粗利実績
If src_ws.Cells(181, src_col + 21).Value <> "" Then・・・④開始
ThisWorkbook.Worksheets(wn2).Cells(wk_row, wk_col + 3).Value = _
ThisWorkbook.Worksheets(wn2).Cells(wk_row, wk_col + 3).Value + src_ws.Cells(181, src_col + 21).Value '達成率対計画金額
End If・・・④終了
ThisWorkbook.Worksheets(wn2).Cells(wk_row, wk_col + 4).Value = _
ThisWorkbook.Worksheets(wn2).Cells(wk_row, wk_col + 4).Value + src_ws.Cells(181, src_col + 22).Value '伸長額対計画金額
①,②、③、④になります。
(21は37に置き換えてください)
①、③は1行のみです。
①、③は、空白以外でかつ数字でないならエラーにするようにしました。(よって空白はえらーにならない)
②、④は、空白のデータを加算するとエラーになるので、空白でないなら加算するようにしました。
・・・①などの「・・・①」の文字は実際にはマクロにはつけないでください。
②、④は、if文なのでインデントを付けます。(投稿時、空白が削除されるので見た目ではインデントがついていませんが)
②は
If src_ws.Cells(176, src_col + 21).Value <> "" Then・・・②開始
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 3).Value = _
ThisWorkbook.Worksheets(wn1).Cells(wk_row, wk_col + 3).Value + src_ws.Cells(176, src_col + 21).Value '達成率対計画金額
End If・・・②終了
のように、コーディングしてください。(意図的に全角空白を入れています。全角空白があるので、この個所はコピペしないでください。)
他の列も空白があれば、エラーになる可能性がありますが、とりあえず、まずは、AN列の対応のみ行います。
本件、諸々ご教授頂きましてありがとうございます。
理解しながら私のほうで修正いたしましたが
module1なのですが、ひと月分の達成/未達成額は表示されるのですが
第一、第二、第三四半期、上半期、下半期、年間の部分が0になってしまいます。
何が考えられるでしょうか?

No.12
- 回答日時:
>1.メッセージボックスに「経常利益達成率不正」と表示されます。
AN列に空白が設定されている可能性があります。
ANへ
=IFERROR(xxx,"")のように
""(ダブルクート2つ)で空白を設定すると、エラーになります。
マクロで対応するのは可能ですが、このエラーは、今までは、出ていなかったはずです。
今までの粗利達成率算出の計算式が変わったのでしょうか。
今までのX列の式と、今回のAN列は、同じ考え方であれば、””の空白にはならないはずなのですが。
お仰る通り、=IF(ISERROR(AA6/O6),"",AA6/O6)の数式が入っております。
以前は値で貼り付けられていたので、その際修正頂いたように認識しております。
回避できるように修正頂くことは可能でしょうか?
お手数をおかけして申し訳ありませんが、よろしくお願いいたします。

No.11
- 回答日時:
エラーは
1.メッセージボックスに「経常利益達成率不正」又は「収支 合計達成率不正」がでるエラーですか?
2.それとも、途中で止まってしまうエラーですか?
1なら、AN列が不正の意味です。
「AM列のみ集計項目によって、空白になっていたり数式が入っていたりまちまちになっている為」
とありますが、AM列はこの時点で、参照していないのでエラーになりません。
まず、どちらのエラーなのかを確認させてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAで重複データを合算したい(時間) 1 2022/12/08 23:06
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) 判定結果に応じて〇印(図形)をつけるマクロ 4 2022/10/30 11:22
- Excel(エクセル) GETPIVOTDATAにかんして 1 2022/04/20 21:03
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) Excel 知恵を下さい。 下記表は、例です。本来の表のデータ量は、1000件以上あります… A列: 9 2023/01/13 12:08
- Visual Basic(VBA) エクセルVBA コードが同じでもファイルによって処理速度が大きく変わるのはなぜ 5 2022/11/06 21:34
- Visual Basic(VBA) チームごとにどの商品を何個希望しているか数量を算出したいです。 A列(A2~A265)に各チーム名が 3 2023/07/18 18:46
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【修正希望】【マクロ】元デー...
-
GROUP BYを行った後に結合した...
-
OracleのSQL*PLUSで、デー...
-
Oracleでの文字列連結サイズの上限
-
DataGridViewの内容をDBに反映...
-
最新の日付とその金額をクエリ...
-
カレントレコードが無い事を判...
-
ファイル書込みで一行もしくは...
-
MERGE文を単体テーブルに対して...
-
差し込み印刷のレコード数について
-
ワードの差込印刷で教えて下さ...
-
JSPのNULLレコード表示について...
-
結合と副問い合わせの違い
-
SELECTでの指定行からの指定行...
-
Excelでセルの書式設定を使用し...
-
確認ダイアログを出さないでレ...
-
MySQLで変数やループ、上位3名...
-
JOIN先のデータを両方の行にSel...
-
Accessで一致したデータを表示...
-
[VBA] ADOの Clone と AddNew
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関係演算子が無効です。
-
SQL 外部結合についての質問
-
エラー2「無効な識別子です」
-
自己相関サブクエリと自己結合...
-
9iのSQL:1999構文を使用した外...
-
外部結合について
-
エクセルVBAでSUM関数の位置を...
-
SQL:テーブル結合で該当レコー...
-
エラー「無効な識別子です」
-
range表記をcells表記にしたい
-
LEFT JOINの条件式で=’’を使用...
-
INNER JOINとwhere句
-
Excel VBAで、Averageの範囲を...
-
2つのSQL(Access)の結果[時刻,...
-
T-SQL 動的に優先順ごとにデー...
-
【修正希望】【マクロ】元デー...
-
Oracle SQL 結合の手法について
-
TO_CHAR関数における外部結合に...
-
SQLで後方の文字列を置換する方法
-
DBを問わないSQLのチューニング...
おすすめ情報
tatsu99様
おはようございます。
やはり確認しましたが、数字が入っております。
第一四半期におきましては達成/未達成額の列がFJ列となります。