Excel (VBA)

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

 
(Windows 10 Pro : Excel 2010)
vlookupかfindの検索で検索結果から条件分岐
投稿日時: 18/03/15 22:48:24
投稿者: yuyuyumon

説明が難しいのですが、
営業、受注、製造、販売と行程マスタのシートがあり、
営業→受注→製造→販売と進むのですが、
受注、製造、販売は前工程が作業名によって変わるので、
行程マスタに受注前、製造前、販売前に前作業を入れています。
 
目的は作業名にあった工程数を行程マスタから検索して、
工程数のセルに入れたいのですが、
普通に行程マスタから検索するには、vlookupで取得できたのですが、
問題が、工程数を取得したら、前工程の工程数をマイナスしないといけません。
前工程が必ずしも一つ前ではないので、条件でシートを変更できる
ように行程マスタに前を入れて同じ行のセルによってマイナスする
シートを選択しようと思っているのですが、
アイデアがでてきません。
何か方法があればお願いします。
loopやfor nextでいけそうな気もするのですが、なんとかお願いします。
 
営業、受注、製造、販売のシートは
日/作業名/工程数
1/aaa/
2/ccc/
3/bbb/
 
行程マスタのシートは
作業名/工程数/受注前/製造前/販売前
aaa/5/営業/受注/受注
bbb/7/受注/営業/製造
ccc/4/営業/受注/製造
ddd/6/受注/営業/受注

回答
投稿日時: 18/03/15 23:11:09
投稿者: WinArrow
投稿者のウェブサイトに移動

>前工程の工程数をマイナスしないといけません。
 
このあたりの説明が不足していませんか?
>前工程
が、どこなのか?分かりません。
具体例で説明できますか?

投稿日時: 18/03/16 09:26:57
投稿者: yuyuyumon

コメントありがとうございます
説明不足申し訳ございません
前工程とは、たとえば受注の前工程は基本、営業になります。前工程が無い場合は受注になります。製造の前工程は基本、受注になりますが、営業の場合と、前工程がなく製造の場合もあります。営業は前工程がありません。
前工程をマイナス説明に関しましては、上記説明の前工程がある場合、前工程シートの同日の工程数セルに工程数マスタのマイナスにした工程数を入れる処理です。
たとえば、受注シートの処理の場合、1日のaaaは前工程が営業ですので、営業シートの1日の工程数に-5をいれるイメージです。
よろしくお願いいたします。

回答
投稿日時: 18/03/16 10:03:37
投稿者: WinArrow
投稿者のウェブサイトに移動

よくわかりません。
 

引用:
たとえば、受注シートの処理の場合、1日のaaaは前工程が営業ですので、営業シートの1日の工程数に-5をいれるイメージです。

>受注シートの処理の場合、
とは、アクティブシートが「受注」と考えてよいのですか?
 
工程マスタのほうは
>aaa/5/営業/受注/受注
なっていますよね?
「受注」が、2ヵ所にありますようね?
1番目の工程が「営業」、2番目の工程が「受注」ですから、
先頭から検索すると2番目の工程が取得されます。
従って、前工程は「営業」と判断されます。
 
ところが、
>ddd/6/受注/営業/受注
は、1番目の「受注」しか取得できません。
どのような場合、3番目の「受注」を取得するのですか?
 
手順としては
(1)自シート(ActiveSheet)の「作業名」で工程マスタのA列検索
(2)自シート(ActiveSheet)名で、工程マスタの工程テーブルを検索
(3)取得した工程名が2番目以降の時は、1つ前の工程名のシートの工程数に工程マスタの工程数―1をセット
(4)取得した工程名が1番目の工程の場合・・・・・この部分の説明は?

投稿日時: 18/03/16 12:37:12
投稿者: yuyuyumon

説明が下手で申し訳無いです。
受注シート、製造シート、販売シート全て同様の処理を行いたいです。
その為工程マスタは受注シートを処理する場合は、受注前の列が前工程になり、製造シートを処理する場合は製造前の列が前工程になります、販売シートを処理する場合は、販売前の列が前工程になります。営業シートを処理する場合は前工程は営業しかありませんので、列は作成していません。
営業シートの処理は工程マスタの工程数を取得する処理だけ必要で、前工程の処理は必要ありません。
この説明で大丈夫でしょうか?

回答
投稿日時: 18/03/16 14:47:11
投稿者: Suzu

やりたい事はなんとなく判るのですが、
なぜそのテーブルの持ち方なのでしょう。
  

引用:
工程名    今工程    今工程数    
aaa    販売    5    
aaa    受注    4    
aaa    製造    3    
aaa    受注    2    
aaa    営業    1    
bbb    販売    7    
bbb    製造    6    
bbb    営業    5    

  
こんな持ち方の方がすっきりしませんか?
  
人が見易いからと言う理由なら、バックグランドで元のテーブルから提示した形のテーブルを生成し、
そのテーブルを検索した方が良いと思いますよ。
 
業務なのでしょうから、引継も発生するでしょう。
複雑にならざるを得ない物もありますが、今回のがそれに当たるか考えると違う気がします。
 
簡素化した方が良いと思いますよ。

回答
投稿日時: 18/03/16 17:25:41
投稿者: mattuwan44

>営業、受注、製造、販売のシートは
えっと、結果を返すシートは4っつあるんですよね?
4っつあるなら、纏めずに4っつちゃんと説明しましょう。
 
元となるデータ
 ↓
数式またはマクロで求めて
 ↓
処理した結果
 
つまり、ビフォー・アフターを提示してみてはいかがでしょうか?

投稿日時: 18/03/16 19:43:51
投稿者: yuyuyumon

コメントありがとうございます
工程マスタは工程数を取得するのと、前工程のシートから工程数をマイナスできればマスタの形は決まっていませんが前工程を判断し易いと思いこの形にしました。
マクロ作成で、他の形が良いのであればその形を使わせてていただきます
よろしくお願いします

回答
投稿日時: 18/03/16 19:58:42
投稿者: WinArrow
投稿者のウェブサイトに移動

掲示の工程マスタを解読すると
↓のようになるが、解読が間違っているのかな?
◆の前後は、つまり「営業」の前が分からない
 
aaa/5/ 営業-受注-製造-受注-販売
bbb/7/ 受注-受注◆営業-製造-販売
ccc/4/ 営業-受注-製造-販売
ddd/6/ 受注-受注◆営業-製造-受注-販売
 
疑問1
「受注」の前が「受注」とはどのようなことか??
「受注」が2ヵ〜3ヶ所所に出てくるけど、これはどのように考えるのか?
 
疑問2
シートが4種類なのに、なぜ工程数が、バラバラなんですか?

投稿日時: 18/03/17 01:29:50
投稿者: yuyuyumon

WinArrow さんの引用:
掲示の工程マスタを解読すると
↓のようになるが、解読が間違っているのかな?
◆の前後は、つまり「営業」の前が分からない
 
