windows-xp、エクセル2003を使っています。
エクセルデータがA列からU列まであります。
(1000件程かな、時々AA列まである時もあります)
G列には、網掛けしてあるセルがあります。
そこで!!
網掛けしてあるセルの行だけを残して、網掛けがされていない行のデータを一気に削除する!というマクロ(VBA)を作りたいのですが、どうすればよいでしょうか?
VBAまだ、よくわかっていないので、初心者レベルでわかりやすく教えてくださると助かります。
宜しくお願い致しますm(_ _)m
No.4ベストアンサー
- 回答日時:
一応、作ってみました。
その前のマクロの処理の続きに動かすのか、それとは別のタイミングで処理するのかわからなかったので、単独のプロシージャとしています。もしその前のマクロの中の処理に組み込みたいときは、最後に
Call 水色の網掛け
を追加すればいいです。(プロシージャ名は適当なので変更可能です。実際の業務にあわせて処理内容がわかる名前にすることをお勧めします)
Sub 水色の網掛け()
Dim Title As Variant, T As Variant
Dim R As Range
'検索するタイトル行の配列を作成
Title = Array("品目テキスト", "明細")
'Titleの全ての要素Tについての処理を繰り返す
For Each T In Title
'タイトル行(2行目)から特定のタイトルを検索(完全一致)
Set R = Rows(2).Find(What:=T, LookAt:=xlWhole)
If R Is Nothing Then
'タイトルが見つからない場合、エラー画面を出す。
MsgBox ("タイトル行に「" & T & "」がありません")
Else
'見つかったタイトルセルから最後の行までに網掛け設定
With R.Resize(Cells(Rows.Count, R.Column).End(xlUp).Row - 1).Interior
.ColorIndex = 34 '薄い水色
.Pattern = xlDown '右下がり斜線 縞
End With
End If
Next
End Sub
この回答への補足
たびたびすみません!!
別件ですが、今これおわかりますか?!
↓
http://oshiete1.goo.ne.jp/qa2953056.html
今すぐしりたいのですが・・・
ルールにそらず申し訳ありませんが!!
今どうしても急な回答がほしくて・・・
よろしくお願いいたします!!
お礼と締め切りが遅くなり申し訳ありませんm(_ _)m
わかりやすい回答だったので、大変勉強になり助かりました!!
また、教えていただけたら・・・・と思いました。
ありがとうございました。
No.3
- 回答日時:
> 2行目のセルには、いろいろな項目があるのですが、
> 「品目テキスト」「明細」だけに水色で網掛けをしたいのです。
> そういうときのVBAはどうなりますか?
ご質問の回答をする前に、何点か確認させてください。
プログラムを書くときには、厳密に「何がしたいか」が
わかっていないと、正確に書けないので。
・「品目テキスト」「明細」の列は決まっていて、その列名を指定して水色にするのでしょうか。それとも、シート構成が変わる可能性があって、2列目から「品目テキスト」「明細」の文字列を検索して特定して、水色にするのでしょうか。(この場合、行タイトルが変わるとマクロは正常に動かなくなります)
・水色の網掛けをするのは、該当する列の2行目から最後の行まで、ということでしょうか。それともデータ行だけ、あるいはタイトル行だけでしょうか。
・「水色」というのは、セルの書式設定で「パターン」を設定するときに出てくる色のうち、下から2番目、右から4番目の色でよろしいでしょうか。
・「網掛け」は同じくセルの書式設定の「パターン」ボタンを押したときに出てくるパターン一覧のうち、どれでしょうか。パターンのサンプルの上にマウスを乗せると、「75%灰色」とか「50%灰色」とか出てきます。このうちのどれかを教えてください。
以上、補足をお願いします。
この回答への補足
お手数おかけしています。
補足します。
(1)「品目テキスト」「明細」の列は決まっていません。
シート構成が変わる可能性があります。
「2行目に項目名が入っている」ということと、「その項目名は変わらない」ということは確かなのです。
が、A列に「品目テキスト」がくる場合もあるし、A列に「明細」の文字列がくる場合もあるのです。
前述しましたが、項目名は変わらないので、項目で検索して特定させて、水色にするというようにしたいのです。
(2)水色の網掛けをするのは、該当する列の2行目から最後の行まででお願いします。
(3)「水色」というのは、セルの書式設定で「パターン」を設定するときに出てくる色のうち、下から1番目、右から4番目の色でお願いします。というわけで、正式には「薄い水色」でした。すみません!!
(4)「網掛け」と言っていたのは、下から2番目の左から3番目です。
本当にいろいろ教えていただいており、大変恐縮です。
何卒、宜しくお願い致しますm(_ _)m
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
この回答への補足
お礼が遅くなりすみません。
G列の解説、かなりわかりやすく、納得しました。
その他の解説もどういう意味なのかがわかって大変勉強になっています。
そうやってVBAを組み立てていくのですね。
ありがとうございますm(_ _)m
また補足ではないのですが、教えてください。
2行目のセルには、いろいろな項目があるのですが、
「品目テキスト」「明細」だけに水色で網掛けをしたいのです。
そういうときのVBAはどうなりますか?
質問が一回で済まなくて申し訳ありませんが、宜しくお願い致しますm(_ _)m
No.1
- 回答日時:
Alt+F11でVBAの画面を開き、左側のツリーからブック名を選択し、右クリックから「挿入」>「標準モジュール」を選択して、右の画面に以下のマクロをコピーして貼り付けてください。
Sub 網掛けのない行を削除()
Dim i As Integer
For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
If Cells(i, "G").Interior.Pattern = xlNone Then
Rows(i).Delete
End If
Next
End Sub
その画面でF5キーを押すか、Alt+F11でExcelの画面に戻ってAlt+F8からマクロを実行してみてください。
エラーが出たり、希望の動作と違ったら補足をお願いします。なお、マクロは実行したら元に戻せないので、ファイルのバックアップをとっておいた方がよいでしょう。
この回答への補足
大変わかりやすい回答で、一発で出来てしまいました!!!
ありがとうございました!!!!!
VBAに詳しい方だと察します。
お願いついでにもう少しマクロを教えてください。
上記のマクロを走らせてから、
⇒「列1」に1行挿入させて、
⇒セル「G1」に、マクロを走らせた日から2週間後の日付が出てくるようにして、
⇒セル「H1」に、『←次回進捗日』という言葉をいれて、
⇒セル「I1」に、網掛けされたセルの個数を表示させたい。
但し、網掛けされたセルの数え始めは、3行目から数えること。
なぜかというと、1行目は、空欄になっており、前述したことが書かれてあるはずだから。2行目は「各項目の名称」が入っているので。
⇒そして、セル「L1」に『/』という記号をいれて、
⇒セル「N1」に罫線(外枠)をつけて、
⇒セル「Q1」に『←未引当』という言葉をいれたい。
補足欄で、このボリュームの質問はどうかとも思いますが、VBAを大変熟知してされている方と察し、もし、お答え頂けるようでしたらお願いしたいと思います。
本当に厚かましくて申し訳ありませんが、何卒宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
- Visual Basic(VBA) エクセルVBAで『A列』に新規で数値を入力し『B列』から右方向の空白セルにその値を貼り付ける方法 4 2022/11/05 08:37
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Excel(エクセル) エクセルの条件付き書式 3 2022/05/08 03:17
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) Excel VBA 空白行があるセル範囲に色を付ける 3 2022/06/13 15:58
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセル 2つの列にある値の完全一致を抜き出すVBA 15 2022/12/15 03:22
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのチェックボックスを...
-
エクセルで数字から名前に変...
-
エクセル 条件が成立した場合...
-
Excel:セルに入力されている日...
-
エクセルで縦書きルビの付け方
-
配列の逆行列が求められない(M...
-
excelセル内の掛け算計算方法
-
エクセルで漢字を数字に変換す...
-
Excel関数 「日付を入力...
-
エクセル関数で…
-
エクセルでのNULLという文字列...
-
ワードで文字がセルの下にもぐ...
-
エクセル、 3×5センチのセル...
-
エクセルでのセルをまたぐ文字...
-
pages で「テキストを左右両端...
-
エクセルのセル内での改行(マ...
-
エクセル関数で数式のないとこ...
-
エクセル2007 番地の並び替え...
-
上付き文字を別セルにそのまま...
-
excelの組合せ計算について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのチェックボックスを...
-
エクセルで数字から名前に変...
-
エクセルでのセルをまたぐ文字...
-
Excel関数 「日付を入力...
-
Excel:セルに入力されている日...
-
エクセル 条件が成立した場合...
-
エクセルでのNULLという文字列...
-
VBAで「セルに何か入っている場...
-
エクセルで縦書きルビの付け方
-
折り返して表示、縮小して表示...
-
エクセルで漢字を数字に変換す...
-
pages で「テキストを左右両端...
-
(EXCEL)CELLの色をカウントす...
-
Excel:複数セルの計算値を一気...
-
エクセル関数で…
-
エクセルについて、A1が1ならば...
-
エクセル関数で「数値が入力さ...
-
エクセルファイルを開くとメッ...
-
エクセル2007 番地の並び替え...
-
配列の逆行列が求められない(M...
おすすめ情報