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

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

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

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

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

1337664674
●拡大する

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

▽最新の回答へ

1 ● きゃづみぃ
●50ポイント

最初のプログラムが

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



二番目は

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


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


きゃづみぃさんのコメント
ま、どちらかのプログラムに 不具合がある可能性もありますけど。

きゃづみぃさんのコメント
Call Sheets("Sheet1").main こちらで 1がたつべきところが たたないようです。 それで 1のものがないから 全消去となります。

inosisiさんのコメント
遅くなりました マクロを別々に実行するとちゃんと作業ができます mainのマクロで1だけb列に表示され そのあと main1のマクロでB列の1以外を削除する作業ができます 連続マクロでやるとデータが消えてしまいます

2 ● きゃづみぃ
●50ポイント ベストアンサー
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のマクロを修正しました。

関連質問

●質問をもっと探す●



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