aaa/5/ 営業-受注-製造-受注-販売
bbb/7/ 受注-受注◆営業-製造-販売
ccc/4/ 営業-受注-製造-販売
ddd/6/ 受注-受注◆営業-製造-受注-販売
 
疑問1
「受注」の前が「受注」とはどのようなことか??
「受注」が2ヵ〜3ヶ所所に出てくるけど、これはどのように考えるのか?
 
疑問2
シートが4種類なのに、なぜ工程数が、バラバラなんですか?

 
コメントありがとうございます。
私の説明が悪いので混乱を招き申し訳ございません。
処理パターンは以下の6パターンです。
通・・・通常処理(行程マスタより作業名で検索し、工程数を取得しそのまま代入)
前・・・前工程処理(行程マスタより作業名で検索し、前工程のシートに行程数を取得しマイナスで代入)
@【営業】→【受注】→【製造】→【販売】
1.【営業】通→【受注】通→【営業】前→【製造】通→【受注】前→【販売】通→【製造】前
2.【営業】通→【受注】通→【製造】通→【販売】通→【受注】前→【製造】前→【販売】前
受注の時に営業、製造の時に受注、販売の時に製造が前工程処理が必要
 
A【営業】→【製造】→【販売】
1.【営業】通→【製造】通→【営業】前→【販売】通→【製造】前
2.【営業】通→【製造】通→【販売】通→【営業】前→【製造】前
製造の時に営業、販売の時に製造が前工程処理が必要
 
B【営業】→【受注】→【販売】
C【受注】→【製造】→【販売】
D【受注】→【販売】
E【製造】→【販売】
 
作業名・・・【aaa】【bbb】【ccc】【ddd】・・・
工程数は作業数に紐づきます。【aaa】の作業は5行程【bbb】は7工程
名前がややこしいですが、工程数と行程名は関係ありません。工程数=作業数と思ってください。
 
この説明でおわかりいただけますか?よろしくお願いいたします。

回答
投稿日時: 18/03/17 08:56:26
投稿者: WinArrow
投稿者のウェブサイトに移動

>この説明でおわかりいただけますか?
 
もう少し、
 
「営業」通、「営業」前のように2種類の工程があるものについてに
シートは、1つしかありませんが、それでよいのですか?
どちらの工程数(マイナス)が入るのでしょうか?
 
更に、処理のトリガーがいまいちわかりません。
設営からすると
「営業」「受注」〜〜のシートを読んで、
工程マスタから、工程数を探すことに感じられますが、
つまり、「営業」シートを例にすると、
工程マスタに「営業」が2ヵ所存在しても、最初の「営業」しか検索できないのではないでしょうか?
 
「営業」シートではなく、「営業通」シートにする必要はないのでしょうか?
 

回答
投稿日時: 18/03/17 10:03:53
投稿者: WinArrow
投稿者のウェブサイトに移動

質問そのものは、別にして
今回の質問の背景がよくわかりません。
「工程の進捗を把握する」ということなのかな?
何をしようとしているか?
が分かれば、違ったアドバイスもあろうかと思います。
 
 
 

回答
投稿日時: 18/03/17 11:24:36
投稿者: simple

よく読んでいなくて恐縮ですが、これは初めて作成する帳票類なんですか?
簡単なケース(3〜4例程度)を示すことができますか?
現実どおりの数値例でなくてかまいませんが、
各データの対応関係(工程の数値等)は論理的に正確な物を提示してください。
それが質問の第一歩です。
 
ちなみに、
aaa/5/営業/受注/受注 という書き方ではなく、

   A列  B   C    D     E
1  aaa    5     営業  受注  受注
といった行番号、列番号がわかるようなものにしてください。
まさか、ひとつのセルに、aaa/5/営業/受注/受注と入っているわけではないんでしょ?

投稿日時: 18/03/17 13:49:41
投稿者: yuyuyumon

WinArrow さんの引用:
>この説明でおわかりいただけますか?
 
もう少し、
 
「営業」通、「営業」前のように2種類の工程があるものについてに
シートは、1つしかありませんが、それでよいのですか?
どちらの工程数(マイナス)が入るのでしょうか?
 
更に、処理のトリガーがいまいちわかりません。
設営からすると
「営業」「受注」〜〜のシートを読んで、
工程マスタから、工程数を探すことに感じられますが、
つまり、「営業」シートを例にすると、
工程マスタに「営業」が2ヵ所存在しても、最初の「営業」しか検索できないのではないでしょうか?
 
「営業」シートではなく、「営業通」シートにする必要はないのでしょうか?
 

 
説明の為、縦長くなり申し訳ないです。すみません。
 
シートは【営業】【受注】【製造】【販売】【行程マスタ】があります。
【営業】【受注】【製造】【販売】のシートは1カ月単位のカレンダーみたいな形です。
aaa・bbb・cccといった作業によって【営業】【受注】【製造】【販売】の工程が違うので、前工程処理するシートを変更したいのが希望です。
たとえば、aaaの作業が【営業】【受注】【製造】【販売】のシートに入っていたら
 
【営業】【受注】【製造】【販売】のシートを通常処理して
【営業】【受注】【製造】のシートを前工程処理します。
 
aaaが【営業】→【受注】→【製造】→【販売】と進んでいくので、【受注】で発生した日の工程数
を前工程の【営業】は終わっているので、工程数を消します。その後【製造】に行くので、【製造】で発生した日にまた工程数を足して、前の【受注】の工程数を消します。最終的には販売に工程数が行きます。
※月をまたぐ場合があるので、マスタに前工程の場所を明記しています。必ずしも前工程が1つ左のシートとは限らないからです。
 
受注の通常処理内容は、
1.受注の作業名と行程マスタの作業名を検索
2.一致した工程マスタの作業名から工程数を受注の作業名の工程数に代入
前工程処理は、
3.工程マスタの受注前セルが営業の場合、営業シートにいく
4.作業名と同じセル位置に工程数をマイナスして代入して除算もしくは右隣のセルに代入
 
以下が処理イメージになります。
【営業】【受注】シートの通常処理
【営業】シートの前工程処理
 
 
【行程マスタ】
作業名 / 工程数 / 受注前 / 製造前 / 販売前
aaa / 5 / 営業 / 受注 / 製造
bbb / 6 / 営業 / 受注 / 製造
ccc / 7 / 営業 / 受注 / 製造
@@@ / 3 / / 受注 / 製造
jjj / 4 / / 受注 / 製造
vvv / 8 / 営業 / / 受注
yyy / 9 / 営業 / / 受注
 
【営業】通常処理
(日) / 作業名 / 行程数
1 / aaa /
2 / bbb /
3 / ccc /
4 / vvv /
5 / yyy /
6
7
     ↓
(日) / 作業名 / 行程数
1 / aaa / 5
2 / bbb / 6
3 / ccc / 7
4 / vvv / 8
5 / yyy / 9
6
7
-----------------------------
【受注】通常処理
(日) / 作業名 / 行程数
1 / @@@ /
2 / jjj /
3
4
5 / aaa /
6 / bbb /
7 / ccc /
     ↓
