• ベストアンサー

エクセル 網掛けしてあるセルの行を残してそれ以外の行を削除するVBA

ham_kamoの回答

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

ご希望にお応えしてマクロを拡張してみました。 ・日付のフォーマットが書かれてないので、とりあえず「4月14日」という形式にしています。 ・網掛けされたセル(G列)の数を取得するのに、網掛け以外の行を削除した後、G列の一番最後にデータが入っている行を割り出して、3行目からカウントということなのでその数から-2を引いて算出しています。もしG列にデータが入ってなく空の場合がある、というのであれば、この方法では誤った値が表示されてしまう可能性があるので、その場合は別の方式に修正するので補足をお願いします。 Sub 網掛けのない行を削除()  Dim i As Integer  Dim B As Integer  'G列が網掛けでない行を削除  For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1   If Cells(i, "G").Interior.Pattern = xlNone Then    Rows(i).Delete   End If  Next    '先頭に1行挿入  Rows(1).Insert    'G1セルに2週間後の日付を設定  '日付の指定は 「4月1日」 の形式。  '「2007/4/1」の様にする場合は "yyyy/m/d"  '「4/1」のようにするときは、"m/d" に変更してください。  Range("G1").NumberFormatLocal = "m月d日"  Range("G1").Value = Date + 14    'H1セル設定  Range("H1").Value = "←次回進捗日"    'I1セル設定。G列の最後にデータが入っている行からデータ数を算出  Range("I1").Value = Cells(Rows.Count - 1, "G").End(xlUp).Row - 2    'L1セル設定  Range("L1").Value = "/"    'N1に外枠罫線設定  For B = 1 To 4   With Range("N1").Borders(B)    .LineStyle = xlContinuous    '次の行はN1セルの外枠の罫線の太さ。中(xlMedium)を指定しているが、    '細い線の場合は xlThin、太い線の場合は xlThick に変更してください。    .Weight = xlMedium    .ColorIndex = xlAutomatic   End With  Next    'Q1セル設定  Range("Q1").Value = "←未引当" End Sub

mipomipo
質問者

補足

お礼が遅くなりすみません。 G列の解説、かなりわかりやすく、納得しました。 その他の解説もどういう意味なのかがわかって大変勉強になっています。 そうやってVBAを組み立てていくのですね。 ありがとうございますm(_ _)m また補足ではないのですが、教えてください。 2行目のセルには、いろいろな項目があるのですが、 「品目テキスト」「明細」だけに水色で網掛けをしたいのです。 そういうときのVBAはどうなりますか? 質問が一回で済まなくて申し訳ありませんが、宜しくお願い致しますm(_ _)m

