以前別のカテゴリで質問したのですが、そちらでは解決出来なかったので、こちらで改めて質問します。
下記のマクロで、一つのブックからSheet1だけをコピーして来て、少し処理をし、元のブックを閉じるというもので、ブックの数は多くて3000程、少ない時は300位です。
で、このマクロだと900位までですと最後まで行くのですが、それを超えるとリストが95位で止まってしまいます。
自宅で別データを作ってやってみるとうまくいきました。
コピー元のブックにはテキストデータのみで、200文字から500文字程度の大きさしかありません。
ファイル名も50文字程度の物を全部20文字程度まで短くしてもみましたが、ダメでした。
どうかお知恵をお貸しください。

Sub ★1★ブックの結合()
Dim sFile As String
Dim sWB As Workbook, dWB As Workbook, aWB As Workbook
Dim dSheetCount As Long
Dim i As Long
Dim SOURCE_DIR As String

'エクセルデータに変換されたファイルのあるフォルダを選択します。
MsgBox "エクセルに変換されたデータのフォルダを選択"
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
SOURCE_DIR = .SelectedItems(1) & "\"
End If
End With

Application.ScreenUpdating = False

'指定したフォルダ内にあるブックのファイル名を取得
sFile = Dir(SOURCE_DIR & "*.xls")

'フォルダ内にブックが無ければ終了
If sFile = "" Then Exit Sub

'集約用ブックを作成
Set dWB = Workbooks.Add

'転記マクロの中のDMリストシートをコピーする
Workbooks("転記用マクロ.xlsm").Worksheets("DMリスト").Copy Before:=dWB.Worksheets("Sheet1")
Application.DisplayAlerts = False
Worksheets(Array("Sheet1", "sheet2", "sheet3")).Select
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True

'集約用ブック作成時のシート数を取得
dSheetCount = dWB.Worksheets.Count

Do
'コピー元のブックを開く
Set sWB = Workbooks.Open(Filename:=SOURCE_DIR & sFile)

'コピー元のsheet1を集約用ブックにコピー
sWB.Worksheets("sheet1").Copy After:=dWB.Worksheets(dWB.Sheets.Count)

シート転記

'コピー元ファイルを閉じる
Application.DisplayAlerts = False
sWB.Close
Application.DisplayAlerts = True

'セルA2の名前を変更する


'シート名をセルA2の値に変更
'ActiveSheet.Name = Range("A2").Value


'次のブックのファイル名を取得
sFile = Dir()
Loop While sFile <> ""

'集約用ブックを保存する
'dWB.SaveAs Filename:=DEST_FILE


Application.ScreenUpdating = False


End Sub

このQ&Aに関連する最新のQ&A

A 回答 (5件)

http://oshiete.goo.ne.jp/qa/8750372.html


例えば、30ファイルあっても10ファイルしか読み込まれない事があり、
エラーメッセージもない、何事もなく終了するが10ファイルしか処理されていない、
常に発生する訳ではなく、マシンが変われば同じデータでもOKだったり、
データが少し変わればOKだったりする。
なので、昨日までOKだったのに、今日データが変わった為、急にダメになったりする。
もし、10ファイル目で発生した場合、何度実行しても必ず、10ファイル目までしか処理されない。
そのファイルがおかしいかと思い、その前後の2~3ファイルを削除しても、
やっぱり、10ファイル目(さっきとは違うファイル)までしか処理されない、
という恐ろしいバグがExcel VBAにありますが、それじゃないですかね?

While文などのループの中に、ワークブックのオープンがあると、
何度目かでオープンが実行されず、エラーなしでスルンと終わります。

回避方法は、Open 文の前に DoEvets の1行を書く事。
だいたいこれで直りますが、これで直らなかったマクロもあったので、
Open 文の後ろにも DoEvets の1行を書いて、前後を DoEvets ではさむと直りました。
安全(?)の為、前後をはさんでおいた方が良いと思います。

こんな感じ:
DoEvents
Workbooks.Open aaa
DoEvents

かなり前(1年くらい?)にハマりググりまくったところ、ほとんど情報はなかったですが、
1人だけ、自分の質問に「直った」と自己回答している方がいて、Open文の前にDoEvetsをつけたら直ったそうです。
半信半疑で真似たら私も直りました。
何故、これで直るのかはわかりませんが、DoEvetsを外すと見事に再現し、DoEvetsではさむとピタッと直ります。

ググりまくった際、とても情報が少なく、こんなに顕著に再現するのに、
何故、情報が少ないのかは不思議に思いました。
    • good
    • 14
この回答へのお礼

ご回答があった中で一番単純そうでしたので、一番初めに試した所、本当に何の問題もなく最後まで処理して完了しました。
1700でも1400でも大丈夫でした!
どこを探しても見つからなかった答えがあっさりと解決しました。
DoEventoの事も全く知らなかったので、勉強になりました。
本当にありがとうございました。

お礼日時:2014/09/18 10:41

こんな事を書くと答えにならないかもしれませんが。


うまくいった時の結果は、シート数が3000枚ですよね。
エクセルのシート最大数はヴァージョンにもよりますが
多くはメモリーで決まるようです。
メモリーなので、貼り付けているシートの内容も影響します。
つまり、やろうとしていることに無理があると思います。

試しに、シートを追加して、内容をコピーするVBAを実行してみましたが
途中途中で挙動不審になり、終了したシートを確認していったら
102枚目に、編集できないシートがありました。

考え方ですが、他のブックの内容を、データとして
一枚のシートへひたすら縦方向へ追加していく方法を検討してみてください。

エクセルでシートを増やしていくデータの管理はパソコンに負担ですし
その手のデータでは集計もグラフも作れないでしょう。
    • good
    • 1
この回答へのお礼

回答をありがとうございました。
このマクロはそのような処理をしながら進んで行くようにしていますが、何故か途中で終わってしまうので、悩んでいました。
また何かありましたらどうぞよろしくお願いします。

お礼日時:2014/09/18 10:35

>何行目で止まるかはわかりません。


>数千のブックがあるのに、出来上がったリストは
>90代程度しか出来ていなくて、エラーも何もなく終わってしまいます。

そもそもプログラムで問題が起きたときにまず最初に確認すべきことは、プログラムが正常終了しているのか異常終了しているのか確認することです。

「Do」の前に
「Debug.Print("ループ開始")」を

「Loop While sFile <> ""」の後ろに
「Debug.Print("ループ終了")」を書いて実行してみてください。

するとイミディエイトウインドウにメッセージが表示されます。
もしも「ループ開始」しか表示されないようであれば処理が途中で止まっているということです。

ループ内でもメッセージを出力する処理を何個所か書いて、どこで終了しているのか特定しましょう。


もしも「ループ終了」が表示されるのなら、おそらく処理は正常終了しています。95ファイル処理して終了するのなら、「対象ファイル」は物理的に95しか存在していないという可能性もあります。

Dirコマンドでオプション無指定で対象になるのは標準ファイルだけです。読み取り専用属性等のファイルは対象になりません。それが原因かもしれません。もしここが原因なら、すべてを標準ファイルにするか、プログラムを以下のように変更してみるといいと思います。

「sFile = Dir(SOURCE_DIR & "*.xls", 1)」とか
「sFile = Dir(SOURCE_DIR & "*.xls", 3)」とか。
    • good
    • 0
この回答へのお礼

丁寧なご回答をありがとうございました。
回答をいただいた中で、簡単な物から試してみましたら、他の方の回答であっさりと解決してしまいました。
また躓きましたらこちらも次回参考にさせていただきますね。
どうぞ今後ともよろしくお願いします。

お礼日時:2014/09/18 10:43

前の質問へのリンクですね。


何らかの経過があるならば、と思ったので。

何とも不思議な状態ですね。
時間がかかっても
> Application.ScreenUpdating = False
はコメントアウトしておくとか。

上手く行かない時、他のウインドウ操作したりせずに、じっと待つ。
そのためにはスクリーンセイバー・省電力は解除

> 'コピー元ファイルを閉じる
> Application.DisplayAlerts = False
> sWB.Close
> Application.DisplayAlerts = True
クローズした後
'コピー元ファイルを閉じる
Application.DisplayAlerts = False
sWB.Close
Set sWB = Nothing ’追加してみるとどうなります?
Application.DisplayAlerts = True



あと、気になったのがココ
> '集約用ブックを保存する
> 'dWB.SaveAs Filename:=DEST_FILE
本番ではコメントアウトを解除してありますか?
    • good
    • 0
この回答へのお礼