(日) / 作業名 / 行程数
1 / @@@ / 3
2 / jjj / 4
3
4
5 / aaa / 5
6 / bbb / 6
7 / ccc / 7
-----------------------------
【営業】前工程処理
(日) / 作業名 / 行程数
1 / aaa / 5
2 / bbb / 6
3 / ccc / 7
4 / vvv / 8
5 / yyy / 9
6
7
     ↓
(日) / 作業名 / 行程数
1 / aaa / 5
2 / bbb / 6
3 / ccc / 7
4 / vvv / 8
5 / yyy / 9 -5
6 / / -6
7 / / -7
 
-----------------------------
パターン
@【営業】→【受注】→【製造】→【販売】
A【営業】→【製造】→【販売】
B【営業】→【受注】→【販売】
C【受注】→【製造】→【販売】
D【受注】→【販売】
E【製造】→【販売】
F【営業】→【販売】

回答
投稿日時: 18/03/17 13:53:23
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:

通・・・通常処理(行程マスタより作業名で検索し、工程数を取得しそのまま代入)
前・・・前工程処理(行程マスタより作業名で検索し、前工程のシートに行程数を取得しマイナスで代入)

 
また、意味不明な言葉が出てきましたね・・・・
 
通常処理とは、何ですか?
前工程処理とは何ですか?
 
>工程マスタより作業名で検索
とありますが、このプログラムを動かすときに
今回は、「通常処理」「前工程処理」どちらかを指定して起動すると考えるのかしら?
 
>受注の時に営業、製造の時に受注、販売の時に製造が前工程処理が必要
この意味も理解不能です。
 
>工程数をマイナス
どこから、いくつ、マイナスするの?

回答
投稿日時: 18/03/17 14:58:31
投稿者: simple

なかなか難解ですね。
最初に確認しますけど、これは実際に開始されている作業なんですか?
現在はどうやっているんですか?
既になにかのアプリケーションは動作しているんだけど、
自分でもExcelで実現してみたいとかそういうことなんでしょうか?
 
最初に、前提となることを説明してください。

引用:
作業名 / 工程数 / 受注前 / 製造前 / 販売前
aaa / 5 / 営業 / 受注 / 製造

この意味がまずわかりません。
 
普通のイメージだと、何かの製品があって、
それをいくつかの工程に沿って、営業から販売まで作業が発生しますよね。
 
aaaとは何ですか? 製品なんですか?それとも作業ですか?
aaaが作業だとすると、それは何の作業なんですか?
営業にかかる作業?受注にかかる作業?
「/ 営業 / 受注 / 製造」という情報はどういう解釈をするものですか?

投稿日時: 18/03/17 23:13:37
投稿者: yuyuyumon

WinArrow さんの引用:
引用:

通・・・通常処理(行程マスタより作業名で検索し、工程数を取得しそのまま代入)
前・・・前工程処理(行程マスタより作業名で検索し、前工程のシートに行程数を取得しマイナスで代入)

 
また、意味不明な言葉が出てきましたね・・・・
 
通常処理とは、何ですか?
前工程処理とは何ですか?
 
>工程マスタより作業名で検索
とありますが、このプログラムを動かすときに
今回は、「通常処理」「前工程処理」どちらかを指定して起動すると考えるのかしら?
 
>受注の時に営業、製造の時に受注、販売の時に製造が前工程処理が必要
この意味も理解不能です。
 
>工程数をマイナス
どこから、いくつ、マイナスするの?

 
通常処理と前工程処理は今回のこの質問でしたい事のために説明のため
記載しただけです。処理としては以下の内容です。
 
処理の目的は作業の工程数がどの日に工程数がどれだけあるかを知る為です。
【営業】【受注】【製造】【販売】の各シートには月の作業予定データが入っています。
 
工程数は営業→受注→製造→販売に移していくため工程数が移れば移った方を増やし、移る前を減らさないといけません。
作業名が営業→受注→製造→販売だけだとそこまで難しくはないと思うのですが、作業名によって営業→受注→販売と移っていく工程数や、受注→製造→販売といったものがあり処理が分岐します。
そのため、マスタを使い処理の道順を作ろうと考えています。
 
処理イメージは、
1.【営業】【受注】【製造】【販売】の各シート内の作業名の工程数を出したい
2.そのため、工程マスタの作業名とマッチングをして工程数を各シートの作業名の工程数に代入。
3.工程数は工程マスタの受注前・製造前・販売前の列に前工程のシート名がありそれがあれば、そのシート
の同じセル位置に工程数をマイナスして代入して除算もしくは右隣のセルに代入
 
>受注の時に営業、製造の時に受注、販売の時に製造が前工程処理が必要
この意味も理解不能です。
 
以下の内容です。
aaaの作業名が営業から受注に移った時、営業の工程数を減らします。受注から製造に移った時、受注の工程数を減らします。製造から販売に移った時、製造の工程数を減らします。
 
>工程数をマイナス
どこから、いくつ、マイナスするの?
作業名を行程マスタの作業名とマッチングをして工程数をもってきて、除算もしくはマイナスとして工程数を代入します。

投稿日時: 18/03/17 23:35:46
投稿者: yuyuyumon

simple さんの引用:
なかなか難解ですね。
最初に確認しますけど、これは実際に開始されている作業なんですか?
現在はどうやっているんですか?
既になにかのアプリケーションは動作しているんだけど、
自分でもExcelで実現してみたいとかそういうことなんでしょうか?
 
最初に、前提となることを説明してください。
引用:
作業名 / 工程数 / 受注前 / 製造前 / 販売前
aaa / 5 / 営業 / 受注 / 製造

この意味がまずわかりません。
 
普通のイメージだと、何かの製品があって、
それをいくつかの工程に沿って、営業から販売まで作業が発生しますよね。
 
aaaとは何ですか? 製品なんですか?それとも作業ですか?
aaaが作業だとすると、それは何の作業なんですか?
営業にかかる作業?受注にかかる作業?
「/ 営業 / 受注 / 製造」という情報はどういう解釈をするものですか?

 
現在は手動で計算しています。
EXCELしかないのでEXCEL以外の手段はありません。ACCESSとかがあれば楽かもしれませんが、
ないので無理してでもEXCELで作らないといけません。
手動計算は時間もかかるのと間違える可能性もあるのでマクロで処理を考えています。
 
作業名 / 工程数 / 受注前 / 製造前 / 販売前 ←タイトル
aaa / 5 / 営業 / 受注 / 製造        ←内容
 
aaaは製品です。製品名=作業名です。製品名を直接記載できないのでaaaにしています。
 
>「/ 営業 / 受注 / 製造」という情報はどういう解釈をするものですか?
作業名によって経由する工程と経由しない工程があるので、軽油する道順を示す内容になります。

回答
投稿日時: 18/03/17 23:53:47
投稿者: simple

>aaaは製品です。製品名=作業名です。製品名を直接記載できないのでaaaにしています。

