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

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と関連する良く見られている質問

QExcel2007でセルに値があるはずなのに表示されない。

Excel2007を使用しています。
しばしば、セルの中身に値が入っているにも関わらず、
表示されないことがあります。(数式や文字列に関わらず)
そのような時、行や列ごと選択すると表示されるように
なります。
本当に値が入っていないのか、表示されていないのか
まぎらわしいです。
この現象は設定で解決される問題でしょうか?
それとも仕様あるいはバグでしょうか?

説明がわかりずらく申し訳ないですが、
どうかお教え下さい。よろしくお願いします。

OS:Windows XP

Aベストアンサー

おそらくバグでしょう。

私の場合、スクロールすると図形が消えたり、複数シートを選択した状態でプレビューすると、図形がまったっく表示されなかったりします。単独シートでのプレビューなら表示されるのですけどね。

QExcel2010以降でVBA変数名に全角の可否

題名のようなことを考えて、実験的にやってみたのですが、これにまつわる不具合の情報をお持ちでしたら聞かせていただきたいのです。ネット上を漁った限りでは、内部処理がUnicode化されているので問題はないという話と、使えるけどやっちゃダメ的な精神論が出てくる程度で、それが原因でトラブった事例は見かけなかったため、おそらく問題はないだろうと思ってはいるのですが。なおExcel2010より古い環境のことは無視してOKです。

私個人は全角変数名は何となく気味が悪いと思っているくちですが、マクロの引き継ぎを行う必要に迫られ、そこで日本語変数名を使ってみようとしている次第です。特定部署でのみ使用している帳票(印刷するのでデータは50行前後)から、条件に沿ってデータを引っ張ってくるマクロを自作して利用しているのですが、マクロ作者たる私が異動となることとなり、帳票フォーマット変更などのメンテを、残った人員に引き継ぐ必要に迫られています。

部署内に残る人員ではまともにマクロを自作できる者はおらず、かろうじて作られたものを触る程度が可能なくらいです。と言う状況で、残った人員が少しでも修正が容易にできるように、変動要素のあるものは全て定数にしてマクロ先頭に集めたり、しこたまコメントを付けたりはしているのですが、ふと、

「変数名を日本語化したら、入門者には読みやすいのでは?」

と思って実験的にやってみました。こんな感じです。

Const 開始行=10
Dim 終了行 As Long
Dim 行カウンタ As Long

終了行=開始行+30

For 行カウンタ=開始行 To 終了行
(実処理)
Next

これを見て正直なところ、「やべ、俺自身にも解りやすいわwww」って思っちゃいました。これだったら概念説明が非常にやりやすい。動作上も問題ないし、特にやばい話も聞こえてこないなら、このまま行っちゃえと。

なので冒頭でも触れたように、精神論的やっちゃダメ以外の情報を求めます。なお同意意見でもけっこうです。

題名のようなことを考えて、実験的にやってみたのですが、これにまつわる不具合の情報をお持ちでしたら聞かせていただきたいのです。ネット上を漁った限りでは、内部処理がUnicode化されているので問題はないという話と、使えるけどやっちゃダメ的な精神論が出てくる程度で、それが原因でトラブった事例は見かけなかったため、おそらく問題はないだろうと思ってはいるのですが。なおExcel2010より古い環境のことは無視してOKです。

私個人は全角変数名は何となく気味が悪いと思っているくちですが、マクロの引き...続きを読む

Aベストアンサー

苦い経験がありますので、やらないほうがいいです。

Access97のVBAで、変数名に全角を使っていました。Accessのバージョンが上がっても10年以上問題なく使えていました。
Access2007までは、そのまま読み込めていたのですが、Access2010では、全角の変数名を使った部分が欠損して、プログラムが動作しなくなりました。

「銘柄コード」が「銘柄コ」にすべて化けてしまいました。

もともと、全角文字を想定していないシステムですので、このような不備は他の開発環境でもよく見られます。

マイコンの開発環境のMPLAB X IDEを趣味でつかうのですが、これも全角文字が化けることがあります。しかも、特殊な条件の時のみ化けるのでたちが悪いのです。
また、フォルダ名に全角文字が含まれている場合に、パス文字列が化けてちゃんと動作しないこともあります。

Qコマンドボタンの文字が消える!

VB6でアプリケーションを開発しEXEを作成しました。
自作のパソコンなどでは問題ないのですがSOTECのS253LP(OS Win2000Pro SP2)で走らせたところ、コマンドボタンの文字が全て消えてしまいました。
当方では自作のパソコン(3台 スペックは様々)とSOTECが1台だけですので
その他のパソコンでの現象が確認できません。 同じような症状の出ている方や、その直し方など、ご存知であればお答え願います。

