• ベストアンサー

エクセル2003でマクロを使って複数の作業を簡単に終わらせたい

昨晩こちらで別件で質問させてもらって、okweb内を調べていたところ エクセルにはマクロという機能がある事がわかりました。 当方エクセル2003を使っています。 表示させているシート上で、毎回手作業で下記のことをやっているのですが この作業をマクロ?というのを使って簡単に済ませる事はできないでしょうか? 1.画像一括削除 2.ハイパーリンク一括削除 3.セルの結合解除(結合されているセルを全て解除したい) 4.空白行削除 5.E列(縦)の削除(削除後は隣のD列以降が1列左にシフトされる状態) マクロのサンプルを置いてあるサイトを調べてみましたが 画像を一括削除するマクロだったり、空欄行削除のマクロは見つけたのですが そのマクロを連続で動かす方法がわかりませんでした。 マクロというものをほとんど理解していないのですが そもそも、マクロというのは連続した作業が無理なのでしょうか。 そうだとしたら、変な質問をしてしまい申し訳ないです。

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

  • ベストアンサー
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.6

下記紹介サイトとは別のサイトを見つけました。 要約すると、、 「まずは、どこか適当なセルを1つ選び」 を 「任意のセルに1を設定し、そのセルを選択」 した後、コピーします。1をコピーすれば、乗算しても変わらない ですからね。お試しください。

operaster
質問者

お礼

何度も丁寧にアドバイスしていただけて、とても嬉しかったです。 どうもありがとうございました! 調べてみた結果、下記のように書き直したところ とりあえず今まで手動でやっていたことは自動でできるようになりました。 慣れた方が見ればとても幼稚なマクロかと思いますが、 他の方の参考になる事もあるかもしれませんので 張っておきます。 Sub Macro2() '画像一括削除 ActiveSheet.DrawingObjects.Select Selection.Delete 'ハイパーリンク一括削除 Cells.Select Selection.Hyperlinks.Delete 'E列の削除(削除後は左にシフト) Columns("E:E").Select Selection.Delete Shift:=xlToLeft '空欄行の削除 Dim UsedCell As Range Dim Max_Row, RowCount As Integer '使用しているセルの範囲を取得します Set UsedCell = ActiveSheet.UsedRange '最大の行番号を取得します Max_Row = UsedCell.Cells(UsedCell.Count).Row For RowCount = Max_Row To 1 Step -1 'Worksheet関数のCountAを使ってデータの個数をカウント If Application.WorksheetFunction.CountA(Rows(RowCount)) = 0 Then '行の削除 Rows(RowCount).Delete End If Next End Sub

operaster
質問者

補足

再度ご回答ありがとうございます。 この方法を自分でも見つけて試してみたのですが 今度は空欄のセルに0が入力されてしまい そうなると空欄行削除が不可になってしまいました。 0を一括で削除すればいいのかもしれないのですが 最初から0が入っているセルもあるので、一括削除は避けたいと思っています。 この他に、データの入っているA:E列をコピー F:Jに 形式を選択して貼り付け→値 として貼り付け A:E削除 この方法を試したのですが、文字の色が消えてしまって… 同じような方法で、文字の色が残ってくれればいいのですが。 手作業でやっていたときは、ハイパーリンクのあるセルに マウスカーソルを移動させ、右クリックからハイパーリンク削除を選んでいました。 ハイパーリンクのセルが色んな列に大量にあるためこの作業に何十分もかかっている状況です。 別の方法がないか、もう少し調べてみようと思います。

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.7

昨日マクロという言葉を知った人が、それぞれ相当VBAの中でも難しい 事項を、丸投げで、書いてくれ、教えてくれというのはおかしい。 それぞれ、すべてVBAで出来ますから、もう少しVBAを勉強してから、マトを絞って、質問してください。 しかし、特に独学では、プログラムというものを、甘く見ちゃしけませんよ。 ここへ聞くより、まづ本を2-3本読んで学習が先です。 Googleなどで、検索語を考えて、VBAという言葉を最初や最後に添えて、照会すれば標準のコード例はほとんどの場合出てきます。 例えば「ハイパーリンク 一括削除 VBA」での照会で6千件以上記事があるそうだ。 そのうちの1つ http://oshiete1.goo.ne.jp/qa4089648.html?ans_count_asc=0 そのどこを、質問者の場合にあわせるには、変えるべきか、その程度までくれば、この質問コーナーの質問として、妥当でしょう。 >連続した作業が無理なのでしょうか。 順番に処理のブロックのコードを下へ書き連ねるだけです。 Sub Test01() '画像一括削除(先頭のアポストロフィはコメント(注釈)になり、見るだけで実行とは関係ない決まり) A 'ハイパーリンク一括削除 B 'セルの結合解除(結合されているセルを全て解除したい) C '空白行削除 D 'E列(縦)の削除(削除後は隣のD列以降が1列左にシフトされる状態) E End Sub A,B,C,D,E の箇所に、その上部(’の行)で言っている課題のコードを書くだけです。 書かなければ、処理しないだけ。 ただA,B,c、D,、Eで相互関連している場合があれば、気をつけないと ダメですが。 この例は比較的独立してますが、一般には処理の前後を間違えると 結果がおかしくなったり、エラーになる場合もあり、難しい場合もある。

operaster
質問者

お礼

