質問です

c\test\のホルダー中にcsvファイルが複数あります
そのファイルの中のデータからメールアドレスの列のみをA列に置きそれ以外は削除する
列は多くて10列位です。文字列と数字の列です。途中に空白行がある場合のあります
マクロをお願いします。
データは2行目からですが移動する行は1行目からお願いします。
メールアドレスの列はA列からE列のいづれかに1列のみあります
abcde@docomo.ne.jpやacb@ezweb.ne.joなど必ず@マークは入っています
答え 以下のようにA列にメールアドレスの列を持ってくる
A列以外は削除する
A列
メールアドレス
abcde@docomo.ne.jp
abc@ezweb.ne.jp
よろしくマクロをお願いします。
列の数が固定されたほうが良い場合は決めますので質問ください

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2011/06/23 14:44:30
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント50pt
Sub main()
Dim p As String
'対象フォルダを指定してください。
'このフォルダに この実行用のブックは 入れないでください。

p = "C:\test\"

'処理対象となる拡張子を指定して 呼び出します。
Call jikkou(p, "csv")

End Sub


Sub jikkou(p As String, s As String)

Dim bk As Workbook
Application.DisplayAlerts = False
    
f = Dir(p & "*." & s, vbNormal)

Do While f <> ""
    Set w = Workbooks.Open(Filename:=p & f, UpdateLinks:=False, ReadOnly:=False)
    '処理対象は 1番目のシートのみ。
    
    With w.Sheets(1)
        
        kg = 1          '開始する行
        
        .Columns("A:A").Insert Shift:=xlToRight

        r = .Range("A1").SpecialCells(xlLastCell).Row
        c = .Range("A1").SpecialCells(xlLastCell).Column

        For b = 2 To c
            For d = 2 To r
                If InStr(1, .Cells(d, b), "@") > 0 Then
                    .Cells(kg, "A") = .Cells(d, b)
                    kg = kg + 1
                End If
            Next d
        Next b
        
        .Range(.Cells(1, 2), .Cells(r, c)).Delete Shift:=xlToLeft

    End With
         
    w.Save
    w.Close
    f = Dir
Loop

Application.DisplayAlerts = True

End Sub

id:inosisi4141

ありがとうございます

こちらのメールデータの制度の都合で不敵格のデータが混じっていますので

エラーがでて止まるケースがあります。

今回はメール修正は最後にやるつもりです

できましたら

2行目以降10行目位のチェックでメールアドレスの列と判断してコピーするマクロ

指示はできますか。

こちらの勝手で申し訳ございません

よろしくおねがいします。

2011/06/22 17:32:05

その他の回答1件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198ここでベストアンサー

ポイント50pt
Sub main()
Dim p As String
'対象フォルダを指定してください。
'このフォルダに この実行用のブックは 入れないでください。

p = "C:\test\"

'処理対象となる拡張子を指定して 呼び出します。
Call jikkou(p, "csv")

End Sub


Sub jikkou(p As String, s As String)

Dim bk As Workbook
Application.DisplayAlerts = False
    
f = Dir(p & "*." & s, vbNormal)

Do While f <> ""
    Set w = Workbooks.Open(Filename:=p & f, UpdateLinks:=False, ReadOnly:=False)
    '処理対象は 1番目のシートのみ。
    
    With w.Sheets(1)
        
        kg = 1          '開始する行
        
        .Columns("A:A").Insert Shift:=xlToRight

        r = .Range("A1").SpecialCells(xlLastCell).Row
        c = .Range("A1").SpecialCells(xlLastCell).Column

        For b = 2 To c
            For d = 2 To r
                If InStr(1, .Cells(d, b), "@") > 0 Then
                    .Cells(kg, "A") = .Cells(d, b)
                    kg = kg + 1
                End If
            Next d
        Next b
        
        .Range(.Cells(1, 2), .Cells(r, c)).Delete Shift:=xlToLeft

    End With
         
    w.Save
    w.Close
    f = Dir
Loop

Application.DisplayAlerts = True

End Sub

id:inosisi4141

ありがとうございます

こちらのメールデータの制度の都合で不敵格のデータが混じっていますので

エラーがでて止まるケースがあります。

今回はメール修正は最後にやるつもりです

できましたら

2行目以降10行目位のチェックでメールアドレスの列と判断してコピーするマクロ

指示はできますか。

こちらの勝手で申し訳ございません

よろしくおねがいします。

2011/06/22 17:32:05
id:taknt No.2

回答回数13539ベストアンサー獲得回数1198

ポイント50pt

For d = 2 To r

が r の行(データの最後の行)まで やるようにしていますので

これを

For d = 2 To 10

に変えれば 2行目から10行目までとなります。

  • id:taknt
    プログラムがエラーが出てとまっちゃうんですか?
  • id:inosisi4141
    はいエラー状況はのちほどケース別に症状を報告します。

    チェック箇所を10行にするとコピーするデータも10行になります

    コピーするデータは列単位で移動できませんか

    よろしくお願いします
  • id:taknt
    >チェック箇所を10行にするとコピーするデータも10行になります

    10行ですが、何列にもありますと その列分 行が増えます。

    >コピーするデータは列単位で移動できませんか
    列単位です。


    >こちらのメールデータの制度の都合で不敵格のデータが混じっていますので
    >エラーがでて止まるケースがあります。

    どういうデーターでどのようなエラーでしょうか?
    差し障りのない範囲で 教えてください。
  • id:inosisi4141
    takntさん
    すみませんです今のところ問題なさそうです
    ありがとうございました
  • id:inosisi4141
    takntさん
    エラーの件ですが

    「型が一致しません」というメッセージがでます

    このCSVデータを一度TeraPadに貼りつけてそれを元のCSVデータを削除して
    その上からテキスト貼りつけで戻したcsvでやるとうまくゆきます。

    なにが原因ですかわかりますか

    この現象は以前の日付別データを作成するマクロにもあります。
  • id:inosisi4141
    takntさん
    エラーは全部ではありません一部です。
  • id:inosisi4141
    takntさん
    削除するほかの列の行が途中までしか無い場合も
    「型が一致しません」というメッセージで止まります
  • id:inosisi4141
    takntさん
    削除するほかの列の行が途中までしか無い場合も
    「型が一致しません」というメッセージで止まります

    「削除するほかの列の行が途中までしか無い場合」
    原因のこれは間違いでした

    メールアドレスの中に
    #NAME?
    のエラーがある場合にとまります

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません