エクセルのマクロを組んでいて、なぜか実行すると意図しない文字が消えてしまいます
至急解消したいので、どうぞよろしくお願いします

N8から、数値が一列に並んでいて、「0」を消して行くという目的です
下記のような組み方をしています

すると、P列1行目からAF列まで入っていた文字が消えてしまいます
これを解消する方法を教えて下さい

'0を消す

Const intCriteria As Integer = 0

With Cells(8, 14).CurrentRegion
On Error GoTo errhandler
.AutoFilter Field:=14, Criteria1:=intCriteria
.Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
ActiveSheet.AutoFilterMode = False
Exit Sub
errhandler:
ActiveSheet.AutoFilterMode = False
MsgBox intCriteria & "はありません。"

A 回答 (2件)

こんばんは。



>なぜか実行すると意図しない文字が消えてしまいます

With Cells(8, 14).CurrentRegion
 この部分が問題です。

おそらく、セルが続いているからなのですが、CurrentRegion ではなく、8行目を左端にするように決めてください。CurrentRegion では曖昧です。

本来は、CurrentRegion のままでもできるのですが、回答者側では、レイアウトが分かりませんので、CurrentRegion のままで、コードを書くことはできません。

少し手直ししてみました。
'--------------------------------------

Sub Test1()
  Const intCRITERIA As Integer = 0
  On Error GoTo ErrHandler
  '念のため
  If ActiveSheet.AutoFilterMode = True Then
    ActiveSheet.AutoFilterMode = False
  End If
  With Range("N8", Range("N65536").End(xlUp).Offset(, 18)) '右は決めてください。現在は、AFまで
    .AutoFilter Field:=14, Criteria1:=intCRITERIA
    .Offset(1).Resize(.Rows.Count - 1). _
    SpecialCells(xlCellTypeVisible).EntireRow.Delete
  End With
  ActiveSheet.AutoFilterMode = False
  Exit Sub
ErrHandler:
  ActiveSheet.AutoFilterMode = False
  MsgBox intCRITERIA & "はありません。"
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
もともとの構文をなおして下さり、私にも解り易い組み方をしてくださいました。

お礼日時:2009/05/27 03:22

>、「0」を消して行くという目的です


下のコードを見るとN列のセルの値で0の行を削除するではないか。表現は正確に。
ーー
難しいフィルタたやxlCellTypeVisible
を使っているから勘違いが起こっているのでは。
参考
私は削除をやるときはForNextを使い、下行からやっている。上からやると大変。
簡単に
Sub test01()
d = Range("N65536").End(xlUp).Row
MsgBox d
For i = d To 1 Step -1
If Cells(i, "N") = 0 Then Cells(i, "N").EntireRow.Delete
Next
End Sub
で出来るが。
    • good
    • 0
この回答へのお礼

ありがとうございます。
P列から文字が消えなくなりました。

お礼日時:2009/05/27 03:17

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

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

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

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

Q「仲良しであること」を表す漢字1文字

タイトル通り、「仲良しであること」を1文字で表せる漢字を探しています。この場合の「仲良し」は男女間なのですが、「恋人同士として仲良し」なのではなく「友達として、チームとして仲良し」を意味します。ちなみにこの漢字1文字は、オリジナルTシャツのデザインにする予定です。

自分なりに考えてみると「和」くらいしか思いつかないのですが、それではありきたりなのでもう少しひねった漢字にしたいと思っています。他に「懇ろ」も思いつきましたが(「ろ」は入れません)、これだと「友達として仲良し」ではなくなってしまうなぁ、と思いました。

何かいい漢字がありましたら、あるいは意味から漢字を調べられるようなサイトがありましたら、ぜひ教えてください。よろしくお願いします。

Aベストアンサー

・藹(和気藹々)

・欒(団欒)

・間を○で囲って「仲間」をイメージ

・良を○で囲って「仲が良い」をイメージ

