名簿を作成し、その中から名前とメールアドレスのみを
別シートに表示するマクロを作成したいのですが
現在いるメンバーをNullで、居ないメンバーを1の値で判断し、作成してみたのですが
Sub 名前とメールアドレスの取得()
myMdate = "5"
mySdate = "1"
myName = ""
myAddress = ""
Workbooks("○○.xls").Worksheets("○○").Select
If Range(Cells(myMdate, 3), Cells(myMdate, 3)).Value = "" Then
myName = Range(Cells(myMdate, 4), Cells(myMdate, 4)).Value
myAddress = Range(Cells(myMdate, 5), Cells(myMdate, 5)).Value
Workbooks("○○.xls").Worksheets("○○").Select
Range(Cells(mySdate, 1), Cells(mySdate, 1)).Value = myName
Range(Cells(mySdate, 2), Cells(mySdate, 2)).Value = myAddress
End If
End Sub
上記のマクロは1行のみのマクロです。
これをmyMdateとmySdateの部分をカウントUPさせ
ループし、全てのメンバーのメールアドレスと、名前を別シートに取得できるようにさせたいのですが、どうしたらいいでしょうか。
宜しくお願い致します。
コードの書き方に無駄な部分が多いです。
あと、変数はきちんと宣言してから使いましょう。
Sub 名前とメールアドレスの取得()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim myMdate As Long
Dim mySdate As Long
Set ws1 = Workbooks("○○.xls").Worksheets("○○")
Set ws2 = Workbooks("○○.xls").Worksheets("△△")
mySdate = 1
For myMdate = 5 To ws1.Range("C65536").End(xlUp).Row
If ws1.Cells(myMdate, 3).Value = "" Then
ws2.Cells(mySdate, 1).Value = ws1.Cells(myMdate, 4).Value
ws2.Cells(mySdate, 2).Value = ws1.Cells(myMdate, 5).Value
mySdate = mySdate + 1
End If
Next myMdate
End Sub
お返事有難う御座います。
作った時には変数は宣言していたのですが
こちらの掲示板に書くのを忘れてしまいました。もうしわけありません。
ご指摘どおり、書いて実行してみたのですが
うまく取得できませんでした。
知識が乏しく、どこがいけないのか探しては見たものの、
やはりよく分かりません。
Do〜Loopを使ったほうが良いのかなと思っておりましたが
どうなのでしょうか。
何度も質問申し訳ありません。
書き忘れました。一応自分では
変数の宣言は
Dim myMdate As Integer
Dim mySdate As Integer
Dim myName As String
Dim myAddress As String
と宣言し、つかっていました。
LESIAさんが提示してくれているFor〜Nextでも
VBA初心者さんのおっしゃるDo〜Loopでも可能だと思います。
うまくいかなかったというのは具体的にどのようにうまくいかなかったのでしょうか?
試してみました。
For myMdate = 5 To ws1.Range("C65536").End(xlUp).Row
を下記に変えてみてください。
For myMdate = 5 To ws1.Range("D65536").End(xlUp).Row
これでどうでしょう?
C列が空文字の場合に処理するようになっているので、
最終行の取得にC列を使うのは、おかしかったですね。
シートの構成がよくわからないのですが、A列とB列はどうなっているのでしょうか?
A列には、最終行まで必ず値が入っているなら
For myMdate = 5 To ws1.Range("A65536").End(xlUp).Row
でも、いいかもしれません。
ツイート | ![]() |