#SOTECにWin2000Proを載せること自体間違っているかもしれませんが・・・

Aベストアンサー

Win2000にはVBのランタイムが標準装備されていますが、開発環境のものとバージョンが違うのかもしれません。
とりあえず、開発環境のC:\WINDOWS\SYSTEM (2000ならC:\WINNT\SYSTEM32) から MSVBVM60.DLL と VB6JP.DLLをソーテックにコピーしてみてください。

また、場合によっては、Win98でコンパイルしたプログラムがWin2000で動かないこともあります。

Qエクセルで重複しているデータの抽出のしかたを教えてください。

エクセルで重複しているデータを抽出したいのですが・・。なにぶん初心者なもので簡単な方法があればよいのですが・・。
A列に日付 B列に企業名このデータが300件ほどあります。

 Å列      B列
1月 1日    AAAA社
1月 4日   BBBB社
1月 8日   CCCC社
2月 1日   BBBB社
2月20日    DDDD社
3月 2日   AAAA社

と、あるとしてB列の企業名が重複しているものを抽出したいのですが・・・。この場合 AAAA社とBBBB社ですが。
これを簡単に抽出する方法はないでしょうか?
教えてください お願いいたします。

Aベストアンサー

企業名がセルB2からセルB300まで入力されていると仮定します。
セルC2に IF(COUNTIF($B$2:B2,B2)>1,"*","") を入力し、セルC300までコピーして下さい。すると重複したデータの二番目以降に "*" のマークが付きます。
(注) 数式を下のセルまでコピーするため、COUNTIF($B$2 は絶対参照にして下さい。

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行までとしていますが、必要に応じて変更して下さい

Qエクセル 表を大きく、紙いっぱいに印刷したい

エクセルで表を作りました。
印刷プレビューで確認したところ
用紙に対して表が小さく見栄えがしません。

一つ一ついじればできると思いますが、
簡単に、
用紙いっぱいにフォントも大きくし、表も大きくし、
印刷するやり方はありますか。
教えてください。

Aベストアンサー

CtrlキーとPのキーを同時に押すと「印刷」ダイアログが呼び出せます。その状態でAltキーとWのキーを同時に押すと「印刷プレビュー」が表示されますので、印刷のイメージがつかめます(必ずしもプレビュー通りには印刷されませんが)
印刷プレビュー画面の上にある、設定のボタンを押してあげれば、余白を少なくしたり、拡大縮小印刷をパーセンテージを指定しておこなえたりします。いずれにせよ、プレビューで確認しながら拡大率を決めていけばいいと思います。なお、「拡大縮小印刷」のところに「次のページ数に合わせて印刷をする」というチェックをいれて横1×縦1にしてあげれば自動で拡大縮小印刷ができる場合がありますが、やってみればわかりますが、特に縮小印刷の場合小さくなりすぎたりする場合もあります。

QExcelでマクロ実行中に画面を固定する方法

Excelでマクロ(VBA)を実行しているとお考えください。
内容は他のシートのデータを別のシートにコピー&ペーストするとお考えください。
すると、画面がめまぐるしく動きます。
これをとめる方法をご存知の方教えていただければうれしいです。
(以前、やったことがあるんですが、忘れてしまいました)
(また、検索で調べようとしたのですが、どのようなキーワードで検索すればいいのかわかりませんでした(私のキーワードでは見つかりませんでした))
よろしくお願いいたします。

Aベストアンサー

はじめまして.

以下のコマンドでできると思いますよ。

マクロの最初に
Application.ScreenUpdating = False '画面更新抑止
を入れて、

マクロの最後に
Application.ScreenUpdating = True '画面を更新
を入れる。

こんなのでどうでしょう!?
では。

Qエクセルで数式の結果が反映されない(自動計算になっているのに)

すいません、教えてください。

エクセル(XP)で数式が自動計算されなくなって
しまいました。

  ※ツールのオプションはちゃんと自動計算に
   なっているのに全く反映されません。

今まで全く問題なく作業できていたので
原因が分からず困っています。

数式等のエラーだとは考えにくいです。
と言うのも数式のあるセルをダブルクリックして
選択し、そのままEnterキーを押すと計算結果が
反映されます。
ただ、今まで全て自動計算されていたのが
全く動かなくなってしまったんです。

同じようなトラブルを経験された方、又は
詳しい方、どうかよろしくお願いします。

Aベストアンサー

原因は分からずじまいになってしまいましたが
同じことがありました。

「Officeの救急隊」を試してみましょう。
ボタン一発で全ての設定が元に戻ります。
http://www.vector.co.jp/soft/win95/util/se247118.html
(ツールバーなども初期状態に戻ります)

私の場合はコレで直ってしまいました^^

参考URL:http://www.vector.co.jp/soft/win95/util/se247118.html

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報