電子書籍の厳選無料作品が豊富!

転記のVBAで現在作成しているコードに、さらに条件を追加させたいコードがあり、どう書けばいいか分かりませんのですみませんが、教えて下さい。
現在記入している内容、及びコードは下記の通りです。

《内容》
①転記先のA,E,F,H,I列初期化
②転記先の最終行を取得
③転記元と転記先の車種が一致していれば、車種数を確認
④転記先の車種が何処の行にあるか確認
⑤転記先に貼り付ける車種の種類で1行間隔をあける
⑥転記元から、転記先へ同じ車種の場所に製造NOを転記
※転記する場所は、転記元、転記先共に同じ項目で、転記先のE,F,H列になります。
※転記する転記元のC,D,F列で、C列は番号が若い者順になっており、必ず番号の若い物から転記します。

《VBAコード》
Sub 転記()
Dim 車種行 As Long
Dim 転記元車種行 As Long
Dim 転記元車種数 As Long
Dim 転記元 As Worksheet
Dim 転記先 As Worksheet

Application.ScreenUpdating = False
Set 転記元 = Sheets("在庫一覧")
Set 転記先 = Sheets("まとめ")

転記先.Select
転記先.Range(Cells(6, 1), Cells(9999, 1)).ClearContents
転記先.Range(Cells(6, 5), Cells(9999, 6)).ClearContents
転記先.Range(Cells(6, 8), Cells(9999, 9)).ClearContents

With 転記元

For 車種行 = 転記先.Cells(Rows.Count, 2).End(xlUp).Row To 6 Step -1
転記元車種数 = Application.CountIf(.Range("A:A"), 転記先.Cells(車種行, 2))
転記元車種行 = Application.Match(転記先.Cells(車種行, 2), .Range("A:A"), 0)
転記先.Rows(車種行 + 1 & ":" & 車種行 + 転記元車種数).Insert
転記先.Cells(車種行, 5).Resize(転記元車種数, 3) = 転記元.Cells(転記元車種行, 3).Resize(転記元車種数, 3).Value
転記先.Cells(車種行, 8).Resize(転記元車種数, 6) = 転記元.Cells(転記元車種行, 6).Resize(転記元車種数, 6).Value
Next

End With
Application.ScreenUpdating = True
End Sub

上記のコードは単に転記元から転記先に、車種が一致していれば、その車種があるだけ1行開けて、製造NOを転記しているだけになります。
このコードに下記の条件を入れるにはどういうコードを入れれば良いでしょうか?

≪教えていただきたい条件のVBAコード≫
転記後、まとめシートで、それぞれの車種において、D列=必要重量とF列=部品重量が同じ、かつF列=部品重量が±10%以内、かつH列=不良品が"不良"以外の物であれば、A列=状態に"○"を付ける。"○"以外は"他"と入力し、かつI列=結果に"なし"と入力する。これらの条件に合わない場合は、転記したE,F,H列のデータをD列=必要重量に合う様に、行間で入れ替える。
詳細は画像を参照ください。

すみませんが、宜しくお願い致します。

「VBA シート間の転記で、条件の追加コー」の質問画像

質問者からの補足コメント

  • 画像が見にくい状態でしたので、下記に再度添付します。
    よろしくお願いします。
    https://gyazo.com/ce22f43a942ab9decc5c7c9b83e01266

      補足日時:2023/02/26 10:35
  • お世話になります。
    現在テストしてますが、うまくいかず、、すみませんが、処理の内容を教えていただけないでしょうか?
    よろしくお願い致します

      補足日時:2023/02/27 15:27

A 回答 (13件中1~10件)

コメントを追加しました。

前のは破棄してこちらを使用してください。
https://ideone.com/25gcNS
処理の内容は変えていません。
(Private Sub tenki内に未使用の変数があったので削除しました。
wrow,wrow3を削除)
    • good
    • 0
この回答へのお礼

新しい物をいただき、ありがとうございました。

お礼日時:2023/02/27 19:44

>上手くいかないのは、上記で言うと2になります。


>作成いただいたコードを色々調べて、理解しながら、テスト実施したのですが、、 特に Call tenki(key, row2)はどのように転記処理を書けば良いでしょうか?
>またPrivateSub tenki(ByVal key As String, ByVal row2 As Long)が、
赤字になっております。ここは事前に何か設定が必要でしょうか?

回答:PrivateSub tenki(ByVal key As String, ByVal row2 As Long)が、
赤字になるのは、コンパイルエラーですね。
私が提示したhttps://ideone.com/UjNCijのマクロを
まるまるコピーして、新規の標準モジュールに貼り付けてください。
あなたの既存のマクロがある標準モジュールがModule1なら
Mudule2を追加して、そちらに貼り付けてください。
その際、マクロ名がPublic Sub 転記()になっているので、
あなたの作成したマクロ名と同じになってしまいます。
その場合は、どちらかのマクロ名をSub 転記2()にしてください。
(ここではMudule2の私の提示したマクロをSub 転記2()とすることにします。)

そうすると下記のような画像になるはずです。
https://gyazo.com/3de82e0660064bb22a733c57df4ae9b7

上記完了後、Sub 転記2()を実行してください。
それで、赤字になるエラーはとれるはずです。

>特に Call tenki(key, row2)はどのように転記処理を書けば良いでしょうか?
回答:なにもマクロを修正する必要はありません。
現状のままでOKです。

>あとrcnt = dicEN(key) - dicST(key) + 1 srow1 = dicST(key)はどんな意味を持つのでしょうか?
回答:
コメントをいれてなくてすみません。rcntはkeyで示される車種の行数です。
rcnt = dicEN(key) - dicST(key) + 1
dicST(key)は、keyに対応する在庫一覧シートの最初の行番号です。
dicEN(key)は、keyに対応する在庫一覧シートの最後の行番号です。
あなたの図では、タントは5行から8行なので、
keyが"タント"なら、dictST(key)=5,dicEN(key)=8となります。
よってrcnt=8-5+1=4となります。タントの行数は4行になります。
'車種を取り込む のコメント以降で、dictST(key)とdictEN(key)の値を
全車種分求めています。

srow1 = dicST(key)
在庫一覧シートのkeyの車種の開始行を求めています。
key="タント"の場合は、dicST(key)の値は5なのでsrow1は5になります。
    • good
    • 0
この回答へのお礼

ご連絡ありがとうございます。
上記の丁寧な説明内容で理解できました。
早速テストした結果問題無く行けました。
本当に本当にありがとうございました。

すみません、念の為に確認なのですが、再度VBAで詰まった事があれば、
直接質問させていただくことは可能でしょうか?

勝手な事言いまして本当に申し訳ありません。
よろしくお願いします。

お礼日時:2023/02/27 18:59

うまくいかないとは、具体的にどのようなことでしょうか。


1.実行結果が期待した結果にならない。
2.途中でエラーが発生し、止まってしまう。
等が考えられますが、

1の場合は、実行結果と期待する結果を提示してください。
(実行時の在庫一覧の内容、まとめの内容も提示してください。社外秘のデータがある場合は、適度に伏字にしてください)

2の場合は、エラーメッセージの提示及び止まった行のマクロの内容を
提示してください。(画像でも構いません)
    • good
    • 0
この回答へのお礼

ご連絡ありがとうございます。
回答遅くなり申し訳ありません。

上手くいかないのは、上記で言うと2になります。

作成いただいたコードを色々調べて、理解しながら、テスト実施したのですが、、 特に Call tenki(key, row2)はどのように転記処理を書けば良いでしょうか?

またPrivateSub tenki(ByVal key As String, ByVal row2 As Long)が、
赤字になっております。ここは事前に何か設定が必要でしょうか?

あとrcnt = dicEN(key) - dicST(key) + 1 srow1 = dicST(key)はどんな意味を持つのでしょうか?

色々質問して申し訳ありませんが、よろしくお願いします。

お礼日時:2023/02/27 17:47

下記にアップしました。


https://ideone.com/UjNCij
不明点があれば、補足してください。
シート名:転記先 を作成してからマクロを実行してください。
転記先の見出し行を、マクロは作成しません。あなたが作成してください。
マクロは、6行目以降を設定します。
    • good
    • 0
この回答へのお礼

ご連絡ありがとうございます。
早々に対応していただき本当にありがとうございました。
いただいたマクロを確認、解読、テストして色々勉強させていただきますね。

お礼日時:2023/02/26 22:39

あなたから提示されたマクロをこちらで実行しました。


まとめシートの
部品単量(G列)、不良品(H列)、結果(I列)に
在庫一覧の
備考1、備考2、備考3が設定されています。
不良品(H列)に備考2を設定するのはあってますが、
部品単量(G列)に備考1を設定するのは誤りと理解して良いですか。
結果(I列)に備考3を設定するのも誤りと理解して良いですか。
    • good
    • 0
