痔になりやすい生活習慣とは?

フィルタ等を使用せず、特定のセルに数値がない行を簡単に削除したいのですが…よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (10件)

こんにちは。



>ボタンのようなものを作成し、それを押すと

うーむ。マクロですね。

コントロールツールボックス・バーを出したら、その中のボタンをドラッグして、適当な場所に張りつけします。

そのボタンを右クリックして、コードの表示をクリックすると

Private Sub CommandButton1_Click()

End Sub

こんなようなものが出てくるはずですから、そこに上書きしてしまってください。

'------------------------------------------------

Private Sub CommandButton1_Click()
Dim i As Long
 Application.ScreenUpdating = False
 'A列の範囲を以下で取ります
 With Range("A1", Range("A65536").End(xlUp))
  For i = .Rows.Count To 2 Step -1 '先頭行は残します
   If .Cells(i, 1).Value = "" Then
    .Cells(i, 1).EntireRow.Delete
   End If
  Next i
 End With
 Application.ScreenUpdating = True
End Sub
'------------------------------------------------

後は、Alt+Q で、画面を閉じたら、今は、コントロール・ツールボックスのバーの[青い三角定規]が[オン]の状態ですから、クリックして、[オフ]にしてから、コントロール・ツールボックスのバーを非表示させてください。

なお、今回のケースは、ジャンプ機能やSpcialCellsメソッドは、あまりうまくいかないように思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。
皆さんのご回答を元に、出来ました!

お礼日時:2007/02/14 02:44

質問の意図とはかけ離れた回答になります。



フィルタ処理で十分実用に耐えると思いますが如何でしょう。
印刷範囲を指定して、その外にフィルタ用の関数を記述する列を
設定することでスマートな処理が可能です。

また、後から元のデータが変更された場合にも対応が可能になります。
行を削除すると参照しているセルその物が消えてしまいますので
以後、意図しない結果が返る可能性があります。
繰り返し利用するような場合はフィルタで対応することをお薦めします。

この回答への補足

ありがとうございました。
皆さんのご回答を元に、出来ました!

補足日時:2007/02/14 02:45
    • good
    • 0

#03です。


>1列目が空白の行(B行)以外が残る状態にしたいのです
であればオートフィルタで絞り込みを行い、まとめて行削除することが可能です。それにも関わらず「フィルタはNG」であればマクロしかありません。よほど頻繁に使用するのでボタン起動できるようにされたいのでしょうか?

一番左側(A列)のセルの値が空白の行を削除するマクロは既出ですので、該当する条件の行を「隠す」マクロを以下に示します。わざわざ式を入力したセルをマクロで削除すると「復活」ができなくなりますし、式の書き方によっては#REF!エラーとなる可能性もありますので、「見えなくする」だけにとどめます。マクロをどこに書くかは#07さんの回答を参考にして下さい。

Private Sub CommandButton1_Click()
Dim idx As Long
For idx = 1 To ActiveSheet.Range("A65536").End(xlUp).Row
If ActiveSheet.Cells(idx, 1).Value = "" Then
ActiveSheet.Cells(idx, 1).EntireRow.Hidden = True
End If
Next idx
End Sub

マクロ実行によって非表示になった行は、見えなくなっている行を含む範囲を選択して「右クリック」→「再表示」で表示することが可能です。

蛇足かもしれませんが、このシートで集計を行う必要があるのであればSUM関数、COUNT関数ではなくSUBTOTAL関数を使用すると良いと思います。SUBTOTAL関数は「非表示の行は集計しない」ですから、「表示された行」だけを集計することが可能です。
    • good
    • 0
この回答へのお礼

ありがとうございました。
皆さんのご回答を元に、出来ました!

お礼日時:2007/02/14 02:45

>尚、セルにはすべて数式が入っていて=で別Sheetからの参照しています。


>このようなものを、ボタンのようなものを作成し、それを押すと、B行以外が残る状態にしたい

色々アイデアは、あります。
A列で並び替えを実施します。今、問題のセルは所謂「空白」ですので、
下(A列、昇順)に集まります。集まったものを一気に削除。

配慮その1:
現状の行の並びが重要であるなら、1列追加して、現状の並びで通し番号を
つけておき、前述の並び替え、削除の後で、この通し番号を使って、オリジナルの並びに戻す。

尚、本件は、下記を前提にしています。
数式が入っていて=で別Sheet・・・・・
=if(xxxx,1,"")
このように、条件が合えば、数値、さもなくば "" をいれる
というような数式を考えています。
目では見えなくとも、何か、入っている場合は、Wendy02さんも言われるように、 SpecialCellsは、使えないです。
目で見えるものを評価するには、Cells(i, 1).Value を使うか、
あるいは、並び替えかな、と思います。

小生も、勉強になりました。
    • good
    • 0
この回答へのお礼

ありがとうございました。
皆さんのご回答を元に、出来ました!

お礼日時:2007/02/14 02:44

A No.5の書き込みをしたものです。


一部表現を修正させていただきます。
前提:
何も入力されていないセル「を含む行」を削除する。
入力されていないセルの定義は、xlCellTypeBlanks
対象範囲は:ActiveSheet.UsedRange.Address

「を含む行」を追記しました。
    • good
    • 0

これで、試していただけますか?


前提:
何も入力されていないセルを削除する。
入力されていないセルの定義は、xlCellTypeBlanks
対象範囲は:ActiveSheet.UsedRange.Address
----------------------------------------------
Sub test()
hani = ActiveSheet.UsedRange.Address
Range(hani).SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
End Sub
----------------------------------------------
注意:8192個以上のそのようなセルは、まずいようです。
できること、できないことを分かって、使えばよいと思いますが・・・・
しかし、その他にも、上記では問題がありました。行内に2つ以上のブランクがあると、Selection.EntireRow.Delete がエラーとなります。
そこで、下記のようなものを、更に、考えました。
--------------------------------------------------
Sub test2()
dim myArray as variant
hani_test = ActiveSheet.UsedRange.Address
myArray = Range(hani_test).Value
r = UBound(myArray, 1)
'myArrayは、単に、対象エリヤの行数を知りたかっただけです。
'rが行数です。

For i = r To 1 Step -1
Cells(i, 1).Select
hani = Range("A" & i & ":" & Cells(i, 255).End(xlToLeft).Address).Address
aa = 999
aa = Range(hani).SpecialCells(xlCellTypeBlanks).Count
If aa <> 999 Then Range(hani).EntireRow.Delete
Next
End Sub

これであれば、問題もなく、安心して使えると思います。
しかし、
aa = 999
aa = Range(hani).SpecialCells(xlCellTypeBlanks).Count
なぜ、カウントが0の時に、aaに0が入らないのか、分かりません。
カウントが0(空白のセルは無い)の場合は、初期値といれた999
がそのまま生きていますので、
Range(hani).EntireRow.Delete
がスキップされます。

補完していただくことを期待します。

参考URL:http://support.microsoft.com/kb/832293/ja
    • good
    • 0
この回答へのお礼

ありがとうございました。
皆さんのご回答を元に、出来ました!

お礼日時:2007/02/14 02:43

(1)なぜフィルタという、エクセルで便利な機能を使わない


質問の書き振りからすると、素人の気まぐれかと思っちゃう。
(2)目視で数値がない行を(CTRL)範囲指定し、行削除しては。行数の多少も質問に書いてない。
(3)関数でもできるが
(A)作業列を使う
 (B)作業列を使わない
どちらも、関数の本来の使い方でなく複雑化するので、回答の式の意味が理解できるか、、質問の書き振りから想像して心配。
(4)もちろんVBAでできますがVBAの作成経験はあるの
(5)数値のない行
数値に拘るの?データが入っていないセル=空白セルのこと?
(6)特定のセル
どういう風に特定を割り出すの?
(7)簡単に
関数での回答が、もし頭にあるなら、行削除は関数ではできないのをご存知か?その結果関数を組み合わせてやるのだが、複雑になる。
(8)特定のセルのある列は決まっている1列にありますか
決まっておれば、また空白セルなら
列指定
編集ージャンプーセル選択ー空白セル
で選べる。
編集ー削除ー行全体
で削除できる。しかし文字列のセルは選択できないよう。
どういう方法があるかもわからない前提で、簡単にとはいえないでしょう。ここが複雑なので簡単にと言う質問ならありえるが。
もう少し回答者のことを考えて質問文を書いてほしい。

この回答への補足

質問が分かりにくく、すみません。
 1 2 3 4 5
A 5 0 0
B
C 5
D 8  9 7 9
のような状態です。
尚、セルにはすべて数式が入っていて=で別Sheetからの参照しています。
このようなものを、ボタンのようなものを作成し、それを押すと、1列目が空白の行(B行)以外が残る状態にしたいのですが…

補足日時:2007/02/12 11:32
    • good
    • 0

>フィルタ等を使用せず、…簡単に削除


フィルタが一番簡単だと思います。「フィルタ等が使えない理由」を補足していただくと良い回答があるかもしれませんよ。

もちろんマクロでも可能ですが、マクロを書くためには条件が足りません
・「特定のセル」とはどこ?
・「数値がない」は「手入力」と「計算式の結果」両方を含む?
・データの範囲(○行目~×行目)はどの列で判定すればよい? 等

これらを想像で補ってマクロを書くことは可能ですが、ponpa22さんに手直ししていただく必要がでますね。

この回答への補足

質問が分かりにくく、すみません。
 1 2 3 4 5
A 5 0 0
B
C 5
D 8  9 7 9
no
のような状態です。
尚、セルにはすべて数式が入っていて=で別Sheetからの参照しています。
このようなものを、ボタンのようなものを作成し、それを押すと、B行以外が残る状態にしたいのですが…

補足日時:2007/02/12 11:30
    • good
    • 0

■手順■


1)該当の列を範囲指定します
2)メニューバーの[編集]-[ジャンプ]-[セル選択]を選択します
3)「空白セル」にチェックして、OK
4)列のうちの空白セルが選択されます
5)その状態で、メニューバーの[編集]-[削除]-[行全体]を選択し、OK
6)もし、この列に数値以外の文字列入力行も削除したいのであれば
7)該当の列を範囲指定します
8)メニューバーの[編集]-[ジャンプ]-[セル選択]を選択します
9)「定数」にチェックして、「数値」のチェックをはずして、OK
10)その状態で、メニューバーの[編集]-[削除]-[行全体]を選択し、OK
    • good
    • 0
この回答へのお礼

ありがとうございました。
皆さんのご回答を元に、出来ました!

お礼日時:2007/02/14 02:42

>>フィルタ等を使用せず


何を使用していいのでしょうか?
または、その逆でもかまいません。

この回答への補足

質問が分かりにくく、すみません。
 1 2 3 4 5
A 10 0 0
B
C 5
D 8 9 7 9
no
のような状態です。
尚、セルにはすべて数式が入っていて=で別Sheetからの参照しています。
このようなものを、ボタンのようなものを作成し、それを押すと、B行以外が残る状態にしたいのですが…

補足日時:2007/02/12 11:24
    • good
    • 0
この回答へのお礼

ありがとうございました。
皆さんのご回答を元に、出来ました!

お礼日時:2007/02/14 02:42

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで特定の行を削除したいのですが。

エクセルで特定の行を一発で削除したいのですが、やり方がわかりません。
どなたか詳しい方お教えいただけませんでしょうか?

やりたいことは、B列に、特定の文字が有れば、その行全部を削除して上方向にシフトしていきたいのですが、マクロとかを使うのでしょうか?
宜しくお願いいたします。

Aベストアンサー

マクロを使う別の方法です。
XXXの部分を特定の文字に置きかえて実行してください。
また、「特定の文字があれば」というのが、その文字列を含む、というのでなくセルの値がその文字列ならば、というのであれば、LookAt:=xlPart の部分を LookAt:=xlWhole に書き換えてください。

Sub DelLines()
  Dim R As Range
  Do
    Set R = ActiveSheet.Range("B:B").Find(What:="XXX", LookAt:=xlPart)
    If R Is Nothing Then Exit Sub
    R.EntireRow.Delete
  Loop
End Sub

Q指定した文字があった場合、その行を削除するマクロが欲しいです

指定した文字があった場合、その行を削除するマクロが欲しいです
Sheet1(Sheet1以外は対象外)のB列に
XYZ
という文字があった場合、その行をすべて削除する
というマクロはどのように作ればいいでしょうか?
お時間ある方アドバイスいただければ幸いです。

Aベストアンサー

手抜きですがこんな感じでどうでしょう。
削除する行が多いなら画面更新を停止した方が良いでしょう。

Sub Sample()
 Sheets("Sheet1").Select
 Do While (True)
  Columns("B:B").Select
  Set mySelect = Selection.Find(What:="XYZ")
  If mySelect Is Nothing Then Exit Do
  Rows(mySelect.Row).Select
  Selection.Delete Shift:=xlUp
 Loop
End Sub

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。

以下のようなプログラムをVBAで作成したいと考えています。

A1のセルに値があれば、その値をB1に返す。
次にA2のセルに値があれば、その値をB2に返す。
A行に値がある一番下のセルまで同じようなことをさせたいと考えています。

VBAは初心者です。
どなかた宜しくお願い致します。

Aベストアンサー

#2さんと似たものですが・・・・参考にしてください。

Sub test001()
Dim i As Long
i = 1
Do While Cells(i, 1) <> ""
Cells(i, 2) = Cells(i, 1)
i = i + 1
Loop
End Sub

Q特定の文字がある行以外を削除するマクロ

特定の文字がある行以外を削除するマクロを作りたいです。

データの範囲はA1からK50000
E列にS01、S02、E03と書いてあるセル以外の行を削除したいです。

E列にはS01~S50、E01~E100というような数値があります。

どうぞよろしくお願いします。

Aベストアンサー

NO5です。
>やってみましたが、かなり時間がかかってしまいました。
画面更新を無効にする事でもかなり時間短縮できますが如何でしょうか。

Sub 行を削除()
Application.ScreenUpdating = False
For i = Cells(Rows.Count, "E").End(xlUp).Row To 1 Step -1
If Cells(i, "E") <> "S01" And _
Cells(i, "E") <> "S02" And _
Cells(i, "E") <> "E03" Then
Rows(i).Delete
End If
Next
Application.ScreenUpdating = True
End Sub

Qエクセルである行以下全部を削除する方法

エクセルである行(もしくは列)以下を全部 削除したいのですが、簡単な方法があれば教えてください。選択して削除するにはあまりにも長く、スクロールしているうちに別のところを指定してしまったりして困っております、
MS office 97 を使用しています、

Aベストアンサー

こんにちは

> 列や行を削除しても空白の行がまた、入ってしまうのはどうやればよいのでしょうか?

 列や行を非表示にするのは、いかがでしょうか?
 例えば、11行目以降を非表示にするには以下の手順です。

1.11行目のセルのどれかを選択
2.Ctrl+Shift+↓
3.メニュー[書式]-[行]-[表示しない]

 11行目以降を再び表示させるには、

1.Ctrl+A(または全セル選択ボタンをクリック)
2.メニュー[書式]-[行]-[再表示]

参考URL:http://www2.odn.ne.jp/excel/

QEXCELのデータで空白列を削除したい

EXCELで列数・行数が毎回変化するデータがあり、この中に数箇所に分かれて空白列が存在します。
この空白列だけをマクロで削除する方法を教えてください。

Aベストアンサー

Sub test01()
With ActiveSheet
x = .UsedRange.Cells(.UsedRange.Count).Column
For i = x To 1 Step -1
If Application.CountA(.Columns(i)) = 0 Then .Columns(i).Delete
Next
End With
End Sub

空白の列のみ削除するサンプルです。
=""等、数式の結果、見えないものは空白とはしていません。

QExcel VBA A列が特定の値以外の場合、その行を削除

教えてください。

A列の値が特定の値以外の場合、
その行を行ごと削除する方法はありますでしょうか?
A列には、
1 タイトル
2 (ブランク)
3 a
4 a
5 b
6 b
7 c
8 c
9 d
10 d
~というふうに2000行辺りまで続きます

例えば、A列の3行目以降の値が b 以外の場合、
3・4・7・8・9・10行を行ごと削除する、ということです。

あまり説明が上手でなくて申し訳ありませんが、よろしくお願いします。

Aベストアンサー

ではVBAのサンプルです。コメントも入れておきました。

Sub test01()
With ActiveSheet 'アクティブなシートについて
x = .UsedRange.Cells(.UsedRange.Count).Row 'xに最終行を取得
For i = x To 3 Step -1 '最終行から3行目まで下から順に
If .Cells(i, 1) <> "b" Then .Rows(i).Delete 'A列が"b"でなかったら削除
Next '繰り返し
End With
End Sub


人気Q&Aランキング

おすすめ情報