ループさせるには?


VBA初心者  2006-11-30 01:20:15  No: 134380

名簿を作成し、その中から名前とメールアドレスのみを

別シートに表示するマクロを作成したいのですが

現在いるメンバーを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させ

ループし、全てのメンバーのメールアドレスと、名前を別シートに取得できるようにさせたいのですが、どうしたらいいでしょうか。

宜しくお願い致します。


LESIA  2006-11-30 05:48:40  No: 134381

コードの書き方に無駄な部分が多いです。
あと、変数はきちんと宣言してから使いましょう。

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


VBA初心者  2006-11-30 17:55:06  No: 134382

お返事有難う御座います。

作った時には変数は宣言していたのですが

こちらの掲示板に書くのを忘れてしまいました。もうしわけありません。

ご指摘どおり、書いて実行してみたのですが

うまく取得できませんでした。

知識が乏しく、どこがいけないのか探しては見たものの、

やはりよく分かりません。

Do〜Loopを使ったほうが良いのかなと思っておりましたが

どうなのでしょうか。

何度も質問申し訳ありません。


VBA初心者  2006-11-30 18:10:41  No: 134383

書き忘れました。一応自分では

変数の宣言は

Dim myMdate As Integer
Dim mySdate As Integer
Dim myName As String
Dim myAddress As String

と宣言し、つかっていました。


ぼーちゃん  2006-11-30 18:34:17  No: 134384

LESIAさんが提示してくれているFor〜Nextでも
VBA初心者さんのおっしゃるDo〜Loopでも可能だと思います。

うまくいかなかったというのは具体的にどのようにうまくいかなかったのでしょうか?


ぼーちゃん  2006-11-30 18:45:14  No: 134385

試してみました。

  For myMdate = 5 To ws1.Range("C65536").End(xlUp).Row
を下記に変えてみてください。
  For myMdate = 5 To ws1.Range("D65536").End(xlUp).Row

これでどうでしょう?


LESIA  2006-11-30 20:07:26  No: 134386

C列が空文字の場合に処理するようになっているので、
最終行の取得にC列を使うのは、おかしかったですね。

シートの構成がよくわからないのですが、A列とB列はどうなっているのでしょうか?
A列には、最終行まで必ず値が入っているなら
For myMdate = 5 To ws1.Range("A65536").End(xlUp).Row
でも、いいかもしれません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加