Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2788 / 13646 ツリー ←次へ | 前へ→

【65981】マクロについて めぐたん 10/7/12(月) 18:44 質問[未読]
【65983】Re:マクロについて neptune 10/7/12(月) 23:05 発言[未読]
【65986】Re:マクロについて めぐたん 10/7/13(火) 10:00 発言[未読]
【65987】Re:マクロについて あや 10/7/13(火) 12:12 発言[未読]
【65988】Re:マクロについて めぐたん 10/7/13(火) 13:09 発言[未読]
【65989】Re:マクロについて Yuki 10/7/13(火) 13:38 発言[未読]
【65990】Re:マクロについて めぐたん 10/7/13(火) 13:51 発言[未読]
【65993】Re:マクロについて あや 10/7/13(火) 14:11 回答[未読]
【65996】Re:マクロについて Yuki 10/7/13(火) 16:09 発言[未読]
【65998】Re:マクロについて めぐたん 10/7/13(火) 16:30 発言[未読]
【66000】Re:マクロについて あや 10/7/13(火) 16:41 発言[未読]
【66002】Re:マクロについて Yuki 10/7/13(火) 18:55 発言[未読]
【65992】Re:マクロについて neptune 10/7/13(火) 14:09 回答[未読]
【66003】Re:マクロについて めぐたん 10/7/14(水) 17:36 お礼[未読]

【65981】マクロについて
質問  めぐたん  - 10/7/12(月) 18:44 -

引用なし
パスワード
   困っているのでb、教えてください。
下記マクロを作ったのですが、
抽出したデータがないとき、エラーが出てしまいます。
どうしたらいいでしょうか?

Sheets("上期").Select
selection.autofilter field:=124 Criteria1:="上期のみ"
Range("A9:cc5000").Select
(省略)

ご回答お願いいたします。

【65983】Re:マクロについて
発言  neptune  - 10/7/12(月) 23:05 -

引用なし
パスワード
   ▼めぐたん さん:
レスが付きませんねぇ。

エラーの話をするなら
何処でと、Err.Number Err.Descriptionの情報は必須
これが抜けているからかも。

XLのバージョンも書いた方が良さそう。バージョンによりautofilterの
書式が違うかも?

【65986】Re:マクロについて
発言  めぐたん  - 10/7/13(火) 10:00 -

引用なし
パスワード
   説明不足ですみません。

Sheets("(最新)売上明細上期").Select
Selection.AutoFilter Field:=124, Criteria1:=" 上期のみ"

↑ここで抽出したデータが無い場合、
『該当するセルがありません』というエラーメッセージが出ます。

その後、このようなマクロが続くのですが、どのようにすればよろしいでしょうか?

Range("A9:CC5000").Select
  Selection.SpecialCells(xlCellTypeVisible).Select
  Selection.Copy

Sheets("(最新)売上明細年間").Select
  Range("H9").Select
  Selection.End(xlDown).Select
  ActiveCell.Offset(1, -7).Select
  ActiveSheet.Paste
  
Sheets("(最新)売上明細上期").Select
  Range("CM9:DT5000").Select
  Selection.SpecialCells(xlCellTypeVisible).Select
  Selection.Copy
  
Sheets("(最新)売上明細年間").Select
  ActiveCell.Offset(0, 121).Select
  ActiveSheet.Paste
  
Sheets("(最新)売上明細上期").Select
  Rows("8:8").Select
  Range("DE8").Activate
  Selection.AutoFilter
  Selection.AutoFilter

EXCEL2003を使用しています。

【65987】Re:マクロについて
発言  あや  - 10/7/13(火) 12:12 -

引用なし
パスワード
   『該当するセルがありません』というメッセージが出るのは、
該当するセルがない場合、このメッセージが出るようにと
マクロにそのように書かれているからです〜

きっとマクロの中に
 Msgbox 該当するセルがありません
と記述されている部分があるはずです。

掲示板にUPされたマクロでわかる範囲としては

("(最新)売上明細上期")のシートを選択して
オートフィルタでDT列目の、" 上期のみ"のデータを表示させる

今回は、ここで " 上期のみ"のデータがないので
『該当するセルがありません』のメッセージを出すようにしている


エクセルマクロのエラーではなさそうですよ〜。
仕様によるもので、その通りに動いているかとわたしは思います。
どのようにしたらよいかは、めぐたんさんの作業内容によります。


書き込まれた以下のマクロは
仮に" 上期のみ"のデータがあった場合の処理かと思われます。

>Range("A9:CC5000").Select
>  Selection.SpecialCells(xlCellTypeVisible).Select
>  Selection.Copy
>
>Sheets("(最新)売上明細年間").Select
>  Range("H9").Select
>  Selection.End(xlDown).Select
>  ActiveCell.Offset(1, -7).Select
>  ActiveSheet.Paste
>  
>Sheets("(最新)売上明細上期").Select
>  Range("CM9:DT5000").Select
>  Selection.SpecialCells(xlCellTypeVisible).Select
>  Selection.Copy
>  
>Sheets("(最新)売上明細年間").Select
>  ActiveCell.Offset(0, 121).Select
>  ActiveSheet.Paste
>  
>Sheets("(最新)売上明細上期").Select
>  Rows("8:8").Select
>  Range("DE8").Activate
>  Selection.AutoFilter
>  Selection.AutoFilter

【65988】Re:マクロについて
発言  めぐたん  - 10/7/13(火) 13:09 -

引用なし
パスワード
   ▼あや さん:

実行時エラー'1004':
該当するセルが見つかりません。

というメッセージです。

Msgbox 該当するセルがありません
というようなマクロはどこにも見当たらないです。


Range("A9:CC5000").Select
>  Selection.SpecialCells(xlCellTypeVisible).Select←1.
>  Selection.Copy
>
>Sheets("(最新)売上明細年間").Select
>  Range("H9").Select
>  Selection.End(xlDown).Select
>  ActiveCell.Offset(1, -7).Select
>  ActiveSheet.Paste
>  
>Sheets("(最新)売上明細上期").Select
>  Range("CM9:DT5000").Select
>  Selection.SpecialCells(xlCellTypeVisible).Select
>  Selection.Copy
>  
>Sheets("(最新)売上明細年間").Select
>  ActiveCell.Offset(0, 121).Select
>  ActiveSheet.Paste
>  
>Sheets("(最新)売上明細上期").Select
>  Rows("8:8").Select
>  Range("DE8").Activate
>  Selection.AutoFilter
>  Selection.AutoFilter

1.の部分でひっかかるようなので、ここの部分をとばしたいという感じです。

【65989】Re:マクロについて
発言  Yuki  - 10/7/13(火) 13:38 -

引用なし
パスワード
   ▼めぐたん さん:
>
>実行時エラー'1004':
>該当するセルが見つかりません。
>
>というメッセージです。
>
>Msgbox 該当するセルがありません
>というようなマクロはどこにも見当たらないです。

それはエクセルが出しているメッセージだから記述はありませんね。
>
>Range("A9:CC5000").Select
>>  Selection.SpecialCells(xlCellTypeVisible).Select←1.

Range("A9:CC5000")の範囲にはSpecialCells(xlCellTypeVisible)に該当する
セルがないということです。
SpecialCells(xlCellTypeVisible)の意味を調べられてそのエラーが出たとき
該当のシートはどのようになっているか確認してみましょう。

【65990】Re:マクロについて
発言  めぐたん  - 10/7/13(火) 13:51 -

引用なし
パスワード
   ▼Yuki さん:
>Range("A9:CC5000")の範囲にはSpecialCells(xlCellTypeVisible)に該当する
>セルがないということです。
>SpecialCells(xlCellTypeVisible)の意味を調べられてそのエラーが出たとき
>該当のシートはどのようになっているか確認してみましょう。