素早いご回答をありがとうございました。
確かに一連の経過がありました。質問が杜撰で申し訳ありませんでした。
今後は過去の質問とのリンクも合わせて投稿させていただきます。
他の方の回答で解決しましたので、また躓いた時に参考にさせて下さい。
本当にありがとうございました。

お礼日時:2014/09/18 10:47

> それを超えるとリストが9 5位で止まってしまいます。


「どこの行で」「どう」止まる?
・エラーメッセージは出ますか?出るなら何と書いてますか?どこの行ですか?
・何もエラーは出ないが目的の結果が得られない?

> 自宅で別データを作ってやってみるとうまくいきました。
・データによって、うまく行く/行かないがあるなら、両方で同じデータを用いることができますか?

続きの質問なら、せめてアンカーを付けてはどうでしょう?

この回答への補足

早速ありがとうございます。
アンカーなるものがちょっとわからないのですが、以前した質問へのリンクということでしょうか?
その時の質問はレスが付かなかったため、削除しました。

何行目で止まるかはわかりません。
数千のブックがあるのに、出来上がったリストは90代程度しか出来ていなくて、エラーも何もなく終わってしまいます。
大体いつも同じ位の所で終わるようですが、200位の時でも最後までリストを作ってくれることもあります。
自宅にデータを持って帰ることは出来ないので、大体似たような物を作り、コピーしてきた後の動きも少し単純にしています。
ですが以前、シートをコピーした後の動きをつけずに、ただひたすらシートをコピーしてくるだけのものを作ってみたのですが、その時も同じように90過ぎ位で終了してしまいました。
データが大きくなってしまうのが原因かと思い、いっそのことコピーした後の動きを一緒にして、データが大きくならないようにしてみたのですが、やっぱり同じことでした。

補足日時:2014/09/11 20:36
    • good
    • 0
この回答へのお礼

大変助かりました。
ありがとうございました。

お礼日時:2014/09/18 10:47

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル(マクロ記録)

よろしくお願いします。
エクセルで、印刷マクロを作ろうと考えています。
             (基本、入門者です)
マクロ記録で、作っていますが、
記録終了するたびに「 印刷 」がかかっては、
用紙が何枚あっても足りません。

いい考えがありましたら、お教えください。
お願いします。

Aベストアンサー

#3の回答者です。

>出来たら、この i=1 の意味を教えていただけませんでしょうか?
単に、それはページ数です。

ヘルプを引用します。(PrintOut で調べました)

式.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName, IgnorePrintAreas)

From オプション 印刷を開始するページの番号を指定します。この引数を省略すると、最初のページから印刷します。
To オプション 印刷を終了するページの番号を指定します。この引数を省略すると、最後のページまで印刷します。

と出てきます。

QVBAで別シートの文字を別シートにコピーした際に空欄は空欄のままの処理

お世話になっております。
別シートの文字を別シートに入力する際に空白のセルはそのまま空白にする処理についてご教示をお願い致します。
sheet1、C2からC11まで従業員の氏名が入力されております。
これをsheet2、B5からB14までコピーするプログラムをサイトを参考に作りました。
Sub test()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("sheet1")
Set sh2 = Worksheets("sheet2")
sh2.Range("B5:B14").Value = sh1.Range("C2:C11").Value
End Sub

これで入力出来る様にはなったのですが、sheet2の従業員のセルを削除した際に、ここで同様にsheet1の従業員の氏名も消します。
このプログラムですとsheet2の氏名セルを削除致しますと下にある違うデータが入力されているセルが上に上がり上記のプログラムを実行しますと消したくないデータセルまで白くなってしまいます。
セルを結合しているセルなどがありそのセルがこの範囲に入ると白くなります。
上記のプログラムですと当然の結果だと思うのですが、これを消さない方法のプログラムを教えて欲しい内容になります。

よろしくお願い致します。

お世話になっております。
別シートの文字を別シートに入力する際に空白のセルはそのまま空白にする処理についてご教示をお願い致します。
sheet1、C2からC11まで従業員の氏名が入力されております。
これをsheet2、B5からB14までコピーするプログラムをサイトを参考に作りました。
Sub test()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("sheet1")
Set sh2 = Worksheets("sheet2")
sh2.Range("B5:B14").Value = sh1.Range("C2:C11").Value
End Sub

これで入力出来る様にはな...続きを読む

Aベストアンサー

実行行は以下で良いかと思います。
結構厄介ですが、上手く行くと思います。


