• ベストアンサー

Excel VBA

いつもお世話になっております。 ExcelのVBAの処理にてお聞きしたいのですが… Ret = MsgBox("項目を全て削除しますが、よろしいですか?", vbYesNo, "削除") If Ret = vbYes Then Worksheets("入力").Select Range("C10:I59").ClearContents Range("L10:R59").ClearContents Range("W10:Y59").ClearContents Range("AB10:AH59").ClearContents Range("AM10:AO59").ClearContents Range("AR10:AX59").ClearContents Range("BC10:BE59").ClearContents   ・   ・   ・ と長々しく書いているのですが、これをもっとスマートに 書く方法はありますか?? それから、こういったことが出来るなら教えて頂きたい のですが、、、 あるExcelのシート(1枚)を、所定のディレクトリに入って いるExcelファイル(数十ファイル)のシートの先頭に全て挿入して いくといったものなのですが、VBAで出来ますか?? 出来なくとも、近い感じの処理または、参考文献などあったら 教えて下さい。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • chiezo2005
  • ベストアンサー率41% (634/1537)
回答No.4

#2です。 >File_Name=Dir()でつぎのファイルへ このままで使えます(引数はいりません) VBAのヘルプでDir関数のところを見ると書いてありますが, 引数なしで使うことにより最初のDir関数でしていしたフォルダ内のすべてのファイル名を順に呼び出すことになります。

polalis
質問者

お礼

chiezo2005様、ご回答ありがとうございます。 出来ました~^^ 想定どおりの結果が得られました。 ありがとうございました!!

その他の回答 (3)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

#1です。 > ところで間のセルに数式が入っていて、保護をかけているのですが > 上記、入力値の削除マクロは有効ですか?? 実際に試してみれば解る事です。 ダメなら保護を解除して、処理後に保護すると言う処理を前後に追加すれば良いだけだと思いますが、、、 これらはマクロ記録でも記録されます。

polalis
質問者

お礼

papayuka様、ご回答ありがとうございます。 やはり保護状態では動きませんでしたが マクロの自動記録で、作成できました。 勉強になりました!!

  • chiezo2005
  • ベストアンサー率41% (634/1537)
回答No.2

前半ですが,選択範囲に規則性がないとスマートに書くのは難しいですね。 なにか特定の文字が左上にあるなど特徴があれば,その位置を元に短く書くことは可能ですが・・・ 後半は可能です。 Dim File_Name As Variant File_Name=Dir("C:\ディレクトリ\*.xls,vbNormal) Do While File_Name <> "" Workbooks.Open "C:\ディレクトリ\" & File_Name でbookをオープンして,  ここに,  そのbookのindex1のシートをアクティブにして  Copyメソッドで元のシートをコピーするコードを書 く  bookをクローズ File_Name=Dir()でつぎのファイルへ Loop でディレクトリにあるすべてのエクセルファイルの先頭に挿入できます。 こんな感じですかね。

polalis
質問者

補足

chiezo2005様、ご回答ありがとうございます。 コードの詳細まで、書いていただいて大変助かります。 ところで、ご質問なのですが… >File_Name=Dir()でつぎのファイルへ の部分は、ファイル名を明示しないといけないのでしょうか?? それとも、File_Nameの変数宣言「*.xls」で全てのファイル という意味でよろしいのでしょうか?? 当方、VBSを最近やり始めたばかりなので、ご教授頂けると 助かります。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

選択した列に規則性があればループ処理出来ますが、間の列などがバラバラのようですので煩雑になります。 ある表の計算式を除いた数値だけのセルを消したいって事なら Sub Macro1()  On Error Resume Next  Range("C10:BE59").SpecialCells(xlCellTypeConstants, 1).ClearContents End Sub のような感じでも良いかと思います。(試す場合はテスト環境で) 特定ディレクトリの云々、、、についてもVBAで可能です。 FileSerchやDirなどで各ブックを開いて、Worksheets(1)のBeforeにコピーする感じでしょうか、、、

polalis
質問者

補足

papayuka様、ご回答ありがとうございます。 なるほど~^^ やはりSpecialCells(xlCellTypeConstants, 1)を使うんですね。 ありがとうございます、とても勉強になります。 2つ目は、ファイルのOpen関数みたいのでいいんですね。 大変参考になりました。 ところで間のセルに数式が入っていて、保護をかけているのですが 上記、入力値の削除マクロは有効ですか??

関連するQ&A