いや仮の名前にすることは全く問題ないです。
それでは、aaaという製品に対して、複数の作業があるわけでしょ?
営業とか製造などにおいてです。
 
それぞれ同じ工程数なんですか?
aaa / 5 / 営業 / 受注 / 製造  なら、
営業も5,製造も 5なんですか?
その工程数5 はどの作業の工程数なんですか?
 
まずは、一つの製品に限定してよいので、
・関連するデータを過不足なく示した上で、
・途中プロセスと、
・最終結果
をすべて示して下さい。

投稿日時: 18/03/18 01:14:26
投稿者: yuyuyumon

simple さんの引用:
>aaaは製品です。製品名=作業名です。製品名を直接記載できないのでaaaにしています。

いや仮の名前にすることは全く問題ないです。
それでは、aaaという製品に対して、複数の作業があるわけでしょ?
営業とか製造などにおいてです。
 
それぞれ同じ工程数なんですか?
aaa / 5 / 営業 / 受注 / 製造  なら、
営業も5,製造も 5なんですか?
その工程数5 はどの作業の工程数なんですか?
 
まずは、一つの製品に限定してよいので、
・関連するデータを過不足なく示した上で、
・途中プロセスと、
・最終結果
をすべて示して下さい。

 
aaaの工程数は5です。それを次工程に渡します。渡すのでマイナスになります。-5を前工程に処理します。
工程数という名前ですが、営業行程、製造工程といったものではありません。
【営業】5→【受注】5→【営業】-5→【製造】5→【受注】-5→【販売】5→【製造】-5
 
極端な例ですが以下のイメージです。
 
<処理前>
【営業】 【受注】 【製造】 【販売】
1/aaa/ 1 1 1
2 2/aaa/ 2 2
3 3 3/aaa/ 3
4 4 4 4/aaa/
 
<工程マスタ>
aaa/5/営業/受注/製造
 
<処理後>
【営業】 【受注】 【営業】 【製造】 【受注】 【販売】 【製造】
1/aaa/5 1 1/aaa/5 1 1 1 1
2 → 2/aaa/5 → 2//-5 → 2 → 2aaa/5 → 2 → 2
3 3 3 3/aaa/5 3//-5 3 3aaa/5
4 4 4 4 4 4/aaa/5 4//-5
 
 
<解説>
処理前の【営業】の1日にaaaスタート
処理前の【受注】の2日にaaaスタート
処理前の【製造】の3日にaaaスタート
処理前の【販売】の4日にaaaスタート
上記データがシートに入っています。
 
1.処理後の【営業】の1日にaaaの工程数5を行程マスタより取得し代入
2.処理後の【受注】の2日にaaaの工程数5を行程マスタより取得し代入
3.処理後の【営業】の2日にaaaの工程数5を行程マスタより取得し、行程マスタのセルの値より営業シートのセルにマイナス処理し代入
4.処理後の【製造】の3日にaaaの工程数5を行程マスタより取得し代入
5.処理後の【受注】の3日にaaaの工程数5を行程マスタより取得し、行程マスタのセルの値より受注シートのセルにマイナス処理し代入
6.処理後の【販売】の4日にaaaの工程数5を行程マスタより取得し代入
7.処理後の【製造】の4日にaaaの工程数5を行程マスタより取得し、行程マスタのセルの値より製造シートのセルにマイナス処理し代入

回答
投稿日時: 18/03/18 01:23:43
投稿者: simple

行番号、列番号をしっかりつけて説明してください。
あなたはPCの画面を見ているが、こちらからはPC画面が見えない。
見えない人にも、各セルに何が入っているのか、きちんと説明すべきですね。
処理後の記号の羅列が何を表すのかも併せて説明してください。

投稿日時: 18/03/18 01:29:09
投稿者: yuyuyumon

<処理前>
【営業】 【受注】 【製造】 【販売】
1/aaa/_______1______________________1______________________1
2____________2/aaa/_________________2______________________2
3____________3______________________3/aaa/_________________3
4____________4______________________4______________________4/aaa/
 
<工程マスタ>
aaa/5/営業/受注/製造
 
<処理後>
【営業】_____【受注】____【営業】___【製造】___【受注】____【販売】___【製造】
1/aaa/5______1____________1/aaa/5____1__________1___________1__________1
2________→__2/aaa/5___→_2//-5___→_2_______→_2aaa/5___→_2_______→_2
3____________3____________3__________3/aaa/5____3//-5_______3__________3aaa/5
4____________4____________4__________4__________4___________4/aaa/5____4//-5

回答
投稿日時: 18/03/18 09:09:37
投稿者: WinArrow
投稿者のウェブサイトに移動

yuyuyumon さんへ
 
説明が追加されるに伴い、難解度が増します。
 
これで、脱会します。

回答
投稿日時: 18/03/18 09:48:51
投稿者: eden

まったく理解できていないのですが
 
行程シート
sss/7/営業/受注/製造
 
作業sssの受注シートの場合、行程シートのsssを検索し、
sssの行を3列目から右に「受注」を検索し、
その左の3列目の営業が前工程のシート名。
但し受注が3列目にあった場合は前工程なし。
これで前工程のシートがわかるので、
営業シートのsssの工程数を取得できます。
 
こういうことですか?
 
aaa/5/営業/受注/受注
というのはあくまでイメージで、実際にはないという解釈。

回答
投稿日時: 18/03/18 10:35:42
投稿者: simple

>処理の目的は作業の工程数がどの日に工程数がどれだけあるかを知る為です。
 
追加の確認。
Q1. マイナス処理は何故必要なのか。マイナス情報を使って何を行うのか。
 
Q2. 各作業は必ず1日で終わるのか。
    日がまたがるときに、工程数を分割して計上しないのか。
 
Q3. 各シートの配置は?
    列は作業ごとにあるのか。同一列に、プラス情報とマイナス情報が書かれるのか。
 
Q4. マイナス処理のときに、作業名を記載しない説明になっているが、
    どの作業のマイナスかは、どう判定するのか。
  (同一列だから不要というなら、そうした説明が必要)
 
# 実は、「どの工程でも同じ工程数」というのがしっくりきていない。
# 何を単位に、販売も受注も製造も同じというのか。
# 「これは譬え話であって、実際は別のことです」というなら解る気がするが。

回答
投稿日時: 18/03/18 10:40:24
投稿者: simple

追記。
Q5.
/aaa/5
というのは本当に一つのセルにそう書くのか。
説明の便宜上ということですか?
日にちの工程数合計するときに、また手間がかかるのではないか。

回答
投稿日時: 18/03/18 14:41:58
投稿者: mattuwan44

>処理の目的は作業の工程数がどの日に工程数がどれだけあるかを知る為です。
 
とりあえず、表の中に基準となる日がないのにどの日に?ってわかるのかなぁ。。
 
それから、予定は未定と同意なので、そもそも
何日過ぎたからといって機械的に引き算されるものではないと思います。
 
