1337664674 質問です

二つのマクロを連続して実行するため下記のマクロを作成して
実行しましたがエラーになります
正しいマクロの方法を教えてください

Sub マクロの実行()
Call Sheets("Sheet1").main
Call Sheets("Sheet2").main1

End Sub
ではエラーになります

マクロは添付ファイルです
main
main1
の順番で実行したいのですが

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/05/22 14:31:14
  • 終了:2012/05/22 17:54:40

ベストアンサー

id:taknt No.2

きゃづみぃ回答回数13538ベストアンサー獲得回数11982012/05/22 15:39:12

ポイント50pt
Option Explicit

Sub main()
    Const path = "\test"
    Const grab = "*.csv"
    Const keyCol = 1 ' column A
    Const countCol = 2 ' column B
    Dim dict As Object
    Dim file As String
    Dim last As Long
    Dim i As Long
    Set dict = CreateObject("Scripting.Dictionary")

    file = Dir(path & "\" & grab, vbNormal)
    Do While file <> ""
        dict.RemoveAll
        With Workbooks.Open(path & "\" & file)
            last = .Sheets(1).Cells(Rows.Count, keyCol).End(xlUp).Row
            For i = 1 To last
                dict.Item(.Sheets(1).Cells(i, keyCol).Value) = dict.Item(.Sheets(1).Cells(i, keyCol).Value) + 1
            Next
            For i = 1 To last
                If dict.Item(.Sheets(1).Cells(i, keyCol).Value) = 1 Then
                    .Sheets(1).Cells(i, countCol).Value = 1
                End If
            Next
            .Close SaveChanges:=True
        End With
        file = Dir
    Loop
End Sub


Call Sheets("Sheet1").mainのマクロを修正しました。

その他の回答(1件)

id:taknt No.1

きゃづみぃ回答回数13538ベストアンサー獲得回数11982012/05/22 15:20:05

ポイント50pt

最初のプログラムが

A列のA1からAnの複数文字列データをチェックしてB列にその重複個数1の数字だけを書き出すマクロ



二番目は

マクロ作業はB列にある数字の1以外のデータをA列データから削除するそしてB列の数字1を削除する作業です


ということで データが消えてしまったということは 重複していないものが なかったということになると思われますが、いかがでしょうか?

他1件のコメントを見る
id:taknt

Call Sheets("Sheet1").main

こちらで 1がたつべきところが たたないようです。
それで 1のものがないから 全消去となります。

2012/05/22 15:32:51
id:inosisi4141

遅くなりました
マクロを別々に実行するとちゃんと作業ができます
mainのマクロで1だけb列に表示され
そのあと
main1のマクロでB列の1以外を削除する作業ができます

連続マクロでやるとデータが消えてしまいます

2012/05/22 17:45:04
id:taknt No.2

きゃづみぃ回答回数13538ベストアンサー獲得回数11982012/05/22 15:39:12ここでベストアンサー

ポイント50pt
Option Explicit

Sub main()
    Const path = "\test"
    Const grab = "*.csv"
    Const keyCol = 1 ' column A
    Const countCol = 2 ' column B
    Dim dict As Object
    Dim file As String
    Dim last As Long
    Dim i As Long
    Set dict = CreateObject("Scripting.Dictionary")

    file = Dir(path & "\" & grab, vbNormal)
    Do While file <> ""
        dict.RemoveAll
        With Workbooks.Open(path & "\" & file)
            last = .Sheets(1).Cells(Rows.Count, keyCol).End(xlUp).Row
            For i = 1 To last
                dict.Item(.Sheets(1).Cells(i, keyCol).Value) = dict.Item(.Sheets(1).Cells(i, keyCol).Value) + 1
            Next
            For i = 1 To last
                If dict.Item(.Sheets(1).Cells(i, keyCol).Value) = 1 Then
                    .Sheets(1).Cells(i, countCol).Value = 1
                End If
            Next
            .Close SaveChanges:=True
        End With
        file = Dir
    Loop
End Sub


Call Sheets("Sheet1").mainのマクロを修正しました。

  • id:taknt
    何のエラーになるのかな?
  • id:inosisi4141
    すみません
    実行後ファイルの中のデータがなくなり空になります
  • id:TransFreeBSD
    画像が途中で途切れてますよ。
    あと「ファイル」というのはマクロが書いてあるエクセルファイルの事?CSVファイルの事?
  • id:ken3memo
    Sub main()
    Const path = "\test"

    ↑ドライブ指定していませんが、もしかして、
    Sub Main1()
    'このフォルダに この実行用ブックは入れないでください
    p="C:\test\"

    と言われていたので、つなげた時に、
    この実行用ブックを D:\xxx\xxxx.
    とCドライブ以外にDやEに保存したのでは?

    Dir("\test\*.csv") で ファイルが見つからないので、mainが処理されてないとか?

    と勝手なストーリを作ってみました。
    私の妄想通りなら(素人考えでは)
    Sub main()
    Const path = "c:\test"
    と mainのパス設定で作業ドライブも指定してみては?

    ※テストデータ、本番データを壊さないようにデータの位置に注意して実行してみてください・・・
  • id:taknt
    私の回答では そこは 修正してないですよ。
  • id:TransFreeBSD
    シートのマクロだからCellsがそのシートに固定されて、開いたCSVファイルを編集してないんですね。
    標準モジュールから移したのかな。ありがちと言えばありがち。

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません