プロが教えるわが家の防犯対策術!

タイトル通りなのですが、EXCELで4000行の表で一行おきに削除しなければいけない事が発生したのです。手作業で一行ごとに削除は出来ますが自動的にすばやく削除する方法があれば教えていただけませんか?
関数かマクロか何か手立ては有りますでしょうか?

A 回答 (6件)

もっとスマートな方法はあるかと思いますが…



1:どこかの空いている列に、削除したい行に1、したくない行に0を入力(1行おきなら、上の2行に入力したらあとはオートで引っ張ってコピーできます)
2:オートフィルタで、1の行だけを表示させる
3:表示されている行を選択し、削除
4:0が入力されている列の内容を削除
    • good
    • 3
この回答へのお礼

いやーbari_sakuさん、こんな方法があるとは私のような素人には解りやすくてとても現実的な方法で助かりました。有難うございました。

お礼日時:2007/07/15 19:07

また失礼します。


私の回答は古いやつなので、ずいぶん単純な書式ですが、マクロを勉強する方法はバージョンが違っても同じですので。

まず、「ツール」→「マクロ」→「マクロの記録」で新しいマクロを何か作ります。
それで何か作業をして、「ツール」→「マクロ」→「記録終了」で、取りあえず何らかのマクロが出来ます。

これで「ツール」→「マクロ」→「VisualBasicEditor」をクリックすると、記録されたマクロの内容が見れます。

これで、どの作業がどのコマンドになってるかを見れます。
あとは、その内容を改変するなり、ショートカットキーにマクロを割り当てるなりして、作業用に修正していきます。

基本的な、for 文、while 文、if 文、select case 文など、ループとか条件分岐などと言われる物はテキストやヘルプなどで見て、どういう条件でどんな風に繰り返す、あるいは分岐するのか覚えます。

こういう具合に、必要に応じてやっていくと結構使えるような物ができるようになります。

ポイントは
●マクロで全てやってしまわない事。
 例えば選択範囲削除をマクロに登録してショートカットキーなどを割り当てて・・・というように簡単な物を作り、道具の一つみたいな使い方をする事。
●あまりマクロに頼らないで、エクセルその物の機能を活用する事。
 但し、いろんな表計算ソフトを使う可能性がある場合は、共通する機能に限定して使い、エクセルのオリジナル機能を使わない方が便利です。

高機能なマクロほどトラぶった時は厄介です。
マクロでやる時は必ず、データをコピーしてコピーの方でテストを行う、もしくは、元のデータは必ずバックアップに残しておく、などの方法を取ります。
マクロでは「元に戻す」が出来ませんので、データを損傷するとパーになるので、これだけは守りましょう。
    • good
    • 1
この回答へのお礼

myeyesonlyさん詳しくご説明していただき有難うございます。本当に皆さんは頭が良いのですね。うらやましいです。大変参考になりました。有難うございました。

お礼日時:2007/07/25 22:43

こんばんは。



>お勧めの本はありますか?

私の場合は、以下の本で独学で勉強しました。
私は、プログラミングをやった経験などありませんし、その本に出会うまでには、2度ほど挫折しました。中でも、FOMの教本は最悪でしたし、今振り返っても内容がおかしいなって思います。