関連するQ&A

  • エクセルで、セルに「合格」という文字が入ったら、そのセルの入った行全体に灰色の網掛けがかかるようにできますでしょうか?

    ほぼタイトル通りなのですけれど、 エクセル(97)であるセルに「合格」という 文字列が入りましたら、そのセルの入った 行全体(表の中の事なので表の中のみ)に灰色の 網掛けがかかるようにできますでしょうか? 「条件書式」を使いますと、一つのセルに「合格」と 入りますと、そのセルのみに網掛けがかかってしまうようですし、行全体に網掛けがかかる方法を探しています。。 何か機能を組み合わせていい方法はないでしょうか?

  • エクセルの使い方-最低値のセルに自動網掛け

    エクセルを使っています。1つの行にある複数セルの数値から、最低値を見つけ、そのセルに色網掛けをしたいのです。これを自動で行えるようにしたいのですが、方法など知っておられるかたがいらっしゃれば教えてください。マクロとか、プログラムとかする必要ありますか。。。どんな方法でもよいので、よろしくお願いいたします。

  • エクセルで網掛けの入ったセルを並び替え(昇順・降順)するには

    エクセル97で、例えば、C列に「黄色」の網掛けが 入ったセルがあったとしたら、黄色のセルが入った行を、 上に持ってきたり、下にもってきたり、と並びかえる 方法を探してるのですが、解決手段はありますでしょうか?

  • エクセルで複数行のデータを1行にする方法

    エクセルで複数行のデータを列挿入--切り取り--貼り付けで1行にしたいのですが、 その様なセルの並びが沢山あります。 VBAマクロなどで一度に出来る方法が有りましたらどうか教えて下さい。 データはこんな感じです。 ┌─┬─┬─┬─┬─┐ │01│04│07│10│13│ ├─┼─┼─┼─┼─┤ │02│05│08│11│14│ ├─┼─┼─┼─┼─┤ │03│06│09│12│15│ ├─┼─┼─┼─┼─┤ │16│19│22│25│28│ ├─┼─┼─┼─┼─┤ │17│20│23│26│29│ ├─┼─┼─┼─┼─┤ │18│21│24│27│30│ ├─┼─┼─┼─┼─┤ この様に並び替えたいのです。 ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │01│02│03│04│05│06│07│08│09│10│11│12│13│14│15│ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │16│17│18│19│20│21│22│23│24│25│26│27│28│29│30│ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ 何卒宜しくお願いいたします。

  • エクセル2003のVBAを教えて

    エクセル2003のVBAを教えてください。 次の対象データで、(1)(2)(3)の作業が出来るエクセルVBAを教えて下さい。 (1)(2)(3)個々のVBAでお願いします。 ●対象データ:種類(A列)、文字(B列)、    データの行数:不特定なので、データのある最終行までとします。 ●教えていただきたい項目  (1):種類だけを(C列)に取り出す。  (2):種類の先頭に空白の行を3行入れて、追加の2行目の種類(A列)に文字(B列)を入れる。  (3):種類が5行以上あるときは、5行ごとに空白行を追加する。 ●対象データ 種類(A列)   文字(B列) AA       あああ BB       いいい BB       いい BB       いいい CC       うう CC       うう DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ ●(1)のVBAの結果(このようになるVBAを教えてください。) (C列) AA BB CC DD ●(2)、(3)のVBAの結果(このようになるVBAを教えてください。) 種類(A列)    文字(B列) あああ AA        あああ いいい BB        いいい BB        いいい BB        いいい うう CC        うう CC        うう ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ

  • Excel で位置が変動するセルの指定をVBAで作りたいのですが・・・?

     ExcelのVBAはほとんど初心者なのです。  申し訳ございませんが教えていただきたいのです。  ひとつのシートに表が3種類あるのですが、それぞれ違うデータを  貼り付けようとしています。  元の表の形は同じです。3行の表でデータの数によって行が挿入  するようになっています。  1つ目の表は、開始のセルは決まっているので指定は出来るのですが  2つ目・3つ目の表の開始セルがその時々で変わってきます。  その時の、開始セルのマクロを作成したいのですが分からなくて  教えて下さい。  よろしくお願いします。  説明が下手ですみません。    

  • VBA アクティブ行の削除

    エクセルで、アクティブにしているセルの行のA列からL列のみを削除というマクロを組みたいのですが、どのように記述したらいいのでしょうか? アクティブなセルはA列~L列のどこにあっても、その行のA列-L列を削除というようにしたいです。 (例1) A1がアクティブだった場合、A1~L1が削除される (例2) B4がアクティブだった場合、A4~L4が削除される すみませんが、お分かりになる方がいましたらよろしくお願いいたします。

  • エクセルVBAで空白セルを削除する方法

    みなさん教えてください。 今エクセルVBAで、下記のようにのA列に空白セルがある場合にそのセルを削除し、 空白セルが無い場合何もしないと言うマクロを作っています(下記のように自動記録し ました)。 しかし、作成したマクロは、下記のようにA列に空白セルがない場合はエラーが出てし まいます。 空白セルが無い場合エラーが出ない方法を教えて頂けないでしょうか。 よろしくお願いします。 <マクロ> Sub Macro1() Columns("A:A").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.SpecialCells(xlCellTypeBlanks).Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp End Sub <データ> A --------- 1 2 1 1 1 3 4 ・ ・ ・ (以降約300行続きます)

  • エクセルでの網かけについて

    エクセル上でひとつのセルの中に文字列を入力していて(例えば A B C D ←がひとつのセル内にある)その内のひとつの文字のみ(例で言えば C のみのように)に網かけすることは可能ですか?可能な場合、どうしたら良いのか教えていただけませんか?それと、もしできない場合は網かけではなく、その文字のみ囲むことは可能でしょうか?

  • excel 複数行の一番右の値を異なるセルに表示

    いつもお世話になっております。 Excel2003について質問です。 今、AA列を開始列として、20行程の表があります。 データはAA列からAB、ACと「日々の数値」が入力されており、 表から20行ほど離れた特定のセルに、最新日付のデータを 表示させています。 イメージ      4/1  4/2  4/3  4/4 りんご  1   25   11   12 ゴリラ  5   22   20   18 ラッパ  6   26        21 パンダ  8   29   30   26 だんご  11   28 27 28 ゴリラ  18 パンダ  26  上記イメージのように、 「特定の行の、最新データ(該当する行の、一番右側のセルデータ) のみを特定セルに表示させたい」のですが、方法が分かりません。 (入力されるデータは数値のみで、途中に空白行もいくつか存在します。)  Webなどで検索をしてみたのですが、思うような回答が得られず。。です。  解決できるのであれば、関数・VBAどちらでもかまいません。 (ちなみに、どちらに関しても初心者です。)  有識者の皆さま、なにとぞご教授いただきますよう、よろしくお願いいたします。