転記の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列=必要重量に合う様に、行間で入れ替える。
詳細は画像を参照ください。
すみませんが、宜しくお願い致します。
No.13ベストアンサー
- 回答日時:
コメントを追加しました。
前のは破棄してこちらを使用してください。https://ideone.com/25gcNS
処理の内容は変えていません。
(Private Sub tenki内に未使用の変数があったので削除しました。
wrow,wrow3を削除)
No.12
- 回答日時:
>上手くいかないのは、上記で言うと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になります。
ご連絡ありがとうございます。
上記の丁寧な説明内容で理解できました。
早速テストした結果問題無く行けました。
本当に本当にありがとうございました。
すみません、念の為に確認なのですが、再度VBAで詰まった事があれば、
直接質問させていただくことは可能でしょうか?
勝手な事言いまして本当に申し訳ありません。
よろしくお願いします。
No.11
- 回答日時:
うまくいかないとは、具体的にどのようなことでしょうか。
1.実行結果が期待した結果にならない。
2.途中でエラーが発生し、止まってしまう。
等が考えられますが、
1の場合は、実行結果と期待する結果を提示してください。
(実行時の在庫一覧の内容、まとめの内容も提示してください。社外秘のデータがある場合は、適度に伏字にしてください)
2の場合は、エラーメッセージの提示及び止まった行のマクロの内容を
提示してください。(画像でも構いません)
ご連絡ありがとうございます。
回答遅くなり申し訳ありません。
上手くいかないのは、上記で言うと2になります。
作成いただいたコードを色々調べて、理解しながら、テスト実施したのですが、、 特に Call tenki(key, row2)はどのように転記処理を書けば良いでしょうか?
またPrivateSub tenki(ByVal key As String, ByVal row2 As Long)が、
赤字になっております。ここは事前に何か設定が必要でしょうか?
あとrcnt = dicEN(key) - dicST(key) + 1 srow1 = dicST(key)はどんな意味を持つのでしょうか?
色々質問して申し訳ありませんが、よろしくお願いします。
No.10
- 回答日時:
下記にアップしました。
https://ideone.com/UjNCij
不明点があれば、補足してください。
シート名:転記先 を作成してからマクロを実行してください。
転記先の見出し行を、マクロは作成しません。あなたが作成してください。
マクロは、6行目以降を設定します。
ご連絡ありがとうございます。
早々に対応していただき本当にありがとうございました。
いただいたマクロを確認、解読、テストして色々勉強させていただきますね。
No.9
- 回答日時:
あなたから提示されたマクロをこちらで実行しました。
まとめシートの
部品単量(G列)、不良品(H列)、結果(I列)に
在庫一覧の
備考1、備考2、備考3が設定されています。
不良品(H列)に備考2を設定するのはあってますが、
部品単量(G列)に備考1を設定するのは誤りと理解して良いですか。
結果(I列)に備考3を設定するのも誤りと理解して良いですか。
ご連絡ありがとうございます。
すみません、こちらが提示していたVBAの内容が、説明文と合ってない動きをしたみたいですね。。
部品単量(G列)に備考1を設定、また結果(I列)に備考3を設定するは共に誤りで問題ないです。
よろしくお願いします。
No.8
- 回答日時:
最終確認です。
1.転記先シートへの出力順は以下のとおりとする。
①状態が○、他 の順
②○が複数の場合、比率の絶対値の小さい順
③他が複数の場合、H列が不良以外、不良の順
④他が複数の場合でH列の不良以外が複数の場合、絶対値の小さい順
⑤他が複数の場合でH列の不良が複数の場合、絶対値の小さい順
2.在庫一覧シートについて
①車種は連続した行に定義されているものとし、ひとかたまりになってること。
(同じ車種が飛び飛びの行に定義されていないこと)
連続して定義されていない場合、エラーメッセージを表示して、処理を打ち切る。
②在庫一覧の型式(B列は参照しない。無視する)(まとめシートの型式を採用する)
3.まとめシートについて
①まとめシートの車種が、在庫一覧にない場合、エラーメッセージを表示して終了する。
上記の仕様で問題なければ、作業に着手します。ご確認ください。
No.7
- 回答日時:
>ですので「状態が○の場合、並べ替える順序を、ここは製造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
上記で間違いないでしょうか。
No.6
- 回答日時:
確認事項です。
以下の仕様であってますでしょうか。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順ではなく)比率の絶対値が小さい順に並べ変える」と
解釈するのでしょうか。
ご連絡ありがとうございます。
下記に回答させていただきますね。
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順ではなく、比率の絶対値が小さい順(その必要重量に合う様に)に並べ変える」と言う解釈になります。
よろしくお願いします。
No.5
- 回答日時:
補足ありがとうございました。
各列の名称はわかりました。>転記後、まとめシートで、それぞれの車種において、D列=必要重量とF列=部品重量が同じ、かつF列=部品重量が±10%以内、かつH列=不良品が"不良"以外の物であれば、A列=状態に"○"を付ける。
具体例を提示していただけませんでしょうか。
○になるケース。
他になるケース
D列=必要重量とF列=部品重量が同じとは、
例 必要重量=100 部品重量=100 のようなことでしょうか。
F列=部品重量が±10%以内とは、部品重量に対して±10%以内なのでしょうか。
例 必要重量=100 部品重量=20 の場合、どのように計算しますか。
ご連絡ありがとうございます。
回答させていただきます。
>転記後、まとめシートで、それぞれの車種において、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セル)には"不良"と言う文字があります。
すみませんが、宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) VBAで、シート間の転記するコードを教えてください。 4 2023/03/26 10:43
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 3つの条件を指定してVBAで行を削除したい 条件1:分類1が重複 条件2:分類2が重複 条件3:個数 6 2022/06/24 11:07
- Visual Basic(VBA) マクロで最終行を取得したい 4 2023/05/28 12:14
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
マクロ実行後に別シートの残像...
-
Excel2013で切り取り禁止
-
楽天RSSからエクセルVBAを使用...
-
Count Ifのセルの範囲指定に変...
-
VBA 別ブックからの転記の高速...
-
Excel VBA オートフィルターで...
-
Changeイベントで複数セルへの...
-
グラフマクロで系列を変数にす...
-
VBAを使って複数のシートから抽...
-
複数シートの複数列に入力され...
-
VBA別シートの最終行の次行へ転...
-
ExcelのVBAでやりたい操作でで...
-
アクセスからエクセルへ出力時...
-
EXCELのSheet番号って変更でき...
-
月毎に現金出納帳に転記するコ...
-
テキストボックスから、複数の...
-
まとめシートから集計シートへA...
-
VBA 実行時エラー1004 rangeメ...
-
VBA シート間の転記で、条件の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
マクロ実行後に別シートの残像...
-
VBAコードについて
-
VBA 空白行に転記する
-
EXCELのSheet番号って変更でき...
-
VBA 別ブックからの転記の高速...
-
【VBA】特定の条件でセルをコピー
-
VBA別シートの最終行の次行へ転...
-
100万件越えCSVから条件を満た...
-
VBAで変数の数/変数名を動的に...
-
Changeイベントで複数セルへの...
-
楽天RSSからエクセルVBAを使用...
-
Count Ifのセルの範囲指定に変...
-
Unionでの他のシートの参照につ...
-
Excel2013で切り取り禁止
-
Excel VBA オートフィルターで...
-
VBA 実行時エラー1004 rangeメ...
-
複数シートの複数列に入力され...
-
VBA Userformで一部別シートに...
-
ExcelのVBマクロを、バックグラ...
おすすめ情報
画像が見にくい状態でしたので、下記に再度添付します。
よろしくお願いします。
https://gyazo.com/ce22f43a942ab9decc5c7c9b83e01266
お世話になります。
現在テストしてますが、うまくいかず、、すみませんが、処理の内容を教えていただけないでしょうか?
よろしくお願い致します