'Sheet1のC2以下の有効最終行を求める
END11 = Sh1.Range("C2").End(xlDown).Row
'Sheet1のC2~有効最終行までの行数を求める
行数 = END11 - Sh1.Range("C2").Row + 1

'Sheet2のB5以降の有効最終行を求める
END21 = Sh2.Range("B5").End(xlDown).Row

'Sheet2のB5~有効最終行を一旦削除
Sh2.Range("5:" & END21).Delete

'Sheet2のB5以降に行を追加しながら転送

For i = 1 To 行数

Sh2.Range("B" & 5 + i - 1).EntireRow.Insert
Sh2.Range("B" & 5 + i - 1).Value = Sh1.Range("C" & 2 + i - 1).Value

Next i

実行行は以下で良いかと思います。
結構厄介ですが、上手く行くと思います。


'Sheet1のC2以下の有効最終行を求める
END11 = Sh1.Range("C2").End(xlDown).Row
'Sheet1のC2~有効最終行までの行数を求める
行数 = END11 - Sh1.Range("C2").Row + 1

'Sheet2のB5以降の有効最終行を求める
END21 = Sh2.Range("B5").End(xlDown).Row

'Sheet2のB5~有効最終行を一旦削除
Sh2.Range("5:" & END21).Delete

'Sheet2のB5以降に行を追加しながら転送

For i = 1 T...続きを読む

Qエクセル マクロコードの記述の勉強

独学でエクセルでのマクロのコード記述ができるようになりたいのですが、コードがかける人はどのようにしてかけるようになったのでしょうか?

プログラミング関係にはまったくの初心者なので、入門本を立ち読み程度読んでみたのですが、「面白そうだが、かなり手強そう」というような印象でした。

現実的な問題として、実際にコードをかける人は、プログラミング関係の学校等で学んだ人ぐらいしかいないのでしょうか?

めざすレベルはエクセルでこうしたいと考えたものを調べながらコードをかける程度のレベルです。

Aベストアンサー

> 実際にコードをかける人は、プログラミング関係の
> 学校等で学んだ人ぐらいしかいないのでしょうか?

そんな事ないです。私も独学で覚えましたから。

エクセルはマクロ記録がありますので、実際の操作を記録して書かれたコードを追っていったり、書き直したり出来ます。
VisualBasicEditor画面でコードにカーソルを置き、F1キーを押すとVBAヘルプ(たしか標準ではインストールされないので追加インストールの必要がある)が開くので、意味を調べたり、サンプルコードを見たりして覚えて行きました。
ネットにも沢山サンプルがありますし。

変数の使い方とforやif等を覚えてマクロ記録を直すだけでも結構便利になります。

QエクセルVBA Dir途中で止まる

DirとWorkbooks.OpenTextを併用し、大量のファイルの開閉をしてます。
ファイル数2千。ファイルの行数は5千行程度。CSVファイル。
出だしは快調で10ファイル/秒程度の速さですが、だんだん遅くなり、1ファイル/5秒程度になり、ついに固まります。最初は問題ありませんでしたが、毎日処理を続け1か月目あたりから発生してます。固まるまでの処理数は、1000~500ファイル程度。

単にファイルの開閉だけなのに止まります。なぜでしょう?

Sub Macro()

