人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

質問です
添付のマクロを参照して
マクロ実行用エクセルにsheet1からn個の複数SheetにデータがA列からT列まで
ありますデータは1行目からです
A列を対象キーとします重複はありませんA列のデータは文字列です

C:\test\のホルダーにCSVファイルが1個あります
A列からT列まで1行目からデータがあります、B列は空白です

A列を対象キーとします重複はありませんA列のデータは文字列です

このA列のデータと同じものが実行用データの複数sheetのA列に無い場合は
CSVファイルのB列に1をつけます、あれば空白で可(重複データと判断)

処理速度はできるだけ早くおねがいします。
以上の作業をマクロでお願いします
よろしくお願いします

1349841076
●拡大する

●質問者: inosisi
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● きゃづみぃ
●200ポイント ベストアンサー
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 String
Application.DisplayAlerts = False
 
f = Dir(p & "*." & s, vbNormal)

Do While f <> ""
 k = 0
 ReDim bk(k)
 
 ch1 = FreeFile
 Open p & f For Input As #ch1
 
 Do While Not EOF(ch1)  'ファイルの終端かどうかを確認します
 Line Input #ch1, textline  'データ行を読み込みます
 ReDim Preserve bk(k)
 bk(k) = textline
 k = k + 1
 Loop
 Close #ch1
 
 ch2 = FreeFile
 Open p & f For Output As #ch2
 For i = 0 To k - 1
 textline = bk(i)
 dflg = 1
 ターゲット = ""
 If Left(textline, 1) = """" Then
 csvget = InStr(1, textline, """,")
 dflg = 0
 If csvget > 0 Then
 ターゲット = Right(Left(textline, csvget - 1), csvget - 1)
 End If
 Else
 csvget = InStr(1, textline, ",")
 If csvget > 0 Then
 ターゲット = Left(textline, csvget - 1)
 End If
 End If
 
 If ターゲット <> "" Then
 For Each sh In ThisWorkbook.Worksheets
 cnt = WorksheetFunction.CountIf(sh.Range("A:A"), ターゲット)
 If cnt > 0 Then Exit For
 Next sh
 
 If cnt = 0 Then
 If dflg = 0 Then
 bb = Right(textline, Len(textline) - csvget - 1)
 bc = InStr(1, bb, ",")
 textline = Left(textline, csvget + 1) & "1" & Right(bb, Len(bb) - bc + 1)
 Else
 bb = Right(textline, Len(textline) - csvget)
 bc = InStr(1, bb, ",")
 textline = Left(textline, csvget) & "1" & Right(bb, Len(bb) - bc + 1)
 End If
 End If
 
 End If
 
 Print #ch2, textline  'データの書き込みをします
 Next i
 Close #ch2
 
 f = Dir
Loop

Application.DisplayAlerts = True

End Sub

csvファイルは、フォルダ内にあるものすべて処理します。

重複ありの場合は、元のままで何もしていません。
重複なしの場合のみ1をセットしています。


inosisiさんのコメント
ありがとうございます うまくいきました 速度が課題です 質問ですが 可能であれば質問を上げます 実行用sheet1に対象データを置いて参照データをsheet2、sheet3、sheet4 以降に置いたマクロの場合は速度は今より早くなりますか?

きゃづみぃさんのコメント
どこにおいても関係ないです。 CSVの内容で 最初の項目に "を含んでいないならば もう少し 速くなるかもしれませんが・・・。

inosisiさんのコメント
ありがとうございます CSVの内容で最初の項目(1行目)に”が含まない項目をあらかじめ作っておいて その下2行目から対象データをセットしてマクロを実行することで良いでしょうか

きゃづみぃさんのコメント
その下2行目以降もすべて 最初の項目に " を 含まないということです。 それで プログラムを 修正して どれぐらい速くなるかですね。 ま、そんなには 速くはならないとは思いますが・・・。 ちなみに 今は 処理時間は どれぐらいかかってますか?
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