• ベストアンサー

エクセル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/17068)
回答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という単位にわかれていますが、それを結合する ことで、異なった機能を連続して実行することができます。 マクロを知らない人も、覚えて損はないですよ。

関連するQ&A

  • マクロで可能でしょうか??

    初めまして ken2308といいます。 Excelは有る程度、使えるのですが 業務上マクロを覚えることになりました。 マクロに関しては全くのシロウトです。 Excelのマクロで以下のような事をやろうと思っておりますが Excelのマクロでは対応は可能でしょうか?? 【例】 Excelファイルが2つあります。 このファイルの大きさが【50列】×【50行】あり 【列】は飛び飛びで20列ほど非表示にており 【行】は複数のセルを結合して有ります。 このファイルを1つのファイルにしたいのですが Excelのマクロでは対応は可能でしょうか?? 自分としては以下のマクロを作成すればよいと 思っているのですが・・・ (1)列・行ともに非表示⇒表示にする。 (2)結合しているセルを解除戻す。 (3)2つのファイルをコピペする。 (4)貼り付け後、不要な列を削除する。 ※このマクロがうまく行ったら、上記で出来たファイルから  ピボットテーブルを作成するつもりです。

  • Excelシート上のハイパーリンクの一括削除

    Excelシート上にあるハイパーリンクの一括削除はできるのでしょうか? 現在、ある列にハイパーリンクされたデータがあります。 これを、列全体を一括でリンク解除したいのです。 セル毎に、右クリック→ハイパーリンク(H)→ハイパーリンクの削除 で一つずつ解除出来ますが、これを列単位で一括して行いたいです。 よろしくお願いいたします。

  •  いつまで経ってもパソコン超初心者でエクセルのマクロのことはまるでわか

     いつまで経ってもパソコン超初心者でエクセルのマクロのことはまるでわかりません。OSはXP3、ソフトはエクセル2000です。3列4行の表と3列3行の表を画像のように結合させるマクロを、ツール→マクロ→新しいマクロの作成→マクロ名&ショートカットキーの欄を埋めてマクロを記録させた所、セルをクリック・ドラッグしたところでしか結合させてくれません。任意のセルで実行させるにはどのようにすればよいのでしょうか。手取り足取りレベルでご教示いただきたくお願いします。

  • エクセル:複数シートの一括処理

    お世話になります。 エクセルで1つのブックに複数のシートがあります。 書式は同じですが行数がそれぞれ違います。 A列で、データが入力されている一番下のセルの次の行から、エクセルの最終行である65536行までの行を全て選択して「削除」をしたいのです。(行の削除)しかも全シート一括で。 A列でデータが入っている一番下のセルがA550だった場合、551行~65536行までを全て選択→削除を行う。 これらの作業をするためのマクロを教えてください。

  • エクセルのマクロについてです。

    すいません。教えてください エクセルのハイパーリンクを一括で登録したいです。 Dの列に品番がずらっとのっていて、その各行ごとのHの列にハイパーリンクを別のフォルダに格納されている、エクセルの同じ品番を検索して貼りたいです。マクロ初心者で大変なやんでます。よろしくお願いします。

  • Excelのマクロで

    Excelのマクロで 月ごとにセルを結合させたいのですがわかりません。 例えば 2010/2/20~2010/5/10 このとき A1~H1のセルを結合(2月) I1~AM1の結合(3月) というふうに表示させたいです。 2行目にはそれぞれ日を表示させたいのですが どうすればいいですか? 教えてくださいお願いします。 期間がが変更されたらその期間が表示されるように Excelマクロでお願いします。

  • エクセルのマクロの作成について

    エクセルのマクロの作成について教えてください!! 一つのセルの中に3行の文字があるとして・・・・ そのセルの2行目と3行目を隣のセルにうつしたいです。 例えば・・ E列の1行目のセルに あいうえお かきくけこ さしすせそ と文字が入っていて、 それを F列の1行目のセルに かきくけこ さしすせそ のみ移動させたいです。 1行~300行ほどあって、さらにデータは増え続けます、手作業での移行が困難になってきました。 そもそも一つのセルの中身の文字の一部を違うところに移動させるマクロは組めるのでしょうか。 当方初心者です。お手柔らかにお願いします。

  • EXCELのマクロにて

    EXCELのにて連続したデータを入力したデータベースがあります。(行が5000、列がAAまで) このデータベースのデータの最終行だけを指定して違うシートにコピー・貼り付けがしたいのです。 マクロにてこのような作業をするときにはどういった文をかけばよいですか。

  • 複数の写真をエクセルに貼り付けられるマクロ

    エクセルで工事写真を貼り付けたいのですが、 マクロにより以下のことを実行したいです。 (1)写真貼り付け開始セルをダブルクリック (2)写真を複数枚選択 (3)写真をセルのサイズにリサイズ (4)ファイル名順に写真を貼り付け マクロを普通に実行して(2)~(4)を行うコードや 写真1枚に対して(1)(3)(4)ができるコードは見つかるのですが、 (1)~(4)ができるコードが見つかりません。 ちなみに、写真貼り付け用のセルは4列×12行分の結合セルで この形式が下に延々と続いています。 どなたか良い知恵をお貸しください

  • Excel マクロ 条件によるセルの結合

    テキストだとわかり辛いと思い、 画像を添付させていただきました。 3列の表があり、 A列に1~10までの数字(グループ名)を入力します。 これを、A列の数字が同じ場合、 B列とC列をセル結合したいのですが、 マクロで実現できるでしょうか? (行数は15行くらいあり毎日変わります) (最終行の次の行は空白です) (A列は結合してもしなくても問題ありません) Excel 2007 Windows10を使用しています。 おわかりの方がいらっしゃいましたら、 どうぞよろしくお願い致します。

専門家に質問してみよう