なので、時々フォローアップをして今日時点の今後の見込みをいちいち入力しないとおかしいです。
そして、結果が4つもあるのはおかしいと思います。
(各担当がいつ順番が来るかの見込みが、各各欲しいのかなぁ。。。。)
まぁ、この辺は業務を理解してない人に説明するのは難しいのかも知れません。
 
まずは手動で仕様を見つめなおすところから始めてみてはいかがでしょう?
その中で日々運用し、改善し、そのうえで自動化できる部分を検討してみてはいかがでしょうか?
 
そして、
業務でほんとに必要なソフトなら、
本業の片手間でやるようなことではないでしょう。
費用を出してプロに頼んだほうが良いように思います。
 
ここで、文字だけでやりたいことを説明できないなら、
それをプログラムすることは不可能です。
プログラムとは文字だけでコンピューターに作業の指示をだす指示書です。
 
あ、自分で解決するなら、関数だと少し簡単かもですね。
 
参照する表が変わるなら、名前の定義をしておいて、
その名前をINDIRECT関数で参照すると切り替えられると思います。
 
https://dekiru.net/article/4476/

投稿日時: 18/03/18 17:36:05
投稿者: yuyuyumon

eden さんの引用:
まったく理解できていないのですが
 
行程シート
sss/7/営業/受注/製造
 
作業sssの受注シートの場合、行程シートのsssを検索し、
sssの行を3列目から右に「受注」を検索し、
その左の3列目の営業が前工程のシート名。
但し受注が3列目にあった場合は前工程なし。
これで前工程のシートがわかるので、
営業シートのsssの工程数を取得できます。
 
こういうことですか?
 
aaa/5/営業/受注/受注
というのはあくまでイメージで、実際にはないという解釈。

 
作業sssの受注シートの場合、行程シートのsssを検索し、
左から2列目の7を取得して受注シートの作業sssの工程数に代入
工程シートの情報から受注の前工程は左から3列目の営業になるので、
営業シートに移動して-7を受注シートのsssと同じ行の工程数に代入します。
工程数を次工程に移すため、最初の工程以外、前工程はすべてあります。
 
>aaa/5/営業/受注/受注
これはイメージです。同じ工程を2回しないので同じ工程が2個は起こりません。

投稿日時: 18/03/18 17:36:39
投稿者: yuyuyumon

eden さんの引用:
まったく理解できていないのですが
 
行程シート
sss/7/営業/受注/製造
 
作業sssの受注シートの場合、行程シートのsssを検索し、
sssの行を3列目から右に「受注」を検索し、
その左の3列目の営業が前工程のシート名。
但し受注が3列目にあった場合は前工程なし。
これで前工程のシートがわかるので、
営業シートのsssの工程数を取得できます。
 
こういうことですか?
 
aaa/5/営業/受注/受注
というのはあくまでイメージで、実際にはないという解釈。

投稿日時: 18/03/18 18:10:58
投稿者: yuyuyumon

 
>Q1. マイナス処理は何故必要なのか。マイナス情報を使って何を行うのか。
工程が移動するため次の工程に渡す=次工程の人にはプラス、前工程の人からしたらマイナスになります。
 
>Q2. 各作業は必ず1日で終わるのか。
    日がまたがるときに、工程数を分割して計上しないのか。
必ず1日で終わるわけではありませんが、このスレッドで質問以外の内容になるので記載していません。工程数という名前の伝票を次工程に渡すイメージです。工程数5だから5日かかるとかではありません。
 
>Q3. 各シートの配置は?
    列は作業ごとにあるのか。同一列に、プラス情報とマイナス情報が書かれるのか。
シートの配置は【営業】【受注】【製造】【販売】【行程マスタ】です。プラスもマイナスもないです。
 
Q4. マイナス処理のときに、作業名を記載しない説明になっているが、
    どの作業のマイナスかは、どう判定するのか。
どの作業がマイナスかを知りたいわけではないので大丈夫です。知りたいのは何日に工程数がどれだけあるかです。
 
工程数という名前ですが、伝票をイメージしてください。工程数7だとしたら工程数7の伝票を次の工程に渡していると考えていただければ大丈夫です。作業が7日とかの意味ではございません。

回答
投稿日時: 18/03/18 20:15:41
投稿者: eden

同様に ↓ ですか?
営業シートの場合、行程シートのsssを検索し、
左から2列目の7を取得して営業シートの作業sssの工程数に代入

引用:
作業sssの受注シートの場合、行程シートのsssを検索し、
左から2列目の7を取得して受注シートの作業sssの工程数に代入
工程シートの情報から受注の前工程は左から3列目の営業になるので、
営業シートに移動して-7を受注シートのsssと同じ行の工程数に代入します。

(なぜ-7になるのかわからないので↓では同じ工程数のマイナスにしています)
さらに製造シートの場合、行程シートのsssを検索し、
左から2列目の7を取得して製造シートの作業sssの工程数に代入
工程シートの情報から製造の前工程は左から4列目の受注になるので、
受注シートに移動して-7を製造シートのsssと同じ行の工程数に代入します。
 
まとめると作業sssの工程数は
営業シート
sss 7
  -7 ←受注シートの7のある行と同じ行
 
受注シート
sss 7
  -7 ←製造シートの7のある行と同じ行
 
製造シート
sss 7
となります。
作業名は各シートに事前に入力済だと思っています。
 
数式やマクロの回答は他の方にお任せします。
私は交通整理のお手伝いです。

投稿日時: 18/03/18 21:03:44
投稿者: yuyuyumon

edenさまのお考え通りです。
その通りの事をおこないたいのです。
application.vlookupで行程マスタから工程数をもってくることはできそうなのですが、その後の処理が私の知識ではおもいつかなかったのでなんとかお願いしたいです。よろしくお願いします。

回答
投稿日時: 18/03/19 07:06:13
投稿者: 半平太

私には、4つもシートが要らない様な気がするんですがねぇ。
 
「工程管理簿」シートが1枚が有ればいいんじゃないですか。
 
<工程管理簿>

 行 __A__ ___B___ ___C___ __D__ __E__ __F__ __G__ _H_ ___I___
  1 (日)  作業名  行程数  営業  受注  製造  販売      該当行 
  2    1  aaa        5                   5              2 
  3    2  bbb        6             6                    3 
  4    3  ccc        7       7                          4 
  5    4  vvv        8                 ■     8        7 
  6    5  yyy        9       9         ■              8 
  7    6  aaa        5       5                          2 
  8    7  @@@        3     ■     3                    5 
  9    8  aaa        5                   5              2 
 10    9                                                 

1.作業名を入力すると、工程マスタを見に行かせて、
  工程数(C列)とマスタ該当行(I列)を自動的に表示させる。
 
  工程がないところは、条件付き書式で、黒で塗りつぶさせる(上図は■で代用)。
 
2.新段階のセル、例えば、1日のaaaが、受注から製造になったら、
  製造のセル(F2)を右クリックすると、そこに5が入り、
  受注セル(E2)がクリアされる。(そこは今まで5があった)
 