『抽出したデータ(すべての可視セル)を選択してください』
ということですよね!?
該当のシートはフィルターがオプションで"上期のみ"と等しいとして、
実行された状態で止まっています。

抽出したデータがない時に、この作業をしないようにするためには
どうしたらいいのでしょうか?

Findやgotoをつかってやってみたのですが、
うまく作動してくれませんでした・・・。

【65992】Re:マクロについて
回答  neptune  - 10/7/13(火) 14:09 -

引用なし
パスワード
   ▼めぐたん さん:

>実行時エラー'1004':
>該当するセルが見つかりません。
両方とも求められているんですから、2回に分けないで書きましょね。

その情報が正確なら1004 エラー把握していて
それは無視して他の処理をしたいわけだから

  On Error Resume Next
  Sheets("(最新)売上明細上期").Select
  Selection.AutoFilter Field:=124, Criteria1:=" 上期のみ"
  
  If Err.Number <> 0 Then
    If Err.Number = 1004 Then
      '1004エラーが発生した時の処理を
       '(ここでエラーが出してはいけない)
      '必要に応じerrをclearする。
    Else
      'その他予期せぬエラーが出た時の処理を(ここでエラーが出していけない)
    End If
  End If
    
  On Error GoTo 0

のような処理をする事が多いと思います。

面倒なので解説はしませんので、
ErrオブジェクトのHelpは精読しておいてください。
ちなみにerrオブジェクトでトラップ出来るエラーは実行時エラーで、
トラップ出来ないエラーも、た〜くさんあります。

ちょっと古いですが
[Visual Basic for Applications でのエラー トラップ ]
ht tp://support.microsoft.com/kb/146864/ja

タカがOn Error Resume Nextの1行ですが、良さと弊害を知ってから使って下さいね。

【65993】Re:マクロについて
回答  あや  - 10/7/13(火) 14:11 -

引用なし
パスワード
   ズレた回答していてごめんなさいね。

エラーナンバーが固定なら…

If Err.Number <> 1004 Then

 Range("A9:CC5000").Select
 Selection.SpecialCells(xlCellTypeVisible).Select
 Selection.Copy
 ・
 ・

End If

IF文にて回避すれば良いのかなぁ…
想像で答えている部分が多いので
検討違いならすいません。

【65996】Re:マクロについて
発言  Yuki  - 10/7/13(火) 16:09 -

引用なし
パスワード
   ▼めぐたん さん:
>
>抽出したデータがない時に、この作業をしないようにするためには
>どうしたらいいのでしょうか?

簡単なサンプルです。

sub AAAA()
  With Worksheets("(最新)売上明細上期")
    .AutoFilterMode = False
    With .Range("A1").CurrentRegion
      .AutoFilter Field:=124, Criteria1:=" 上期のみ"
      If .SpecialCells(xlCellTypeVisible).Areas.Count = 1 And _
        .SpecialCells(xlCellTypeVisible).Rows.Count = 1 Then
        MsgBox "データが有りません"
        Exit Sub
      Else
        .Copy Worksheets("(最新)売上明細年間").Range("H9").End(xlDown).Offset(1, -7)
      End If
    End With
  End With
End sub

【65998】Re:マクロについて
発言  めぐたん  - 10/7/13(火) 16:30 -

引用なし
パスワード
   ▼あや さん:
▼Yuki さん:
▼neptune さん:

>簡単なサンプルです。
>
>sub AAAA()
>  With Worksheets("(最新)売上明細上期")
>    .AutoFilterMode = False
>    With .Range("A1").CurrentRegion
>      .AutoFilter Field:=124, Criteria1:=" 上期のみ"
>      If .SpecialCells(xlCellTypeVisible).Areas.Count = 1 And _
>        .SpecialCells(xlCellTypeVisible).Rows.Count = 1 Then
>        MsgBox "データが有りません"
>        Exit Sub
>      Else
>        .Copy Worksheets("(最新)売上明細年間").Range("H9").End(xlDown).Offset(1, -7)
>      End If
>    End With
>  End With
>End sub