TwbPath = ThisWorkbook.Path
Folder = Cells(1, "A").Value
buf = Dir(TwbPath & "\" & Folder & "\*.dat")
Do While buf <> ""
   Application.ScreenUpdating = False
Workbooks.OpenText Filename:=TwbPath & "\" & Folder & "\" & buf, Comma:=True
Application.DisplayAlerts = False
Workbooks(buf).Close savechanges:=False
Application.DisplayAlerts = True
buf = Dir()
  Application.ScreenUpdating = True
Loop

End Sub

DirとWorkbooks.OpenTextを併用し、大量のファイルの開閉をしてます。
ファイル数2千。ファイルの行数は5千行程度。CSVファイル。
出だしは快調で10ファイル/秒程度の速さですが、だんだん遅くなり、1ファイル/5秒程度になり、ついに固まります。最初は問題ありませんでしたが、毎日処理を続け1か月目あたりから発生してます。固まるまでの処理数は、1000~500ファイル程度。

単にファイルの開閉だけなのに止まります。なぜでしょう?

Sub Macro()

TwbPath = ThisWorkbook.Path
Fol...続きを読む

Aベストアンサー

こんにちわ

原因は、エクセルでのオーブン・クローズの繰り返しにあると思います。
バイナリで読み込んだらどうなるか
下のコードで試してください。


Sub MacroReadFile_InputB()
Dim THisBookPath As String, fName As String
Dim intFF As Long, xFolder As String
Dim FullFilePass As String
Dim ByteSjis, strUnicode, valArray
Dim iRow As Long

Application.ScreenUpdating = False
THisBookPath = ThisWorkbook.Path
xFolder = Cells(1, "A").Value


fName = Dir(THisBookPath & "\" & xFolder & "\*.csv")
Do While fName <> ""
intFF = FreeFile
FullFilePass = THisBookPath & "\" & xFolder & "\" & fName
Open FullFilePass For Input As #intFF
ByteSjis = InputB(FileLen(FullFilePass), #intFF) 'SJISのテキスト読み込み
Close #intFF


strUnicode = StrConv(ByteSjis, vbUnicode) 'SJISからUNICODEへ
valArray = Split(strUnicode, vbCrLf) '改行コードごとに区切って配列化 '
iRow = UBound(valArray) '行数取得

fName = Dir()
Loop


Debug.Print strUnicode
Application.ScreenUpdating = True
End Sub

こんにちわ

原因は、エクセルでのオーブン・クローズの繰り返しにあると思います。
バイナリで読み込んだらどうなるか
下のコードで試してください。


Sub MacroReadFile_InputB()
Dim THisBookPath As String, fName As String
Dim intFF As Long, xFolder As String
Dim FullFilePass As String
Dim ByteSjis, strUnicode, valArray
Dim iRow As Long

Application.ScreenUpdating = False
THisBookPath = ThisWorkbook.Path
xFolder = Cells(1, "A").Value


fNa...続きを読む

Qエクセルについているマクロが出てこない・・・

 エクセルをひらき、ツール→マクロ→マクロでマクロの作成ができると聞きましたが、私のエクセル2002ではマクロのその機能が空欄状態です。復帰や回復できる方法を教えて下さい。

Aベストアンサー

(1)自分でマクロの記録を採る。
    ツールーマクロー新しいマクロの記録
(2)または他人がマクロの記録をとった。
   (3)他人がVBAコード(プログラム)を組んだ
    ツールーマクローVBEープログラム作成
場合に出てくる。(1)(2)(3)ともやっていないから、出てこないのは当然。
(1)なぞはマクロの画面でマクロー編集でコードが見れます。
ーーー
本でもWEBでも、マクロに関する本1冊か、「エクセル マクロ」でWEB照会して、勉強し。予備知識をえるべきです。

QVBAで巨大なファイルの途中からの読み込み

こんにちは。
EXCELのVBAにて巨大なファイルのデータを途中から読み込む方法がございましたらご教授いただきたいと思っています。

具体的には300万行ほどのCSVデータがありまして
たとえば、50万行目のデータを読み込みたい場合下記のようにすることにより、データの取得は可能なのですが、50万行目までSKIPするのに数秒の時間がかかってしまいます。いきなり50万行目からのデータを取得するようなスマートな方法は存在するのでしょうか。

よろしくお願いいたします。

Const ForReading = 1, ForWriting = 2, ForAppending = 3
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("C:\tmp.csv", ForReading, 0)

For w = 0 To 500000
f.skipline
Next

Debug.Print f.readline

f.Close

こんにちは。
EXCELのVBAにて巨大なファイルのデータを途中から読み込む方法がございましたらご教授いただきたいと思っています。

具体的には300万行ほどのCSVデータがありまして
たとえば、50万行目のデータを読み込みたい場合下記のようにすることにより、データの取得は可能なのですが、50万行目までSKIPするのに数秒の時間がかかってしまいます。いきなり50万行目からのデータを取得するようなスマートな方法は存在するのでしょうか。

よろしくお願いいたします。

Const ForReading = 1, ForWr...続きを読む

Aベストアンサー

項目1 連番
項目2 名前
項目3 住所
3列の300万行データなら




'=========================
myDIR = "c:\happy"
myCSV = "ADO_EXCEL.csv"
mySQL = "SELECT * FROM " & myCSV & " WHERE 連番='500000'"
'=========================

Set myDB = CreateObject("ADODB.Connection")
myDB.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
"DBQ=" & myDIR & ";" & "ReadOnly=1"
Set myRS = myDB.Execute(mySQL)
Do Until myRS.Eof = True
Msgbox "項目1 連番 :" & myRS(0)
Msgbox "項目2 名前 :" & myRS(1)
Msgbox "項目3 住所 :" & myRS(2)
myRS.MoveNext
Loop
myRS.Close : myDB.Close : Set myRS = Nothing : Set myDB = Nothing


http://www.jtw.zaq.ne.jp/kayakaya/new/kihon/text/db_sql_kihon.htm
http://itpro.nikkeibp.co.jp/article/COLUMN/20070529/272836/
http://itpro.nikkeibp.co.jp/article/lecture/20061211/256500/
Excelで扱うことができる限界は 
シートの行数が決めるのではありません
使う人の知識がExcelでできることを決定します
Excel2000でも100万件データを扱うことはできます
シートを使わずデータ処理を行うブックもあります
質問者は シートの行数を問題にしていません
シーケンシャルであることも条件にしていません 
できる できない は知識によって違います
最短 最適 は別の条件もあります

項目1 連番
項目2 名前
項目3 住所
3列の300万行データなら




'=========================
myDIR = "c:\happy"
myCSV = "ADO_EXCEL.csv"
mySQL = "SELECT * FROM " & myCSV & " WHERE 連番='500000'"
'=========================

Set myDB = CreateObject("ADODB.Connection")
myDB.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
"DBQ=" & myDIR & ";" & "ReadOnly=1"
Set myRS = myDB.Execute(mySQL)
Do Until myRS.Eof = True
Msgbox "項目1 連番 :" ...続きを読む

Qエクセル2010で作成したマクロ

エクセル2010で作成したマクロブックがあります。
このエクセルを知人にメールで送りました。

知人のエクセルは2007です。
マクロブックのフォームボタンを押しても何も動作しない状況との事です。

エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

素人の質問で申し訳ありませんが、ご指導お願いいたします。

Aベストアンサー

>エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

ご相談の状況からすると、まずそういう事はありません。
まぁ2010でしか動かない内容であなたがマクロを作成した可能性は確かにありますが、その場合でも「何も動作しない」という事はありません。ふつーにエラーが出て止まります。



一応あなたの側で確認しておくべきポイントとしては、
○間違ったブックを送っていないか再確認する
 ・ちゃんとマクロを付けたブックを送ったか確認する
 ・名前を付けて保存でファイルの形式をマクロ有効ブックにして保存したのを送ったか再確認する
といったところをよく確認してください


先方に対してあなたが確認すべきポイントとしては、
○「何も起こらない」とは、具体的にどんな状況なのか再確認する
 ・ホントにうんともすんとも反応が無いということなのか
 ・実は何かエラーメッセージっぽいダイアログが現れて、OKをクリックしてもマクロが動作した様子が無いとかの状況では無かったか



具体的な状況が明らかになったら、ようやく対処を検討する事ができるようになります。
●そもそもどういうマクロを作成したのか、ご自分の作成したマクロをよく確認して、「反応が現れない」マクロを書いてたんじゃないのか再確認する
 たとえば無意味にon error resume nextのような仕込みをしてたりしないか
 たとえば不適切なデータに対して何も作動せずに終わってしまうようなそもそも作りにしてたんじゃないか
 とか。

●実は何かダイアログが出てたのなら、具体的にどんなダイアログなのか正確に聞き取って、あなたの方で対処を考える
 「マクロが無効になってる」のなら、マクロを有効にして実行するように伝える
 とか。

>エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

ご相談の状況からすると、まずそういう事はありません。
まぁ2010でしか動かない内容であなたがマクロを作成した可能性は確かにありますが、その場合でも「何も動作しない」という事はありません。ふつーにエラーが出て止まります。



一応あなたの側で確認しておくべきポイントとしては、
○間違ったブックを送っていないか再確認する
 ・ちゃんとマクロを付けたブックを送ったか確認する
 ・名前を付けて保存でファイル...続きを読む

QVBAで実行時エラー '1004'の解決方法

VBA初心者です。
文字列を置換しようと思い、マクロを記録したところ下記ソースになりました。

Sub Macro1()
Columns("D:D").Select
Selection.Replace What:="エリア:", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub

このマクロを単体で動かすと問題なく動作するのですが、他シートにおいてあるボタンに登録して一番最初に実行すると「実行時エラー '1004'」が出てしまいます。
ネットで色々調べましたが、解決方法が分かりません。
宜しくお願い致します。

Aベストアンサー

#2です
#2の回答は間違いです、すいません
書式に関する引数は、EXCEL2002から追加されていました
私は、EXCEL2000を使用しているため#2でうまく行ったのですが
お詫びに、ちょっと調べてみました
下記のように括弧をつけたら、うまく行く可能性があります
自分のところで、テストできないのであくまで可能性があるだけですが
試してみてください

Sub Macro1()
Columns("D:D").Select
Selection.Replace(What:="エリア:", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False)
End Sub

括弧をつけてボタンに登録してみてください
うまく行かない場合は、ボタンに登録したマクロを提示していただければ
解決しやすいと思います

Qエクセルで作成したマクロが他のシートに反映しない

必要に迫られ始めてマクロをエクセル上で作成してみました。(初心者)
そのマクロを違うエクセルファイル上でも反映させたいのですが
マクロを作ったおおもと(最初)のファイルを閉じてしまうと違うエクセルファイルを開いてもマクロが反映されていません。
マクロでの命令内容としては 
エクセル上の数字の羅列→グラフ作成→上書き保存 という手順で作りました。
他のエクセルファイルも同じように数字の羅列があります。それを同じ作業(グラフ作成→上書き保存)したいのです。
一度作ったマクロを他のエクセルファイルにも反映させるにはどうしたら良いのでしょうか?
説明がわかりにくくてすみません。
よろしくお願いします。

Aベストアンサー

マクロの記録先を「個人用マクロブック」にするのが良いと思います。
一回マクロの記録を行い「保存先」を「個人用マクロブック」にします。するとPERSONAL.XLSという特別なブックが作成されます。

このブックの標準モジュールシートに先に作ったマクロを貼り付けてください。

そうすればエクセルを開くと、どのブックでもマクロが実行可能になります

QエクセルでくんだVBAマクロが途中でとまるのですが、

エクセルでくんだVBAマクロが途中でとまるのですが、
どこがおかしいかご指摘して頂けませんでしょうか?

以下のプログラムは
セル(19.6)にxの値を代入し、
E24にそれに対応したyを出力させるプログラムです。

あと余談となりますが、
繰り返し構文は同時に複数の変数はできないのでしょうか?

例えば以下のものは変数iをステップ0.1で加算していますが
それに対応して表示させるセルを一つずつずらすために
変数kを指定してfor構文を連立させようとしたのですが
うまくいきませんでした。




Sub k()


Dim i As Double

For i = 0 To 10 Step 0.1

Cells(22 + 10 * i, 7).Value = i
Cells(19, 6).Value = i

Range("H" & 10 * i + 22).Value = Range("E24").Value

Next i




End Sub

Aベストアンサー

すでに他の方から指摘がありますが、
Cells(22 + 10 * i, 7) はOKで、Range("H" & 10 * i + 22) がNGということになるようです。
range ではcellsとは変換誤差の扱い方が異なるのが理由のようですね。

セル指定する場合は小数値を含む値の設定を行う場合には注意が必要のようですから、今回のように小数値でループを廻してセル指定するのは適切とは言えないかもしれませんね。

コンピュータが扱う小数には丸め誤差が発生すると言うのは、プログラミングになれた方なら基本として知っていますが、初心者は式には問題無いのにエラーが起きている理由が理解出来ないと思います。
そのために予期しないエラーに悩まされて無駄な時間を掛ける事にもなります。

今回は、下記のように共通部分を変数kにまとめてしまえば問題無いですし、コードの視認性も良くなると思います。

Sub samp()

Dim i As Double
Dim k As Long

For i = 0 To 10 Step 0.1
k = 22 + 10 * i

Cells(k, 7).Value = i
Cells(19, 6).Value = i

Range("H" & k).Value = Range("E24").Value
Next i

End Sub

すでに他の方から指摘がありますが、
Cells(22 + 10 * i, 7) はOKで、Range("H" & 10 * i + 22) がNGということになるようです。
range ではcellsとは変換誤差の扱い方が異なるのが理由のようですね。

セル指定する場合は小数値を含む値の設定を行う場合には注意が必要のようですから、今回のように小数値でループを廻してセル指定するのは適切とは言えないかもしれませんね。

コンピュータが扱う小数には丸め誤差が発生すると言うのは、プログラミングになれた方なら基本として知っていますが、初心者は式に...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報