3.工程マスタには「前○○」なんてものは必要なく、
  実際にある工程にフラグ(下図では1)を立てて置くだけ。
 
<工程マスタ>
 行  ___A___  ___B___  __C__  __D__  __E__  __F__
  1  作業名   工程数   営業   受注   製造   販売 
  2  aaa         5      1      1      1      1 
  3  bbb         6      1      1      1      1 
  4  ccc         7      1      1      1      1 
  5  @@@         3             1      1      1 
  6  jjj         4             1      1      1 
  7  vvv         8      1      1             1 
  8  yyy         9      1      1             1 

投稿日時: 18/03/19 12:22:20
投稿者: yuyuyumon

半平太さま
シートはもともと毎月の予定表として使用しているものなのでそのシートを使うのが前提となります。
もちろんマクロ等の処理で1つのシートにまとめる事ができればもちろん良いです。

回答
投稿日時: 18/03/19 16:31:40
投稿者: 半平太

>そのシートを使うのが前提となります。
 
そうだったんですか・・
 
暇はいくらでもあるんですが、合理性に納得がいかないものに
費やす気は起きないので、私は降ります。 m(__)m

回答
投稿日時: 18/03/19 23:04:26
投稿者: simple

回答拝見しました。
 
「工程数」という用語を普通と全く違う意味で使っておきながら、
こちらの質問に大分いらだっているようですが、
説明が足りないのだから、説明するのが当たり前です。
 
Q3で各シート内のレイアウトの説明も求めましたが、
>プラスもマイナスもないです。
との逆ギレで、説明もなかった。
 
行番号、列番号をきちんと示してくださいとか、
Q5で求めたことも無視されています。
 
これでは、誰もコードは示せないんじゃないかな?
 
それに、コードを提供しても、追加依頼が続々と出てきそうです。
複数の作業が同時並行で入ってきたときに、配置も難しくなりそうです。
 
こちらから説明をお願いしてまで協力する積もりもありません。
ここまでとします。

投稿日時: 18/03/20 08:57:49
投稿者: yuyuyumon

simple さんの引用:
回答拝見しました。
 
「工程数」という用語を普通と全く違う意味で使っておきながら、
こちらの質問に大分いらだっているようですが、
説明が足りないのだから、説明するのが当たり前です。
 
Q3で各シート内のレイアウトの説明も求めましたが、
>プラスもマイナスもないです。
との逆ギレで、説明もなかった。
 
行番号、列番号をきちんと示してくださいとか、
Q5で求めたことも無視されています。
 
これでは、誰もコードは示せないんじゃないかな?
 
それに、コードを提供しても、追加依頼が続々と出てきそうです。
複数の作業が同時並行で入ってきたときに、配置も難しくなりそうです。
 
こちらから説明をお願いしてまで協力する積もりもありません。
ここまでとします。

下手な文書で質問を理解しようとしていただいている皆様には感謝の気持ちしかありません。
各シートのレイアウトは質問のマスタそのままです。プラスもマイナスもないのでないですとお答えしました。列番号、行番号も見たままです。
丸投げしたいわけではございません。私の知識不足の検索関数、findとvlookupで出来るのかどうか?の回答か他の案だけでも良かったのですが、コードをいただけるような神対応まで考えていただいていたとは本当に感謝しています。

回答
投稿日時: 18/03/20 10:25:56
投稿者: eden

引用:
【営業】_____【受注】____【営業】___【製造】___【受注】____【販売】___【製造】
1/aaa/5______1____________1/aaa/5____1__________1___________1__________1
2________→__2/aaa/5___→_2//-5___→_2_______→_2aaa/5___→_2_______→_2

それでは受注シートのaaaはどのセルに入力されているのですか。
列番号、行番号とはどれですか。1、2は日ですよね。
半平太さんが提示された表では「工程管理簿」シートのB7セルにaaaが入力されているのが
分かります。
上端に列番号、左端に行番号があるからです。
 
前工程が営業の作業dddが製造シートにあり、
製造シート
10/ddd/5

前工程が営業の作業eeeが受注シートにあった場合
受注シート
10/eee/6

営業シートはどうなるのですか。
営業シート
10//?

どのセルに何が入るのか分からないと出来ません。

投稿日時: 18/03/20 12:38:55
投稿者: yuyuyumon

eden さんの引用:
引用:
【営業】_____【受注】____【営業】___【製造】___【受注】____【販売】___【製造】
1/aaa/5______1____________1/aaa/5____1__________1___________1__________1
2________→__2/aaa/5___→_2//-5___→_2_______→_2aaa/5___→_2_______→_2

それでは受注シートのaaaはどのセルに入力されているのですか。
列番号、行番号とはどれですか。1、2は日ですよね。
半平太さんが提示された表では「工程管理簿」シートのB7セルにaaaが入力されているのが
分かります。
上端に列番号、左端に行番号があるからです。
 
前工程が営業の作業dddが製造シートにあり、
製造シート
10/ddd/5

前工程が営業の作業eeeが受注シートにあった場合
受注シート
10/eee/6

営業シートはどうなるのですか。
営業シート
10//?

どのセルに何が入るのか分からないと出来ません。

シートの構造は営業シート、受注シート、製造シート、販売シート全て同じです。
A列が日にち、B列が作業名(aaa・bbb・ccc等)、そしてC列に工程数を入れたいと考えています。
見にくいと思ったので、斜線でセルを区切ったつもりなのですが、それが混乱を招いてしまっているかもしれません。申し訳ないです。
前工程が営業の作業dddが製造シートにあり、
製造シート
10/ddd/5

前工程の営業シートのC列の工程数に、製造シートの10/ddd/5と同じ行番号に-5が入ります。
前工程が営業の作業eeeが受注シートにあった場合
受注シート
10/eee/6

前工程の営業シートのC列の工程数に、受注シートの10/eee/6と同じ行番号に-6が入ります。
前工程の同じ行番号のC列に入れます。前工程の同じ行番号が別の作業名だとしても大丈夫です。
 
 

回答
投稿日時: 18/03/20 13:05:01
投稿者: eden

それぞれの場合ではなく、同時に入力されている場合です。
営業シートの工程数は-5ですか-6ですか。どっちですか。
それとも両方ですか。

投稿日時: 18/03/20 16:38:04
投稿者: yuyuyumon

eden さんの引用:
それぞれの場合ではなく、同時に入力されている場合です。
営業シートの工程数は-5ですか-6ですか。どっちですか。
それとも両方ですか。

同じ行番号にあれば両方です。

回答
投稿日時: 18/03/20 18:08:30
投稿者: eden

では、通常処理が販売の工程数もあって3つ、さらに営業シートの通常処理の工程数と
あわせると最大4つになるわけですね。
で、それ(ら)はどんな風にセルに入るのですか。
また、1日、1行、1作業名ですね?
 
この件に限らず説明不足過ぎです。
 
