- ベストアンサー
Excelについて
Excel2003を使用しています。 以下2件、質問です。 1.例えばF列で0(ゼロ)が入力されている行を削除するには どういった方法が簡単でいいでしょうか? 2.例えばA列に数値と文字列が混在している場合に 文字列が入力されているセルをある特定の数値(例えば0900)に 置き換えるにはどういった方法がいいでしょうか? 以上、よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 (1) オートフィルタを使えば、このようになります。 ご覧の通り、結構、面倒ですが、大量の場合は、これが一番早いかもしれません。なお、0の入っている行全体という意味で取っていますので、EntireRow を使用していまする Sub FindZeroRowDelete() Dim i As Long If ActiveSheet.AutoFilterMode = True Then ActiveSheet.AutoFilterMode = False End If With Range("F1", Range("F65536").End(xlUp)) .AutoFilter Field:=1, Criteria1:="0" On Error Resume Next i = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Count On Error GoTo 0 If i > 0 Then .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete End If .AutoFilter '1行目のチェック If .Cells(1).Value = 0 Then .Cells(1).EntireRow.Delete End With End Sub (2) Sub ReplaceString2Figure() With Range("A1", Range("A65536").End(xlUp)) On Error Resume Next .SpecialCells(xlCellTypeConstants, 2).NumberFormatLocal = "0000" .SpecialCells(xlCellTypeConstants, 2).Value = 900 On Error GoTo 0 End With End Sub なお、Private キーワードは、一般的には、イベントやサブルーチンに使用するものです。なお、セル一つずつ文字列を調べる場合は、VarType でないと、取れないと思います。
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
#4 ミスタイプです。 EntireRow を使用していまする ↓ EntireRow を使用しています。 みっともないので、訂正します。
- siddhaartha
- ベストアンサー率25% (45/175)
2をマクロで書くとこうなります。 ------------------------------------ Private Sub StrToNum() Dim MaxR As Long '最終行を格納する変数 Dim i As Long 'ループカウンタ Const Num As Long = 900 '文字列を上書きする数値を規定 '入力されている最後の行番号を取得 MaxR = Cells.SpecialCells(xlCellTypeLastCell).Row '1行目から最終行までループ For i = 1 To MaxR If (Not IsNumeric(Cells(i, 1).Value)) Then 'A列が数字でなければ規定した数値で上書き Cells(i, 1).Value = Num End If Next i End Sub ------------------------------------ ・・・私はVisualBasic寄りのVBAしか書けないので もっといい方法があるかも知れませんが ご参考までに(^^;)
お礼
回答ありがとうございました<(_ _)> 今回も最後まで親切に教えていただいて助かりました!
補足
こんばんは。 参考までに教えていただいたマクロを使ってみようと思い VBEを開いてコードをコピペさせてもらったのですが いざ実行しようとするとマクロ名の一覧の中にこのマクロが 見当たらないのです。他のマクロは一覧の中にあるのに どうしてなのでしょう? もしおわかりになれば教えていただきたいのですが… よろしくお願いします。
- siddhaartha
- ベストアンサー率25% (45/175)
1.オートフィルタでF列が0の行だけを表示して 一気に行削除が一番簡単だと思います。 2.マクロを使わないのであれば、ちょっと面倒ですが 私ならこうします。 (1)空いている列に数式[=IsNumber(A1)]を入力 (2)(1)を全行にコピー (3)オートフィルタでFALSEの行だけを表示して (4)一気にA1列を特定の数値で上書き
補足
回答ありがとうございます。 1については、やはりオートフィルタが一番簡単なようなので この方法で処理しようと思います。 2についてですが、教えていただいた方法で試してみたところ できました。 ちなみに、マクロを使用するとどんなふうになるのでしょうか? マクロ初心者で勉強中ですので、参考までに教えていただけると 嬉しいです(^^)
- zap35
- ベストアンサー率44% (1383/3079)
1についてはオートフィルタを用いるのが簡単でしょう。F列を選択して「データ」→「フィルタ」→「オートフィルタ」を選択します。F1に▼マークが出ますから、これをクリックしてリストから「0」を選ぶとF列が「0」の行だけが表示されます。 表示された行を削除して下さい 2は意味不明瞭です。 >数値と文字列が混在している とはどういうことでしょうか。
補足
質問2についてですが 数値が入力されているセルもあれば、文字が入力されているセルもある という意味で書いたつもりでした。。。
お礼
回答ありがとうございます。 教えていただいた方法でうまくいきました。