質問です。同じシート内のG列にある氏名と同じ氏名をA列から探し、一致した氏名を別シートに転記、B列(郵便番号)、C列(住所)も転記するものを考えています。しかし、1行目しか転記できず、次を検索して同様に転記するマクロがうまくできません。どのように作成したらいいでしょうか? 'シート2のG列の値がA列と一致した氏名と郵便番号B列・住所C列をシート5へ転記 Sub tenki() Dim hida Dim migi migi = 3 For hida = 2 To 20 If Worksheets("Sheet2").Range("A" & hida).Value = Worksheets("Sheet2").Range("G" & hida).Value Then Worksheets("Sheet5").Range("B" & migi).Value = Worksheets("Sheet2").Range("A" & hida).Value Worksheets("Sheet5").Range("C" & migi).Value = Worksheets("Sheet2").Range("B" & hida).Value Worksheets("Sheet5").Range("D" & migi).Value=Worksheets("Sheet2").Range("C" & hida).Value migi = migi + 1 End If Next End Sub
2020/06/08 06:59
小川慶一さんのコメント
(コメントID: 6643)
さざなみさん:
こんばんは。
If Worksheets("Sheet2").Range("A" & hida).Value = Worksheets("Sheet2").Range("G" & hida).Value Then ↑ この条件だと、A列とG列の値が一致した行の中身しか転記しませんね。
さっそくに返信ありがとうございます!もっと演習してできるようになりたいと思います!For next とIfが、複数作っているうちにハマってしまい・・・偶然うまくすべて転記できたと思ったらまた作り直しと2日くらい悩んでしまいました。早く作り上げたいと焦ってました。もっと動画を見てたくさんマクロ書いてすっとわかるようにがんばります。
さざなみさんの投稿
(投稿ID: 4754)
'シート2のG列の値がA列と一致した氏名と郵便番号B列・住所C列をシート5へ転記
Sub tenki()
Dim hida
Dim migi
migi = 3
For hida = 2 To 20
If Worksheets("Sheet2").Range("A" & hida).Value = Worksheets("Sheet2").Range("G" & hida).Value Then
Worksheets("Sheet5").Range("B" & migi).Value = Worksheets("Sheet2").Range("A" & hida).Value
Worksheets("Sheet5").Range("C" & migi).Value = Worksheets("Sheet2").Range("B" & hida).Value
Worksheets("Sheet5").Range("D" & migi).Value=Worksheets("Sheet2").Range("C" & hida).Value
migi = migi + 1
End If
Next
End Sub
小川慶一さんのコメント
(コメントID: 6643)
こんばんは。
If Worksheets("Sheet2").Range("A" & hida).Value = Worksheets("Sheet2").Range("G" & hida).Value Then
↑
この条件だと、A列とG列の値が一致した行の中身しか転記しませんね。
では、どのようにすれば、「G列にある氏名と同じ氏名をA列から探す」ことができるか?
それについては、このページの課題を参考にしてください。
また、転記については、以下の課題を参考にしてください。
○条件に一致するデータを別表に転記する。AutoFilterより便利な条件抽出マクロ。
https://forum.pc5bai.com/lesson/page/144
最低でも、以下の3つの変数が必要です。
A列の行を指定する変数
G列の行を指定する変数
転記先の行を指定する変数
このページの課題でも解説したとおり、最低でも、以下の2つのFor Next構文が必要です。
(内側にくるものから示します。G列もA列も2行目以降に調査対象のデータがあるものとします)
A列各行の値をG2の値と比較する
G列各行に対して同様の処理を行う
このヒントでピンとこないようでしたら、このページでの演習が不足しています。
連続で5回くらい解いてください。遅くとも1回あたり所要時間が6分を切るところまで。
それからもう一度このヒントを読み返して、そして再トライしてみてください。
この過程で挫折した場合は、どんな努力をしてどう挫折をしたのか?を示していただければ、次のヒント(あるいはワークなり、解答例なり)を出します。
受講生さんのコメント
(コメントID: 6644)
小川慶一さん:
> さざなみさん:
>
> こんばんは。
>
> If Worksheets("Sheet2").Range("A" & hida).Value = Worksheets("Sheet2").Range("G" & hida).Value Then
> ↑
> この条件だと、A列とG列の値が一致した行の中身しか転記しませんね。
>
> では、どのようにすれば、「G列にある氏名と同じ氏名をA列から探す」ことができるか?
> それについては、このページの課題を参考にしてください。
>
> また、転記については、以下の課題を参考にしてください。
>
> ○条件に一致するデータを別表に転記する。AutoFilterより便利な条件抽出マクロ。
> https://forum.pc5bai.com/lesson/page/144
>
>
> 最低でも、以下の3つの変数が必要です。
> A列の行を指定する変数
> G列の行を指定する変数
> 転記先の行を指定する変数
>
> このページの課題でも解説したとおり、最低でも、以下の2つのFor Next構文が必要です。
> (内側にくるものから示します。G列もA列も2行目以降に調査対象のデータがあるものとします)
>
> A列各行の値をG2の値と比較する
> G列各行に対して同様の処理を行う
>
>
> このヒントでピンとこないようでしたら、このページでの演習が不足しています。
> 連続で5回くらい解いてください。遅くとも1回あたり所要時間が6分を切るところまで。
> それからもう一度このヒントを読み返して、そして再トライしてみてください。
>
> この過程で挫折した場合は、どんな努力をしてどう挫折をしたのか?を示していただければ、次のヒント(あるいはワークなり、解答例なり)を出します。
>
>
小川慶一さんのコメント
(コメントID: 6645)
解決したい課題はいたってシンプルです。
[a]
G2セルにある値を使い、条件に一致するデータを見つける。そして何らかの処理をする。
↓
G2:G20の範囲にある値を使って同様に処理を行う。
このページで紹介している課題と何が違うのかというと、「そして何らかの処理」の部分が、
[b]
「条件に一致した行に値を書き込む」
から
「条件に一致した行にあるデータを別シートに転記する」
に変わっただけです。
そして、[a], [b]のうち、さざなみさんは、[a]の部分でつまづかれています。
[b]に気を取られて[a]の処理をきちんと実装できなくなっているというのは、要は、[a]にかかる演習が不足しているということです。
「実務上の課題を解決する必要に迫られている」という状況は、上達のチャンスです。
> さっそくに返信ありがとうございます!もっと演習してできるようになりたいと思います!
ではなく、
> もっと動画を見てたくさんマクロ書いてすっとわかるようにがんばります。
ではなく、今目の前にある課題のために努力したほうがよいです。
先だっての投稿は、そういう意味でのアドバイスです。
「もっと動画を見る」のではなく、このページの演習をくり返して自分のものにしてください。
「もっと演習して」ではなく、この課題を解決するためのヒントを必死になって探すつもりで演習をくり返してださい。
さざなみさんのコメント
(コメントID: 6648)
Sub tenki2()
Dim hida
Dim migi
Dim migii
migii = 3
For migi = 2 To 20
For hida = 2 To 20
If Worksheets("Sheet2").Range("G" & migi).Value = Worksheets("Sheet2").Range("A" & hida).Value Then
Worksheets("Sheet5").Range("B" & migii).Value = Worksheets("Sheet2").Range("A" & hida).Value
Worksheets("Sheet5").Range("C" & migii).Value = Worksheets("Sheet2").Range("B" & hida).Value
Worksheets("Sheet5").Range("D" & migii).Value = Worksheets("Sheet2").Range("C" & hida).Value
migii = migii + 1
End If
Next
Next
End Sub
小川慶一さん:
> 受講生 さん:
>
> 解決したい課題はいたってシンプルです。
>
> [a]
> G2セルにある値を使い、条件に一致するデータを見つける。そして何らかの処理をする。
> ↓
> G2:G20の範囲にある値を使って同様に処理を行う。
>
> このページで紹介している課題と何が違うのかというと、「そして何らかの処理」の部分が、
>
> [b]
> 「条件に一致した行に値を書き込む」
> から
> 「条件に一致した行にあるデータを別シートに転記する」
>
> に変わっただけです。
>
> そして、[a], [b]のうち、さざなみさんは、[a]の部分でつまづかれています。
> [b]に気を取られて[a]の処理をきちんと実装できなくなっているというのは、要は、[a]にかかる演習が不足しているということです。
>
>
> 「実務上の課題を解決する必要に迫られている」という状況は、上達のチャンスです。
>
> > さっそくに返信ありがとうございます!もっと演習してできるようになりたいと思います!
>
> ではなく、
>
> > もっと動画を見てたくさんマクロ書いてすっとわかるようにがんばります。
>
> ではなく、今目の前にある課題のために努力したほうがよいです。
>
> 先だっての投稿は、そういう意味でのアドバイスです。
> 「もっと動画を見る」のではなく、このページの演習をくり返して自分のものにしてください。
> 「もっと演習して」ではなく、この課題を解決するためのヒントを必死になって探すつもりで演習をくり返してださい。
>
>
>
>
>
小川慶一さんのコメント
(コメントID: 6649)
おお、できましたか!
自力でできると、また格別ですね。
良い経験になったかと思います (^^*
基礎編フォローアップペーシックで扱っているお題はどれもシンプルですが、組み合わせれば実務上のさまざまな課題を解決できます。
「自力で組み合わせできない」という場合は学んだはずのスキルがまだ手についていないということです。そういうときは、そういう意識で復習に取り組んでいただければと思います。
もちろん、このオリジナル課題も、
> 今やっとできました。
で終わらせないで、何度かくり返して解いて、自分の身体になじませてください。
すると、「さらにひと工夫」というようなものも作れるようになります。マクロの上達というのは、そういうステップのくり返しです (^^
コードについてひとつだけコメントすると、migi, migiiという2つの変数は名前が似すぎているのでどちらか変更したいですね。
たとえば、 migii のほうは、「tenkisaki」とか「saki」とかかな。
ではでは。
ひきつづき、学習お楽しみください☆