1セルに入れるなら、営業シートの数式だと、シートを切り替えるのではなくて、
・営業シートの    通常処理から    工程数を検索する数式
・受注シートの同じ行の通常処理から前工程の工程数を検索する数式
・製造シートの同じ行の通常処理から前工程の工程数を検索する数式
・販売シートの同じ行の通常処理から前工程の工程数を検索する数式
を繋げたものになるでしょう。
前工程用の数式は、営業シートが前工程の作業名かのチェックを含みます。

投稿日時: 18/03/20 20:11:53
投稿者: yuyuyumon

eden さんの引用:
では、通常処理が販売の工程数もあって3つ、さらに営業シートの通常処理の工程数と
あわせると最大4つになるわけですね。
で、それ(ら)はどんな風にセルに入るのですか。
また、1日、1行、1作業名ですね?
 
この件に限らず説明不足過ぎです。
 
1セルに入れるなら、営業シートの数式だと、シートを切り替えるのではなくて、
・営業シートの    通常処理から    工程数を検索する数式
・受注シートの同じ行の通常処理から前工程の工程数を検索する数式
・製造シートの同じ行の通常処理から前工程の工程数を検索する数式
・販売シートの同じ行の通常処理から前工程の工程数を検索する数式
を繋げたものになるでしょう。
前工程用の数式は、営業シートが前工程の作業名かのチェックを含みます。

 
セルは合計です。最初の通常処理から前工程を引く形です。
前工程の工程数を検索する数式をどうすれば良いのかがわかりません。
単純に検索するだけならvlookupで行程マスタのB列の工程数を取得するだけで良いのですが、
C列の前工程とシート名と照合の数式がわかりません。
vlookupかfindでのセルの位置を変数に入れてシート名と照合する事ができるのかの部分がわかりません。

回答
投稿日時: 18/03/20 22:17:35
投稿者: eden

数式、数式言っていましたが、複雑すぎて私には数式は作れません。
わたしが処理するなら、マクロで行います。
行程マスタを元にして、各処理のシートを作業名で検索し通常処理の工程数を代入
2番目以降の処理はその行番号を覚えておき、前工程のシートにマイナスの工程数を代入
すでに工程数が代入されていた場合は合計する
行程マスタの終わりまで繰り返す

投稿日時: 18/03/21 00:42:55
投稿者: yuyuyumon

eden さんの引用:
数式、数式言っていましたが、複雑すぎて私には数式は作れません。
わたしが処理するなら、マクロで行います。
行程マスタを元にして、各処理のシートを作業名で検索し通常処理の工程数を代入
2番目以降の処理はその行番号を覚えておき、前工程のシートにマイナスの工程数を代入
すでに工程数が代入されていた場合は合計する
行程マスタの終わりまで繰り返す

すいません、数式とマクロの違い全くわかりません。私も少しのマクロしかわかりません。マクロで出来るのでしょうか、その処理がマクロで出来る方法があるのであれば何卒ご教授お願いしたいです。

回答
投稿日時: 18/03/21 06:20:23
投稿者: eden

こちらは
>Excel VBAに関するフォーラムです。
数式なら一般機能の方です。

投稿日時: 18/03/21 09:15:40
投稿者: yuyuyumon

eden さんの引用:
こちらは
>Excel VBAに関するフォーラムです。
数式なら一般機能の方です。

一般機能で作るのが困難なので、VBAで作ろうと思っています。
よろしくお願いします。

回答
投稿日時: 18/03/21 10:45:42
投稿者: んなっと

VBAコード作成依頼は気を付けてください。詳しくは最後に書きます。
 
一般機能の方法(教えてくん用)。
新しく「業務入力」シートを作成してまとめて入力していき、
そこから自動で「営業」「受注」「製造」「販売」シートに振り分けて反映させる方法です。
 
●工程マスタ 受注前が受注などというおかしな書き方はやめる。なければ空欄にしておく。
 
   A  B    C    D    E
1 作業 数 受注前 製造前 販売前
2  aaa  5  営業  受注  製造
3  bbb  7      営業  製造
4  ccc  4  営業  受注  製造
5  ddd  6  営業      受注
 
●業務入力 A:C列で下方向に順次追加入力していく。
 
    A   B   C    D  E       F       G
 1 日付 作業 工程 前工程 数              
 2  4/1  aaa 営業      5 営業|43191.0       
 3  4/3  bbb 営業      7 営業|43193.0       
 4  4/3  ccc 営業      4 営業|43193.1       
 5  4/3  ddd 営業      6 営業|43193.2       
 6  4/4  aaa 受注  営業  5 受注|43194.0 営業|43194.0
 7  4/4  ccc 受注  営業  4 受注|43194.1 営業|43194.1
 8  4/4  ddd 受注  営業  6 受注|43194.2 営業|43194.2
 9  4/6  aaa 製造  受注  5 製造|43196.0 受注|43196.0
10  4/8  aaa 販売  製造  5 販売|43198.0 製造|43198.0
11  4/9  bbb 製造  営業  7 製造|43199.0 営業|43199.0
12 4/11  bbb 販売  製造  7 販売|43201.0 製造|43201.0
 
D2
=IF(B2="","",IFERROR(VLOOKUP(B2,工程マスタ!A:E,MATCH(C2&"前",工程マスタ!$1:$1,0),FALSE),""))
下方向・↓
E2
=IF(B2="","",VLOOKUP(B2,工程マスタ!A:B,2,FALSE))
下方向・↓
F2
=IF(C2="","",C2&"|"&TEXT($A2+COUNTIF(F$1:F1,C2&"|"&$A2&".*")/10,"0.0"))
右方向G2まで・→下方向・↓
 
●営業
 
    A   B     C  D E  F          G
 1 営業                        
 2 日付 作業 終了作業 数              
 3 3/31               ←繰り越し分を入力
 4  4/1  aaa       5 2            
 5  4/2          5              
 6  4/3  bbb      12 3            
 7  4/3  ccc      16 4            
 8  4/3  ddd      22 5            
 9  4/4       aaa 17   6          
10  4/4       ccc 13   7          
11  4/4       ddd  7   8          
12  4/5          7              
13  4/6          7              
14  4/7          7              
15  4/8          7              
16  4/9       bbb  0   11          
17 4/10          0              
18 4/11          0              
 
 
A1
=TRIM(RIGHT(SUBSTITUTE(CELL("filename",A1),"]",REPT(" ",100)),100))
A4
=IF(COUNTIF(業務入力!$F:$G,"*|"&TEXT(A3+0.1,"0.0")),TEXT(A3+0.1,"0.0")*1,INT(A3)+1)
下方向・↓
B4
=IF(E4="","",INDEX(業務入力!$B:$B,E4))
右方向C4まで・→下方向・↓
D4
=SUM(D3,IFERROR(INDEX(業務入力!$E:$E,E4),),IFERROR(-INDEX(業務入力!$E:$E,F4),))
下方向・↓
E4
=IFERROR(MATCH($A$1&"|"&TEXT($A4,"0.0"),業務入力!F:F,0),"")
右方向F4まで・→下方向・↓
 