この回答へのお礼

ご連絡ありがとうございます。

すみません、こちらが提示していたVBAの内容が、説明文と合ってない動きをしたみたいですね。。
部品単量(G列)に備考1を設定、また結果(I列)に備考3を設定するは共に誤りで問題ないです。

よろしくお願いします。

お礼日時:2023/02/26 18:03

最終確認です。



1.転記先シートへの出力順は以下のとおりとする。
①状態が○、他 の順
②○が複数の場合、比率の絶対値の小さい順
③他が複数の場合、H列が不良以外、不良の順
④他が複数の場合でH列の不良以外が複数の場合、絶対値の小さい順
⑤他が複数の場合でH列の不良が複数の場合、絶対値の小さい順

2.在庫一覧シートについて
①車種は連続した行に定義されているものとし、ひとかたまりになってること。
(同じ車種が飛び飛びの行に定義されていないこと)
 連続して定義されていない場合、エラーメッセージを表示して、処理を打ち切る。
②在庫一覧の型式(B列は参照しない。無視する)(まとめシートの型式を採用する)

3.まとめシートについて
①まとめシートの車種が、在庫一覧にない場合、エラーメッセージを表示して終了する。

上記の仕様で問題なければ、作業に着手します。ご確認ください。
    • good
    • 0
この回答へのお礼

ご連絡ありがとうございます。
はい、連絡いただいた内容で問題ありません。
よろしくお願いします。

お礼日時:2023/02/26 17:29

>ですので「状態が○の場合、並べ替える順序を、ここは製造No順ではなく、比率の絶対値が小さい順(その必要重量に合う様に)に並べ変える」と言う解釈になります。


念のため確認です。
例として
必要重量=100の場合、
部品重量=105 比率=(105-100)/100=0.05 絶対値=0.05
部品重量=100 比率=(100-100)/100=0 絶対値=0
部品重量=97 比率=(97-100)/100=-0.03 絶対値=0.03
部品重量=90 比率=(90-100)/100=-0.01 絶対値=0.01

となります。したがって、並べる順は、
部品重量=100
部品重量=97
部品重量=105
部品重量=90

上記で間違いないでしょうか。
    • good
    • 0
この回答へのお礼

ご連絡有り難うございます。はい、その内容で、問題ございません。
よろしくお願い致します。

お礼日時:2023/02/26 15:35

確認事項です。

以下の仕様であってますでしょうか。

1.H列が 不良 の場合は、D列:必要重量とF列:部品重量がいかなる値であっても、状態は 他 を設定する。

2.H列が 不良以外 の場合は、以下の方法で、状態を設定する。
① 比率=(部品重量-必要重量)÷必要重量 を算出する。
② 比率 ≦ ±0.1(10%) の場合、状態へ○を設定
③ 上記②以外の場合、状態へ 他 を設定

3.同じ車種で並べ替える順番
優先順位
○、他の順に並べる。
○が複数の場合、製造No順に並べる。(比率の小さい順ではない)
他の場合、製造No順に並べる。(比率の小さい順ではない)

上記であってますでしょうか。


4.H列が、不良の場合の並び順
タントの場合、不良なので、その車種の最下行にする。となってますが、他の車種(アルファード)の場合は、
最下行になっていません。
どちらが正しいのでしょうか。
それにより、並べ替える順番の規則が変わってきます。


5.以下の文言が画像に書かれています。(多少文言が違っているかもしれません)
「必要重量に対して、部品重量が上手く合うものを上に持ってくる。
アルファードの必要重量は100に対して、上位の製造NOは、A2320224の重量は60で、
あと40不足していますので、A2320226の重量は20、A2320227の重量は20を上位にして、
ちょうど100です。」

この文章は、無視して良いのでしょうか。
それとも、「状態が○の場合、並べ替える順序を、(製造No順ではなく)比率の絶対値が小さい順に並べ変える」と
解釈するのでしょうか。
    • good
    • 0
この回答へのお礼

ご連絡ありがとうございます。

下記に回答させていただきますね。

1.H列が 不良 の場合は、D列:必要重量とF列:部品重量がいかなる値であっても、状態は 他 を設定する。
→はい、合っております。


2.H列が 不良以外 の場合は、以下の方法で、状態を設定する。
① 比率=(部品重量-必要重量)÷必要重量 を算出する。
② 比率 ≦ ±0.1(10%) の場合、状態へ○を設定
③ 上記②以外の場合、状態へ 他 を設定
→はい、合っております。

