質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Q&A

1回答

701閲覧

【VBA】IF文がうまくいかない

MINAMI

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

0グッド

0クリップ

投稿2022/03/29 02:05

したいこと
別ブックの"YYY(2)"シートと、"YYY"シートを照らし合わせて
G, H, I, J, K, M列の値が全て等しい場合、
"YYY(2)"シートのB列を、"YYY"シートのB列に転記したい。

解決したいこと
下記、コードだと正答率が半分程度になってしまいます。
どこが原因か分からず、お知恵をお貸しください。

下記、コードの表示

VBA

1 '別ブックを開く 2 Workbooks.Open Filename:=ThisWorkbook.Path & "\XXX.xlsm" 3 4 Set Wb1 = ThisWorkbook 'このブック 5 Set Wb2 = Workbooks("XXX") '別ブック 6 7 Set Sht1 = Wb1.Worksheets("YYY") 8 Set Sht4 = Wb2.Worksheets("YYY(2)") 9 10 'フィルタを解除する 11 Dim ws As Worksheet 12 13 row1 = 2 14 For y = 2 To Sht1.Cells(Rows.Count, 6).End(xlUp).Row 15 For z = 2 To Sht4.Cells(Rows.Count, 6).End(xlUp).Row 16 17 If Sht1.Cells(y, 7).Value = Sht4.Cells(z, 7).Value And _ 18 Sht1.Cells(y, 8).Value = Sht4.Cells(z, 8).Value And _ 19 Sht1.Cells(y, 9).Value = Sht4.Cells(z, 9).Value And _ 20 Sht1.Cells(y, 10).Value = Sht4.Cells(z, 10).Value And _ 21 Sht1.Cells(y, 11).Value = Sht4.Cells(z, 11).Value And _ 22 Sht1.Cells(y, 13).Value = Sht4.Cells(z, 13).Value Then 23 Sht1.Cells(row1, "B").Value = Sht4.Cells(z, "B").Value 24 row1 = row1 + 1 25 End If 26 Next 27 Next 28 29 Wb2.Close 30

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bebebe_

2022/03/29 02:59

FOR文の終了条件がF列の最終行になってますがそこは問題ないですか?
MINAMI

2022/03/29 03:15

ご確認ありがとうございます。 そちらは問題ございません。 上記を実行するとなぜかG, H, I, J ,K, M列すべてが異なる行のB列が転記されてしまい、 困っております。。
MINAMI

2022/03/29 03:15

正しく転記される行と、されない行があり、さらに困惑してしまいます。。
Usirow

2022/03/29 04:04

すべて異なる行が転記されてしまうのは、yとzの二重ループのせいで、まったく関係ない行同士もすべて比較しているのが原因かなと思いましたが、その場合は転記されない行が出てくるのが謎ですね。
bebebe_

2022/03/29 04:08

異なる行がコピーされる原因にはならないと思いますがコードの中のフィルターの解除の部分は機能してますか? 手間にはなってしまいがコード編集のところでF8を押して1行ずつ実行していくと原因がわかりそうな気がします。
guest

回答1

0

VBA

1Option Explicit 2Sub Sample() 3 Dim Wb2 As Workbook, Sht1 As Worksheet, Sht4 As Worksheet 4 '別ブックを開く 5 Set Wb2 = Workbooks.Open(Filename:=ThisWorkbook.Path & "\XXX.xlsm") 6 Set Sht1 = ThisWorkbook.Worksheets("YYY") 7 Set Sht4 = Wb2.Worksheets("YYY(2)") 8 Dim Y As Long, Z As Long 9 For Y = 2 To Sht1.Cells(Rows.Count, 6).End(xlUp).Row 10 For Z = 2 To Sht4.Cells(Rows.Count, 6).End(xlUp).Row 11 If Sht1.Cells(Y, 7).Value = Sht4.Cells(Z, 7).Value And _ 12 Sht1.Cells(Y, 8).Value = Sht4.Cells(Z, 8).Value And _ 13 Sht1.Cells(Y, 9).Value = Sht4.Cells(Z, 9).Value And _ 14 Sht1.Cells(Y, 10).Value = Sht4.Cells(Z, 10).Value And _ 15 Sht1.Cells(Y, 11).Value = Sht4.Cells(Z, 11).Value And _ 16 Sht1.Cells(Y, 13).Value = Sht4.Cells(Z, 13).Value Then 17 Sht1.Cells(Y, "B").Value = Sht4.Cells(Z, "B").Value 18 Exit For 19 End If 20 Next 21 Next 22 Wb2.Close 23End Sub

投稿2022/03/29 02:46

iruyas

総合スコア1067

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MINAMI

2022/03/29 03:05

ご回答ありがとうございます。 他にコードを色々書いていたので、省いていたのですが、変数定義はしております。。 試しにいただいたコードでも試してみましたがうまくいかないのです。。
iruyas

2022/03/29 03:57

別に、変数宣言が無いことを論ったつもりはありません。 ただうまくいかないと言われても、こちらでは判断できません。 何も変更せずに、回答した内容を試行してみてください。 どこがどううまくないのですか?
MINAMI

2022/03/29 04:05

いただいたコードをそのまま実行しましたが、 正しくG, H, I, J, K, M列が全て等しい"YYY(2)"シートのB列を、"YYY"シートのB列に転記する行と、 転記しない行があります。 正しく転記できない行は、G, H, I, J, K, M列すべて等しくないです。 うまく転記できる行と、そうでない行があるので原因がわからず困っています。
iruyas

2022/03/29 04:43

「そうでない行」というのは (1) 転記されない (2) 誤った値が転記される どちらですか?
MINAMI

2022/03/29 05:24

分かりづらく申し訳ございません。(2)です。
iruyas

2022/03/29 06:55

問題の切り分けの為に、下記を試してもらえますか? Option Explicit Sub Sample() Dim Wb2 As Workbook, Sht1 As Worksheet, Sht4 As Worksheet Application.EnableEvents = False '別ブックを開く <以下同文>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問