ANo.6のお礼に書いたマクロ、作成途中の状態のものを間違って張っておりました(´д`) 完成したのは下記のとおりとなります。 参考になるものではないですが、間違ったままのを張っておくのも 気持ち悪かったので、こちらのお礼欄に書きます。 Sub Macro3() '画像一括削除 ActiveSheet.DrawingObjects.Select Selection.Delete 'ハイパーリンク一括削除 Cells.Select Selection.Hyperlinks.Delete 'セルの結合解除 Selection.MergeCells = False '空欄行の削除 Dim UsedCell As Range Dim Max_Row, RowCount As Integer Set UsedCell = ActiveSheet.UsedRange Max_Row = UsedCell.Cells(UsedCell.Count).Row For RowCount = Max_Row To 1 Step -1 If Application.WorksheetFunction.CountA(Rows(RowCount)) = 0 Then Rows(RowCount).Delete End If Next 'E列の削除(削除後は左にシフト) Columns("E:E").Select Selection.Delete Shift:=xlToLeft End Sub

operaster
質問者

補足

ご意見ありがとうございます >>相当VBAの中でも難しい 知らずにとはいえ難しい事を質問してしまいすみませんでした。 なんとかなりそうなので、もう少し頑張ってみます。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.5

下記マクロ、こちらでも確認できました。 私が紹介したサイトには、注意書きになかったのですが、数値のセル があると、正常に動作しないようですね。 ハイパーリンクの一括削除については、 1)再度、インターネットで探す 2)普段ご自身がやられている操作 を再度マクロの記録でやってみてはいかがでしょうか?

  • diashun
  • ベストアンサー率38% (94/244)
回答No.4

diashun です。 OKWeveは公序良俗に反しない限りどんな質問でもたいてい受け付けますが、プログラミング言語、アプリケーションの使い方や疑問などは、少なくともその基本的なことをまず自分で勉強するなりして、基本をある程度身に付けた上でそれでも疑問に思うことをOKWaveに揚げるという姿勢が必要ではないでしょうか。お説教をするつもりはありませんが、「Webで少し調べてもわからないので・・・」程度で質問しても、回答を完全に理解するのが難しいと思います。少なくとも入門書程度のレベルを身に付けた上で、質問を投稿したほうがいいのではないかと思います。 今回のご質問はすべてVBAマクロで一括(連続)処理可能です。 ・・・が、回答者の方々が回答をしてくれても、その意味(真意)がつかめなければ、回答者の好意を無にすることにもなります。まずはWeb検索(キーワード「VBA、VBA入門」等々)、入門書書籍などで、基本を理解されることをお勧めします。 (お節介がましくてスミマセン)

operaster
質問者

補足

ご意見ありがとうございます。 皆様の意見を参考にして自分なりにやってみたつもりだったのですが 気にそぐわない発言をしてしまっていたようでしたら申し訳ありません。 もっと勉強してからでないと質問してはいけない場所のようですので 少し勉強してから、また来ようと思います。 お目汚し申し訳ありませんでした。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.3

http://www.atmarkit.co.jp/fwin2k/win2ktips/870hyperlink02/hyperlink02.html にハイパーリンクの一括解除がありますので、マクロの記録を実行 されてみてはいかがでしょうか?

operaster
質問者

補足

皆様アドバイスありがとうございます。 最新回答のこちらに、試したものを貼り付けてみます。 新しいマクロの記録 という機能を使ってやってみました。 それと、空欄行を削除するマクロのサンプルをを後半に付け足してみましたが、 こんなくっつけ方でいいのでしょうか データはA~E列まで入っています。HTMLをコピーして貼り付けたシートです。 一応、一連の作業を自動で行うことができ 画像削除、ハイパーリンク削除、空欄行削除、E列削除はできたのですが 数字が入っていたセルの値が全て0に変更されてしまいます どうしたら数値が0になるのを回避できるでしょうか。 ご教授よろしくお願いします。 Sub Macro1() ActiveSheet.DrawingObjects.Select Selection.Delete Range("F1").Select Selection.Copy Columns("A:E").Select Range("E1").Activate Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Columns("E:E").Select Selection.Delete Shift:=xlToLeft Range("E5").Select Dim UsedCell As Range Dim Max_Row, RowCount As Integer '使用しているセルの範囲を取得します Set UsedCell = ActiveSheet.UsedRange '最大の行番号を取得します Max_Row = UsedCell.Cells(UsedCell.Count).Row For RowCount = Max_Row To 1 Step -1 'Worksheet関数のCountAを使ってデータの個数をカウント If Application.WorksheetFunction.CountA(Rows(RowCount)) = 0 Then '行の削除 Rows(RowCount).Delete End If Next End Sub

回答No.2

>この作業をマクロ?というのを使って簡単に済ませる事はできないでしょうか? もちろん可能です。 >そもそも、マクロというのは連続した作業が無理なのでしょうか。 複数のファイルに対しての連続した読み書き作業を含め 大概の操作は出来ます。 まずは、サンプルを探すのも良いですが、 マクロの記録機能を使い、自分のやりたい操作のマクロを作成 して見ましょう。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

●マクロの作成方法 1)何もないところから、コードを手入力もしくは、インターネットなどからサンプルコードを入手して記述する 2)「マクロの記録」といって、キーボード操作・マウス操作を記録することで、それを自動的にコード化し、次回からは、記録された操作を自動再生させる ●マクロについて subとか、functionという単位にわかれていますが、それを結合する ことで、異なった機能を連続して実行することができます。 マクロを知らない人も、覚えて損はないですよ。