コツは、これらの本の勉強をあまり熱心にしないことですね。(^^;
しかし、途中で投げ出さないことです。分からないことは分からないままでよいので、飛ばしてもよいから、最後まで読みきることと、面白いなって思ったことは、ExcelのVBE に入力してみることです。学校の勉強とは違うので、細かいことは覚えなくてよいです。だいたい、3冊で3ヶ月で終わります。半年ぐらい経てば、もう、ここの掲示板で一般的に聞くレベルは超えてしまいます。

後は、分からないところだけをもう一度おさらいするか、自分で作っていて何か分からないことがあったら、巻末の索引から辞書代わりに使えばよいです。内容は、初級から上級まで書かれていますし、巻末も充実しています。

教本で分からなくなったら、すぐに掲示板で聞いている人がいますが、その人は、最後まで行くのに疲れてしまいます。分からなければ、次の章に移ってよいと思います。

それでも、プログラミングの専門学校に行くよりも充実しています。専門学校に行けば、この内容ですと、20万円ぐらいはすると思います。

かんたんプログラミングExcel2003 大村あつし著 技術評論社
(順序は、基礎編を必ずしも先にする必要はありません。関数編からでもよいですが、応用編は、ちょっと難しいです。)
http://www.amazon.co.jp/exec/obidos/ASIN/4774119 …
http://www.amazon.co.jp/exec/obidos/ASIN/4774120 …
http://www.amazon.co.jp/exec/obidos/ASIN/4774120 …

あまり先を見て、すごい完成品を予想したりすると、現実との落差が大きいので、当面の問題しか考えないことですね。私の勉強の仕方ですが、前の自分と今日の自分を比較するだけでよいと思います。
    • good
    • 0
この回答へのお礼

Wendy02さん早速にご回答いただき有難うございます。本の推薦から勉強の方法まで現実感あふれる体験談本当に役に立ちます。早速梅田の紀伊国屋へ行って買ってこようと思います。有難うございました。お礼に炉端で一杯でもと申しあげたいところです。

お礼日時:2007/07/18 21:07

こんばんは。



>マクロを使えば一発で削除できるかな?と思っていましたがやっぱりですね。

うーん、こういわれると、挑戦せざるを得ないですね(^^;Y

#1 さんの方法もやってみましたが、マクロでは、画面の表示をとめられる分だけ速いようです。

#3のimogasiさん同様に、実際は、=IF(MOD(ROW(),2)=1,1,2) で、値コピーして、[並べ替え]で、2000行のところの境目を見つけ、その下のデータを削除するほうが速いのですが、マクロでは、そこまでテクニックを使わなくても良いような気がします。

Sub DeleteEveryTwoRows()
'ユーザーオプション
Const OPT = 0 '1 か 0を入れる 1が奇数行/ 0 は偶数行を[削除]

If OPT > 1 Or OPT < 0 Then Exit Sub

Application.ScreenUpdating = False

With Range("IV1:IV4000") 'ダミーの列
  .Formula = "=IF(MOD(Row(),2)= " & OPT & ",ROW(),"""")"
  .Value = .Value
  .SpecialCells(xlCellTypeConstants, xlNumbers).Select
End With
Selection.EntireRow.Delete
Range("A1").Select
Application.ScreenUpdating = True
End Sub
    • good
    • 0
この回答へのお礼

WENDY02さんと言いimogasiさんと言いこれはもうプロ中のプロですね。
プロの横で素人が目をパチクリと言った感じですが、こうなれば頭の悪い私もWENDY02さんに刺激されて挑戦してみたいと思います。今日からマクロを独学でマスターしてみたいと思います。お勧めの本はありますか?しかし皆さん本当に有難うございました。皆様の回答を頂いて何か不可能なことは無いのだ!と言う勇気までいただけて励みになりました。

お礼日時:2007/07/18 16:27

(1)私のおすすめは、ソート法


空き列に =ISEVEN(ROW()) といれて式を下方向に複写する。
偶数行がTRUEとなる。
コピーし、値を選択して張り付けー値で、各セルの式を消す。
その空き列でソート
FALSEかTRUEのグループでまとまるからグループの適当な方を範囲指定してデータ削除。
(2)VBA
Sub test01()
d = Range("A65536").End(xlUp).Row
For i = d To 1 Step -1
If i Mod 2 = 1 Then
Rows(i).EntireRow.Delete
End If
Next
End Sub
上例では、奇数行を削除してます。本番では、偶数行なら
If i Mod 2 = 0 Then
に修正してください。
下の行から削除していくのがコツです。
(3)フィルタで抜き出し(既回答)
ーー
関数だけでは、絶対に行削除はできませんから、考えないように。
関数はセルの値だけの世界のもので、表の仕組みなどは触れません。
    • good
    • 1
この回答へのお礼

世の中には頭の良い方が居るものだなあと感心しながら、うらやましく思いながら一行一行見ていましたが、もう私の頭ではフーフーです。
imogasiさんはどのようにしてこんな勉強をされたのでしょうか?

お礼日時:2007/07/18 16:19

こんにちは。


Excel2000で試しましたが、もっと上のバージョンでもできると思います。
一度、シートを複製して試すといいでしょう。
for 文で逆にカウントしてるのは、上から削除すると、下の行番号がずれてくるためです。

Sub Macro1()

For i = 4000 To 1 Step -1
j = i / 2

If j = Int(j) Then
'この設定は偶数行削除です。
'奇数行削除の場合は、j<>int(j) にします。
Rows(i).Delete
End If

Next i
End Sub
    • good
    • 0
この回答へのお礼

マクロを使えば一発で削除できるかな?と思っていましたがやっぱりですね。しかしmyeyesonlyさんのようなレベルの高い方でないと難しいですね。早速試してみたいと思います。有難うございました。

お礼日時:2007/07/15 19:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています