5倍速!メールマガジン
外部アカウントで登録
受講生の声
新着の講座投稿
新着の講座コメント
新着のノート投稿
投稿一覧へ新着のノートコメント
表示できる投稿はありません。
サイト運営者紹介
小川 慶一講師/教材/システム開発者紹介
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
表示できる投稿はありません。
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
受講生さんの投稿
(投稿ID: 3184) 添付ファイルのダウンロード権限がありません
データ転記先の表に該当する氏名が見つからない場合は、転記先表にエラーが出るようにプログラムを作成しました(下記参照)
このプログラムを動かすと、D列に全てエラーが記載されてしまいます。
お忙しい中申し訳ありませんが、マッチングしていない氏名のみエラーが
出るにはどのようにしたら良いかご教示願います。
【回答1】
Sub test1()
Dim saki
Dim moto
For moto = 4 To 31
For saki = 4 To 31
If Worksheets("転記先").Range("B" & saki).Value = Worksheets("元データ").Range("B" & moto).Value Then
Worksheets("転記先").Range("C" & saki).Value = Worksheets("元データ").Range("C" & moto).Value
ElseIf Worksheets("転記先").Range("B" & saki).Value <> Worksheets("元データ").Range("B" & moto).Value Then
Worksheets("転記先").Range("D" & saki).Value = "エラー"
End If
Next
【回答2】
Sub test2()
Dim saki
Dim moto
For moto = 4 To 31
For saki = 4 To 31
If Worksheets("転記先").Cells(saki, 2).Value = Worksheets("元データ").Cells(moto, 2).Value Then
Worksheets("転記先").Cells(saki, 3).Value = Worksheets("元データ").Cells(moto, 3).Value
Else
'Worksheets("転記先").Range("D" & saki).Value = "エラー"
End If
Next
Next
End Sub
小川 慶一さんのコメント
(コメントID: 4634)
>このプログラムを動かすと、D列に全てエラーが記載されてしまいます。
>マッチングしていない氏名のみエラーが出るにはどのようにしたら良いかご教示願います。
「どのようにしたら良いか」ということであれば、まずは、インデントのきちんとされたプログラムを書くことです。
それができれば、自力で問題を解決できるようになるでしょう。
前回ご質問いただいたときの添付ファイルにあった以下のプログラムでもそうでしたが
今回のプログラムもこれ↓です。
これでは問題解決を自分でできなくて当然です。
インデントされてないプログラムでは、本人も問題を見つけられません。
テストをするにも大変です。
ということなので、以下の練習問題から、きちんとインデントされたプログラムを書くことを意識して全問解き直されることをお勧めします。
「If文とForNext構文を組み合わせる」
https://forum.pc5bai.com/lesson/page/141
以下を徹底してください。「ハナコのステップ」にしたがって動画で解説しているとおりにプログラムを書いていれば自然にこうなります。
[1] sub ... end sub の中身は4文字分右へ
[2] for ... next や if ... else ... end if の中身は4も自分右へ
「If文とForNext構文を組み合わせる」から順に問題を解いていって、上記の説明と動画解説だけでは理解できないところがあったら、質問してください。
↑
このままインデントされてないプログラムでゴリ押ししても、いずれもっと複雑な課題にトライしようとしても行き詰まるだけです。
難易度の高い問題を自力で解けるようになるには、基礎がしっかりしている必要があります。
数学で言えば、計算問題を早く正確に解けて、簡単な文章題が解けて、はじめて、難しい文章題が解けるようになるものです。
計算問題や簡単な文章題で足腰をしっかり鍛えないと、難しい文章題にチャレンジしようとしても必ず足元をすくわれます。
マクロもそれと同じです。簡単なマクロを書き上げるときの基本パターンをしっかり身につけていないと、難しいマクロを書こうとしても書きあげられません。
ということで、ここまで、嫌がらせではなくて、本当にそう思って書いていますので、ご理解いただければと思います。
とはいえ、今回だけは、いただいた質問そのものについても回答さしあげますね。
お送りいただいたプログラムを僕のほうで手直ししました。
以下のとおり。
↑
この状態にしてから、 [F8] でステップイン実行を30回くらいすれば何が起きているのか?十分に理解できることでしょう。
変数の値をプログラム実行中に確認するには、「自動データヒント」機能を利用できましたね。不審に思ったことがあったら、ステップインモードでのプログラム実行中に、変数 moto や変数 saki の値を確認しましょう。