データがない時は、『データが有りません』等のメッセージを出さずに、
1.〜4.も実行せず、5.以降を実行する。

データがある時は、そのまま1.以降を実行する。

というようには、できないでしょうか?

最初からこのように質問していればよかったですね。
お手数お掛けしてすみませんが、ご回答お願い致します。

1.Range("A9:CC5000").Select
  Selection.SpecialCells(xlCellTypeVisible).Select
  Selection.Copy

2.Sheets("(最新)売上明細年間").Select
  Range("H9").Select
  Selection.End(xlDown).Select
  ActiveCell.Offset(1, -7).Select
  ActiveSheet.Paste
  
3.Sheets("(最新)売上明細上期").Select
  Range("CM9:DT5000").Select
  Selection.SpecialCells(xlCellTypeVisible).Select
  Selection.Copy
  
4.Sheets("(最新)売上明細年間").Select
  ActiveCell.Offset(0, 121).Select
  ActiveSheet.Paste
  
5.Sheets("(最新)売上明細上期").Select
  Rows("8:8").Select
  Range("DE8").Activate
  Selection.AutoFilter
  Selection.AutoFilter

【66000】Re:マクロについて
発言  あや  - 10/7/13(火) 16:41 -

引用なし
パスワード
   neptuneさんの 

- 10/7/13(火) 14:09 の発言を理解したら

希望通りの動きになりますよ〜

すごく丁寧に書いてくれてはるので

しっかり理解して頑張ってください。

【66002】Re:マクロについて
発言  Yuki  - 10/7/13(火) 18:55 -

引用なし
パスワード
   ▼めぐたん さん:
>
>データがない時は、『データが有りません』等のメッセージを出さずに、
>1.〜4.も実行せず、5.以降を実行する。
>
>データがある時は、そのまま1.以降を実行する。
>
>というようには、できないでしょうか?
>
>最初からこのように質問していればよかったですね。
>お手数お掛けしてすみませんが、ご回答お願い致します。
>
サンプルそのまんまです。
Sub AAAA()
  With Worksheets("(最新)売上明細上期")
    .Select
    .AutoFilterMode = False
    With .Range("A1").CurrentRegion
      .AutoFilter Field:=124, Criteria1:=" 上期のみ"
      If .SpecialCells(xlCellTypeVisible).Areas.Count = 1 And _
        .SpecialCells(xlCellTypeVisible).Rows.Count = 1 Then
        ' 5
        Worksheets(1).AutoFilterMode = False
        .Rows("8:8").Select
        .Range("E8").Activate
      Else
        Worksheets("(最新)売上明細年間").Activate
        ' 1〜2
        .Range("A9:CC5000").Copy Worksheets("(最新)売上明細年間").Range("H9").End(xlDown).Offset(1, -7)
        ' 3〜4
        .Range("CM9:DT5000").Copy ActiveCell.Offset(0, 12)
      End If
    End With
    .AutoFilterMode = False  
  End With
End Sub

【66003】Re:マクロについて
お礼  めぐたん  - 10/7/14(水) 17:36 -

引用なし
パスワード
   ▼neptune さん:
▼あや さん:
▼Yuki さん:

>
>その情報が正確なら1004 エラー把握していて
>それは無視して他の処理をしたいわけだから
>
>  On Error Resume Next
>  Sheets("(最新)売上明細上期").Select
>  Selection.AutoFilter Field:=124, Criteria1:=" 上期のみ"
>  
>  If Err.Number <> 0 Then
>    If Err.Number = 1004 Then
>      '1004エラーが発生した時の処理を
>       '(ここでエラーが出してはいけない)
>      '必要に応じerrをclearする。
>    Else
>      'その他予期せぬエラーが出た時の処理を(ここでエラーが出していけない)
>    End If
>  End If
>    
>  On Error GoTo 0
>
>のような処理をする事が多いと思います。
>

ようやくこのマクロを理解することができ、
処理もできるようになりました。

本当にありがとうございました。

2788 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free