QExcel VBAにて、SpecialCells(xlCellTypeVisible) に関する質問

Excel VBAにて、SpecialCells(xlCellTypeVisible) に関する質問です。

セル ("A1:B7")に表があります。

ab
11
11
22
22
33
33

下記のVBAにて、temp2の値が、1となります。これが分かりません。
当方、欲しいのは、オートフィルタ後の見えている行の数です。

temp1=6は、オートフィルタで、選択されたセルs+ヘッダの計6こということで理解しています。
temp3=2は、列の数として、合っています。

Sub Macro1()
Dim aa As Range
Set aa = Range("A1:B7")
aa.AutoFilter Field:=2, Criteria1:="2"
temp1 = aa.SpecialCells(xlCellTypeVisible).Cells.Count 'temp1=6
temp2 = aa.SpecialCells(xlCellTypeVisible).Rows.Count 'temp2=1
temp3 = aa.SpecialCells(xlCellTypeVisible).Columns.Count 'temp3=2
End Sub

考え方として、間違ってはいないと思うのですが、行の数を求めるには、どのようにすれば良いでしょうか?

Excel VBAにて、SpecialCells(xlCellTypeVisible) に関する質問です。

セル ("A1:B7")に表があります。

ab
11
11
22
22
33
33

下記のVBAにて、temp2の値が、1となります。これが分かりません。
当方、欲しいのは、オートフィルタ後の見えている行の数です。

temp1=6は、オートフィルタで、選択されたセルs+ヘッダの計6こということで理解しています。
temp3=2は、列の数として、合っています。

Sub Macro1()
Dim aa As Range
Set aa = Range("A1:B7")
aa.AutoFilter Fiel...続きを読む

Aベストアンサー

こんにちは。

>temp2 = aa.SpecialCells(xlCellTypeVisible).Rows.Count 'temp2=1

Rows というものは、あくまでも、ひとつまとまりになったものの行の範囲のことですから、飛び飛びになったAreas(Rangeの集合体)の状態では、その先頭のAreaのひとつしか数えません。

a  b
2  2
1  1
2  2
2  2
3  3
3  3

だから、この場合は、2になるはずです。

以下の考え方で、見比べてみてください。ひとつは、列に対して、もうひとつは、Area に対してカウントしています。

  temp4 = aa.Resize(, 1).SpecialCells(xlCellTypeVisible).Cells.Count

For Each a In aa.SpecialCells(xlCellTypeVisible).Rows.Areas
  temp5 = temp5 + a.Rows.Count
Next

Q漢字3文字の名前

もうすぐ女の子を出産予定です。
漢字3文字の名前を考え中ですが、3文字の名前って、書くときに長すぎたりバランスが取りにくかったりするものでしょうか。
ちなみに苗字は漢字2文字です。
私自身は漢字2文字の名前なので良くわからなくて・・・。
ご自身のお名前が漢字3文字の方、お子さんのお名前が漢字3文字の方、よければコメントをお願いします♪

Aベストアンサー

私自身が三文字です。

苗字や、三つの漢字の画数にもよりますが、
一般的に三文字の漢字で特に不都合を感じたことはありません。
バランスもとりにくいと思ったことはないです。

ただ子供の頃から、もし将来結婚して苗字が変わるなら、
読みが三文字で漢字も三文字(例えば佐々木さんとか)の人とは
結婚したくないな~と、思っていました。苗字も名前もすべて一文字
ずつ書くのは、何となくですが、当て字というか、
ヨロシクを夜露四苦と書くようなイメージがあって・・・
(完全に主観的な感想です^^;)

以外に便利だと思うのは、たくさんの名前の中から自分の
名前を探さなければならないような場面(学生時代等はよく
ありました。名簿とか。)で、三文字の名前って、
すごく探しやすくて良かったです(笑)。
二文字の子が多い中で、三文字が並ぶとぱっと目が行きますから。

Q「Debug.Print i = i + 1」がFalseになる。

