質問です

c:\test\のフォルダーの中にデータCSVファイルが複数あります
データはA列の1行目からです
aaa@ezweb.ne.jp
bbb@docomo.ne.jp
ccc@yahoo.co.jp
c:\test\のフォルダー以外の参照ファイルのsheet2のA列1行目から
ezweb.ne.jp
docomo.ne.jp
のドメイン文字が複数あります
参照ファイルのsheet2にあるドメインと同じドメインがあれば
c:\test\フォルダーにあるファイルのデータの同じ行のC列に参照のドメイン文字だけを
表示させるマクロをお願いします
答え
A列             C列
aaa@ezweb.ne.jp    ezweb.ne.jp
bbb@docomo.ne.jp   docomo.ne.jp
ccc@yahoo.co.jp
bbb@docomo.ne.jp   docomo.ne.jp
 

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

ベストアンサー

id:TransFreeBSD No.1

回答回数668ベストアンサー獲得回数268

ポイント100pt

上書き保存します。

保存しないなら.Close SaveChanges:=Trueをコメントアウトしてください。

エクセルブックで保存するならすべてのコメントアウトを戻してください。

式のまま保存するなら'.Value = .Valueだけをコメントアウトしてください。

Sub Macro1()
    Const refer = "C:\参照ファイル.xlsx"
    Const path = "C:\temp"
    Const fileExp = ".csv"
    'Const saveExp = ".xlsx"
    'Const saveType = xlExcel8
    Dim ref_wb, f, i
    Set ref_wb = Workbooks.Open(refer)
    For Each f In CreateObject("Scripting.FileSystemObject").GetFolder(path).Files
        If (Right(f.Name, Len(fileExp)) = fileExp) Then
            With Workbooks.Open(f.path)
                .Activate
                For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
                    With Cells(i, "C")
                        .Formula = "=IF(ISERROR(VLOOKUP(RIGHT(A" & i & ",LEN(A" & i & ")-FIND(""@"",A" & i & ")),'[" & ref_wb.Name & "]sheet2'!$A:$A,1,FALSE)),"""",RIGHT(A" & i & ",LEN(A" & i & ")-FIND(""@"",A" & i & ")))"
                        '.Value = .Value
                    End With
                Next i
                '.SaveAs Filename:=Left(f.Name, Len(f.Name) - Len(fileExp)) & saveExp, FileFormat:=saveType
                .Close SaveChanges:=True
            End With
        End If
    Next
    ref_wb.Close
End Sub

[追記]変数名とパス名をすこし変更しました。

id:inosisi4141

ありがとうございます

1度上手くいったんですが

2度目からマクロ実行すると「ファイルが開いています」のメッセージがでて

その先に進まないです。

2011/06/25 18:44:41
  • id:TransFreeBSD
    どういう状況ででしょう?
    私の所だと何度でも実行できます。
    参照ファイルやCSVファイル、同名のファイルが開かれていたりしませんか?
    対象のファイルを開ける状況にしてください。
  • id:inosisi4141
    ありがとうございます。
    原因は参照ファイルからマクロを実行していました
    あくまで参照ファイルは参照するためのファイルでマクロ実行用ではなく
    実行用は新規にエクセルを立ち上げて実行用ファイルとしなければいけないと判りました。

    質問の追加てすが再度質問をあげますのでよろしくお願いします。
  • id:TransFreeBSD
    そういわれれば、参照ファイルにマクロをおいた方が合理的ですね。
    参照ファイルはいじらない前提で作ってました。
    「Set ref_wb = Workbooks.Open(refer)」と「ref_wb.Close」をコメントアウトすればエラーが出なくなる気がします。

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

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

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

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