●営業シートをコピーして、名前を 受注 製造 販売 に変更
 
受注
    A   B     C  D E F          G
 1 受注                       
 2 日付 作業 終了作業 数             
 3 3/31          0    ←繰り越し分を入力
 4  4/1          0             
 5  4/2          0             
 6  4/3          0             
 7  4/3          0             
 8  4/3          0             
 9  4/4  aaa       5 6            
10  4/4  ccc       9 7            
11  4/4  ddd      15 8            
12  4/5         15             
13  4/6       aaa 10   9          
14  4/7         10             
15  4/8         10             
16  4/9         10             
17 4/10         10             
 
製造
 
    A   B     C  D  E  F          G
 1 製造                        
 2 日付 作業 終了作業 数              
 3 3/31          0     ←繰り越し分を入力
 4  4/1          0              
 5  4/2          0              
 6  4/3          0              
 7  4/3          0              
 8  4/3          0              
 9  4/4          0              
10  4/4          0              
11  4/4          0              
12  4/5          0              
13  4/6  aaa       5  9            
14  4/7          5              
15  4/8       aaa  0   10          
16  4/9  bbb       7 11            
17 4/10          7              
18 4/11       bbb  0   12          
 
販売
 
    A   B     C  D  E F          G
 1 販売                        
 2 日付 作業 終了作業 数              
 3 3/31          0     ←繰り越し分を入力
 4  4/1          0              
 5  4/2          0              
 6  4/3          0              
 7  4/3          0              
 8  4/3          0              
 9  4/4          0              
10  4/4          0              
11  4/4          0              
12  4/5          0              
13  4/6          0              
14  4/7          0              
15  4/8  aaa       5 10            
16  4/9          5              
17 4/10          5              
18 4/11  bbb      12 12            
 
こういうときのためのリンク
http://www.moug.net/faq/kiyaku.html#link4

引用:
禁止事項
コード制作依頼
「●●●を実行するようなマクロを作りたいのですが」「●●●をする方法を教えてください」といった、コード制作依頼ともとれるような質問はおやめください。

これはお願いではなくて禁止事項なので、「VBAコードを要求する側」は気を付けたほうがいいでしょう。
「回答する側」はおそらく気にしなくていいんですよね。
VBAコードを出してもいいし、文章があいまいな質問者には上のリンクを貼るか事務局にメールで通報。

投稿日時: 18/03/21 23:42:25
投稿者: yuyuyumon

んなっとさま
ありがとうございます。
 
ですが、半平太さまへのコメントでもしたように営業シート、受注シート、製造シート、販売シートを使うことが前提になります。工程マスタや他のシートに移す事は問題ございません。
以下のコードは1つのアクティブシートだけですが、工程マスタから工程数を取得できました。
営業シート、受注シート、製造シート、販売シートを動かすように変更はするつもりです。
 
しかし、この後の処理の前工程をマスタから参照してそのシートにマイナスとして代入するコードがvlookupか他の関数でできるかのヒントがほしいのです。もちろんコードを書いていただけるような神対応いただけるのであればありがたいのですが、そこがこのスレッドで私が質問した内容です。
Sub test()
    Dim k As Integer
    Dim v As Variant
    Dim tbl As Range
     
    Set tbl = Sheets("工程マスタ").Range("A2:E5")
    For k = 2 To 31
          v = Cells(k, 2).Value
                 
                If IsError(Application.VLookup(v, tbl, 2, False)) Then
                Cells(k, 3).Value = ""
                 
                flag = False
                  
                 Else
                  
                Cells(k, 3).Value _
                  = Application.VLookup(v, tbl, 2, False)
                  End If
      
    Next
   
    End Sub

回答
投稿日時: 18/03/22 02:16:10
投稿者: んなっと

ThisWorkbookに
 
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  Dim r As Range
  Dim Num As Long
  Dim mstSh As Worksheet
  Dim preSh As Worksheet
  Set r = Target.Item(1)
  Select Case Sh.Name
    Case "営業", "受注", "製造", "販売"
      If Intersect(r, Sh.Range("B:B")) Is Nothing Then Exit Sub
      Set mstSh = Worksheets("工程マスタ")
      On Error Resume Next
        Num = WorksheetFunction.VLookup(r.Value, mstSh.Range("A:B"), 2, False)
      On Error GoTo 0
      If Num = 0 Then Exit Sub
      With r.Offset(0, 1)
        .Value = .Value + Num
      End With
      On Error Resume Next
        Set preSh = Worksheets(WorksheetFunction.VLookup(r.Value, mstSh.Range("A:E"), _
                    WorksheetFunction.Match(Sh.Name & "前", mstSh.Rows(1), 0), False))
      On Error GoTo 0
      If preSh Is Nothing Then Exit Sub
      With preSh.Cells(r.Row, 3)
        .Value = .Value - Num
      End With
  End Select
End Sub

回答
投稿日時: 18/03/22 17:29:07
投稿者: んなっと

      If preSh Is Nothing Then Exit Sub
の下に、次の1行追加。
      If preSh.Name = Sh.Name Then Exit Sub

投稿日時: 18/03/22 23:39:12
投稿者: yuyuyumon

んなっとさま
 
誠にありがとうございます。神対応感謝します。
処理内容はまた調べ見せていただきます。本当に勉強になります。
言葉では言いあらわせないくらい感謝しています。
ありがとうございます。

回答
投稿日時: 18/03/23 06:58:37
投稿者: んなっと

場所は標準モジュールではなく、ThisWorkbookであることに注意。
SheetChangeイベントであることも。
 
Application.EnableEvents を忘れたので、再度。
 
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  Dim r As Range
  Dim Num As Long
  Dim mstSh As Worksheet
  Dim preSh As Worksheet
  Set r = Target.Item(1)
  Select Case Sh.Name
    Case "営業", "受注", "製造", "販売"
      If Intersect(r, Sh.Range("B:B")) Is Nothing Then Exit Sub
      Set mstSh = Worksheets("工程マスタ")
      On Error Resume Next
        Num = WorksheetFunction.VLookup(r.Value, mstSh.Range("A:B"), 2, False)
      On Error GoTo 0
      If Num = 0 Then Exit Sub
      Application.EnableEvents = False
      With r.Offset(0, 1)
        .Value = .Value + Num
      End With
      On Error Resume Next
        Set preSh = Worksheets(WorksheetFunction.VLookup(r.Value, mstSh.Range("A:E"), _
                    WorksheetFunction.Match(Sh.Name & "前", mstSh.Rows(1), 0), False))
      On Error GoTo 0
      If Not preSh Is Nothing Then
        If preSh.Name <> Sh.Name Then
          With preSh.Cells(r.Row, 3)
            .Value = .Value - Num
          End With
        End If
      End If
      Application.EnableEvents = True
  End Select
End Sub
 
ヒントをもらったのだから、さっさとスレッドを閉じてください。

投稿日時: 18/03/23 09:29:32
投稿者: yuyuyumon

んなっとさま
ありがとうございます。
 
解決しました。