Sub test()
Dim i As Long
i = 0
Debug.Print i = i + 1
End Sub
を実行すると
False
がイミディエイトウインドウに表示されます。
理由が知りたいです。
よろしくお願いします。

Aベストアンサー

Printステートメントの outputlist並びの=が、代入式ではなく比較式と評価、実行されるためでしょうね。
演算子は式のリストに含められ、算術演算子、比較演算子、論理演算子等色々ありますが、代入記号はリスト項目にはありませんので、エラーとならないのは演算子とみなしているからですね。

Print i = i + 1 の結果は、0と1の比較なのでFalse
Print i = i とすると、0と0の比較なのでTrue
Print i, i + 1の場合は、変数と数式なので 0と1
という結果になるはずです。
 

Qこの文字(アート・デザイン)の名称を教えてください。

5年ほど前、軽井沢のプリンスショッピングプラザ(アウトレット)で学生風の方が露天商のような形で商売をしていました。商品は客の名前をデザインされたアートな文字で書いてくれるというものでした。情報が少なくて申し訳ないのですが、知っている方がおりましたら教えてください。
【その文字について】
・幅5cm程度のスポンジのようなものに原色系の顔料を染みこませて、虹のような色遣いで書く。
・基本的にはアルファベットであるが、漢字でも書いてくれるようだった。
・文字の一つ一つに植物や鳥が描かれている(熱帯系のデザインに見える)。
・1枚1000円ぐらいで書いてくれた。
・とてもおめでたい(幸運を呼ぶ)文字らしい。

参考になるサイト等ありましたらご紹介ください。よろしくお願いいたします。

Aベストアンサー

No.1の回答者です。

違かったですか…。他には知らないですね。すみません。

今回は、

>当時「花文字」以外の呼び名を聞いたような気がしているのですが・・・

の補足回答です。質問の回答ではないので、あしからず。

「花文字」という呼び名のほかには、
「花鳥文字」「吉祥花文字」「開運風水花文字」「花鳥書法」「虹書法」などあるようです。(種類が違うのかもしれませんが…)


そういえば、

>学生風の方が露天商のような形で商売をしていました

ということなのですが、
その学生風の人のオリジナルという可能性もあるのでは?とも思ったんですが。


最後に、ほかに「花文字」に関するサイトを見つけたので紹介しておきます。
もはや関係のないものなので、参考という程度に。

http://www.asia-jps.com/hana01.html

http://kotobukimiyuki.at.infoseek.co.jp/miyukiss/hanamoji.jpg

http://www.d-word.jp/pdt_related1/

http://www.giwado.com/order/kachomoji.html

No.1の回答者です。

違かったですか…。他には知らないですね。すみません。

今回は、

>当時「花文字」以外の呼び名を聞いたような気がしているのですが・・・

の補足回答です。質問の回答ではないので、あしからず。

「花文字」という呼び名のほかには、
「花鳥文字」「吉祥花文字」「開運風水花文字」「花鳥書法」「虹書法」などあるようです。(種類が違うのかもしれませんが…)


そういえば、

>学生風の方が露天商のような形で商売をしていました

ということなのですが、
その学...続きを読む

Q0割る0=#DIV/0! を0%と表示させるには?

標記の件、質問いたします。

エクセル【2003、2007】で

0/0=#DIV/0! となります。

やりたい事は、

0/0=0% と表示をさせたいです。

ご存知の方、いらっしゃましたら、宜しくお願いします。

Aベストアンサー

下記の2つのうちどちらかの方法が在る
(1)一旦割り算はさせて、結果がエラーだったら(ISERROR関数)0を返す書き方
(GoogleででもISERROR関数やISERR関数で照会のこと)

(2)1セル同志の割り算だけで、エラーが出るのは、分母が0の場合だけという数学的な智識を動員して、
分母が0かどうか判別する。=IF(B1=0,0,A1/B1)
(B1が空白セルでも、関数の中では0と同じ扱いをしてくれるので空白か、は略すことが出来る。)
%はセルの表示設定でやるほうが良いだろう。
ーー
本件よくある陳腐な質問ですよ。
Googleででも「エクセル 割り算 エラー」で照会して見よ。

Q漢字の他に、漢字のように何万字もあるような複雑な文字ってあるんでしょう

漢字の他に、漢字のように何万字もあるような複雑な文字ってあるんでしょうか?

やっぱり、漢字が世界で最も文字数の多い文字なんでしょうか?

Aベストアンサー

 文字には大きく分けて二種類あります。音(意味がない)によるものと語によるものです。世界の文字を全部勉強した訳ではありませんが、文字組織からだいたいの見当はつきます。

(1)音をあらわすもの。
  音素文字、いわゆるアルファベットはその例。母音を表す文字と子音を表す文字で総数50以下。

  音節文字、日本語の仮名はその例。総数は多くても150以下

(2)語を表すもの。表語文字、漢字はその例。1994年の『中華字海』では、85,568字。日本の常用でも2,000字程度。

>>やっぱり、漢字が世界で最も文字数の多い文字なんでしょうか?

 多分そうだろうと思います。

http://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97

QAND関数 引数が0以外の値がTRUE,0がFALSEとみなされる の意味について

AND関数の注意点に、質問タイトルが書いてありました。
全文は以下の通りです。
引数が数値の場合には、0はFALSE、それ以外の値はTRUEが引数に指定されたものとして計算されます。

AND関数は全てがTRUEのとき、TRUEを返す関数だと思っています。
FALSEを指定するとは?
ここでのFALSEが完全一致、という意味のFALSEでしょうか?
???
混乱しています(-_-;)
お分かりになる方ご教授くださいませ。
できたら 例など添えていただけるとありがたいです<(_ _)>

Aベストアンサー

>変数aの値が0である場合にはこのAND関数はFALSEを返す、ということでしょうか?
その通りです。
言語的には、数値と数値以外を比較する事はできないので、内部的には、FALSEの値
として0が使われます。
#TRUEは言語によって、1または-1が使われます。

Qロゴや文字のデザイン。

漢字やひらがな、英語などデザイン風に少しデフォルメして書きたいのですがどのようにかけばかっこよく見えるでしょうか。
よく、路上の壁面に書いてあるような文字の書き方(特徴)などわかるかたおしえてください。
文字がなんて書いてあるかが少しわかんないくらいにしたいのですが。
ロゴのようなものでも良いです。
最近の10代20代くらいの人が好きそうな感じで…
よろしくおねがいします。

Aベストアンサー

グラフィティ(らくがきと言う意味で)と呼ばれる文字ですね。かっこ良く、なんて書いてあるかがわかんないくらいの文字が書けるように、みんなひたすら紙に書いて練習しているのだと思います。

当たり前ですが、シャッターやコンクリの塀、人の迷惑になる場所に書くのは犯罪ですので、そういった場所に書くのは絶対にやめましょう。

こんなところとかご参考に
http://www.11-d.nu/

以下のサイトからは、PLAY→好きな英字入力で作れます。

参考URL:http://www.mindgem.nu/graffiti.html

Qエクセル:マクロ「Application.CutCopyMode = False」って?

エクセルのマクロを記録していると

「Application.CutCopyMode = False」

というものがよく出てきますが、これは何でしょう?
どういう意味のものかわかりません。
削除しても差し支えないのもでしょうか?

Aベストアンサー

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
Range("A1").Select
Selection.Copy
Range("A2").Select
Application.CutCopyMode = False
ActiveSheet.Paste ← ココでエラー
------------
ご自分で、セルをコピーしてみると分かると思いますが、コピーした範囲が点線で点滅されます。
「Application.CutCopyMode = False」をすると、
その点滅がなくなります。

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
...続きを読む


人気Q&Aランキング

おすすめ情報