3.同じ車種で並べ替える順番
優先順位
○、他の順に並べる。
○が複数の場合、製造No順に並べる。(比率の小さい順ではない)
他の場合、製造No順に並べる。(比率の小さい順ではない)
→はい、合っております。

4.H列が、不良の場合の並び順
タントの場合、不良なので、その車種の最下行にする。となってますが、他の車種(アルファード)の場合は、
最下行になっていません。
どちらが正しいのでしょうか。
それにより、並べ替える順番の規則が変わってきます。
→すみません、車種(アルファード)が間違っております。
 タントの場合のように、不良はその車種の最下行に統一で問題ありません。

5.以下の文言が画像に書かれています。(多少文言が違っているかもしれません)
「必要重量に対して、部品重量が上手く合うものを上に持ってくる。
アルファードの必要重量は100に対して、上位の製造NOは、A2320224の重量は60で、
あと40不足していますので、A2320226の重量は20、A2320227の重量は20を上位にして、
ちょうど100です。」
→この内容についてですが、内容はその品種の必要重量に合う様(超えない様)に、製造NOを上から順番に部品重量を確認して、部品重量を足して、必要重量と同じものを選ぶ。その状態に〇をつけるということをしたかったのですが、、、
分かりにくい表現ですみません。

ですので「状態が○の場合、並べ替える順序を、ここは製造No順ではなく、比率の絶対値が小さい順(その必要重量に合う様に)に並べ変える」と言う解釈になります。

よろしくお願いします。

お礼日時:2023/02/26 14:43

補足ありがとうございました。

各列の名称はわかりました。

>転記後、まとめシートで、それぞれの車種において、D列=必要重量とF列=部品重量が同じ、かつF列=部品重量が±10%以内、かつH列=不良品が"不良"以外の物であれば、A列=状態に"○"を付ける。

具体例を提示していただけませんでしょうか。
○になるケース。
他になるケース


D列=必要重量とF列=部品重量が同じとは、
例 必要重量=100 部品重量=100 のようなことでしょうか。

F列=部品重量が±10%以内とは、部品重量に対して±10%以内なのでしょうか。
例 必要重量=100 部品重量=20 の場合、どのように計算しますか。
    • good
    • 0
この回答へのお礼

ご連絡ありがとうございます。
回答させていただきます。


>転記後、まとめシートで、それぞれの車種において、D列=必要重量とF列=部品重量が同じ、かつF列=部品重量が±10%以内、かつH列=不良品が"不良"以外の物であれば、A列=状態に"○"を付ける。

■○になるケース
・D列=必要重量とF列=部品重量が同じ
 →F列=車種のクラウンの場合になり、D列=100とF列=100が同じ状態です。

・F列=部品重量が±10%以内
 →F列=車種のタントの場合になり、列=必要重量が1000に対して、±10%以内なので、範囲で言えば、F列=部品重量は900~1000までOKです。
この範囲以外であれば、その品種の最終行にします。

・H列=不良品が"不良"以外の物
 →F列=車種のアルファードの場合でいきますと、11行目のH列=不良品(H11セル)には"不良"と言う文字がありません。

その他で言いますとF列=車種のアルファードの場合で、D列=必要重量が1000に対して、F列=部品重量が+して100になるもの。表で行けば、○が付くものは製造NO=A2320224、部品重量60と、製造NO=A2320226、部品重量20
、製造NO=A2320227、部品重量20の3つになります。

■他になるケース
・D列=必要重量とF列=部品重量が同じ
 →F列=車種のタントの場合でいきますと、D6セル=1000とF7セル=1020と違う値です。

・F列=部品重量が±10%以内
 →F列=車種のアルファードの場合になり、D11=必要重量が100に対して、F12=部品重量は49になります。これは±10%以下なので、範囲外になります。この製造NOはその品種の最終行にします。

・H列=不良品が"不良"以外のタントの場合でいきますと、6行目のH列=不良品(H6セル)には"不良"と言う文字があります。

すみませんが、宜しくお願い致します。

お礼日時:2023/02/26 13:19

訂正 まとめシートのD列は


D列:必要重量
でした。
    • good
    • 0
この回答へのお礼

何度もすみません。

はい、まとめシートのD列は「必要重量」です。

必要個数と書きましたが、こちらの記入ミスでした。。。
「必要重量」でお願い致します。

お礼日時:2023/02/26 12:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!