Excel VBA質問箱 IV

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

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


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

【27866】またまた教えてください! クロリン 05/8/22(月) 17:25 質問[未読]
【27876】Re:またまた教えてください! りん 05/8/22(月) 20:40 回答[未読]
【27913】Re:またまた教えてください! クロリン 05/8/24(水) 9:07 お礼[未読]
【27880】Re:またまた教えてください! ちくたく 05/8/23(火) 9:07 発言[未読]
【27914】Re:またまた教えてください! クロリン 05/8/24(水) 9:09 お礼[未読]

【27866】またまた教えてください!
質問  クロリン  - 05/8/22(月) 17:25 -

引用なし
パスワード
   ”2”を検索するたびに下記作業をDo Loopで作業するマクロなんですが、"2"がなくなると
『実行時エラー'91':
   オブジェクト変数またはWithブロック変数が設定されていません。』
と出てしまいます。
データの結果はあっているので、このままでも良いのですが、このようなエラーが出ずに例えばMsgBoxなどを表示し作業を終了する方法はありませんか?
初心者なので詳しいことが分からずすみません。
その他アドバイスありましたら合わせてよろしくお願いいたします。

Sub 2.の場合()

  Workbooks("T_月次細分別マスタ.xls").Worksheets("2.").Activate

  Dim y As Integer
  Dim x As Integer
  Dim z As Integer
  
  Do
  
  Columns("cw:cw").Select
  
  y = Selection.Find(what:="2", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False).Activate
  
  ActiveCell.Offset(2, 0).Select
  
  Selection.EntireRow.Insert
  ActiveCell.Offset(0, -38).Select
  
  Selection.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"
  
  Selection.Copy
   
  For x = 1 To 11
   
  ActiveCell.Offset(0, 1).Select
  ActiveCell.PasteSpecial

  Next x
  
  Range(Selection, Selection.End(xlToLeft)).Select
  Application.CutCopyMode = False
  Selection.Copy
  ActiveCell.Offset(-2, 0).Select
  
  Selection.PasteSpecial Paste:=xlPasteValues
  
  ActiveCell.Offset(1, 0).Select
  
  For z = 1 To 2
  Selection.EntireRow.Delete
  Next z
  
  ActiveCell.Offset(-1, 0).Select
  ActiveCell.Offset(0, 38).Select
  ActiveCell.ClearContents

  Loop
  
End Sub

【27876】Re:またまた教えてください!
回答  りん E-MAIL  - 05/8/22(月) 20:40 -

引用なし
パスワード
   クロリン さん、こんばんわ。

>”2”を検索するたびに下記作業をDo Loopで作業するマクロなんですが、"2"がなくなると
>『実行時エラー'91':
>   オブジェクト変数またはWithブロック変数が設定されていません。』
>と出てしまいます。
エラー原因はここと同じですね(最近のツリーですが)。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=27577;no=27583;id=excel

>初心者なので詳しいことが分からずすみません。
>その他アドバイスありましたら合わせてよろしくお願いいたします。
普通についてくるヘルプのFindメソッド(FindNextメソッド)の使用例を見れば、エラーにならずにループする方法が書いてあります。

Sub 場合再現2()
  Dim c1 As Range, ca As String, II As Integer
  With Workbooks("T_月次細分別マスタ.xls")
   .Activate '
   With .Worksheets("2.")
     .Activate '
     '一つ目検索(部分一致?)
     Set c1 = .Columns("cw:cw").Find(what:="2", LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, MatchByte:=False)
     'Findメソッドの使い方をそのまま使用(変数のみ一部変えてあります)
     If Not c1 Is Nothing Then '一つ目がみつかったら
      ca = c1.Address
      Do
        RR& = c1.Row '行番号取得
        'Bk列 to Bv列
        For II = 63 To 74
         With .Cells(RR&, II)
           '縦に拡張したRangeの合計値を直接セルに入れる(ワークシート関数使用)
           .Value = Application.WorksheetFunction.Sum(.Resize(2, 1))
         End With
        Next
        .Rows(RR& + 1).Delete '一つしたの行を削除
        c1.ClearContents '消去
        '
        Set c1 = .Columns("cw:cw").FindNext(c1) '次を検索
      Loop While Not c1 Is Nothing
     End If
   End With
  End With
End Sub

ActiveとかSelectをはずしていくとこんな感じです。
行の挿入は、数値計算用の一時使用のようなので、直接計算値をセルに入れました。

【27880】Re:またまた教えてください!
発言  ちくたく  - 05/8/23(火) 9:07 -

引用なし
パスワード
   こんにちは。

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=27862;id=excel
と、同じですので、こちらに返信致しますね。

勉強方法ということでしたが、
私も元Perl書きのVBAは自己流ですので、
私がお答えするにはおこがましいです。

例えば、りんさんのコードとクロリンさんのコードと見比べて見てください。
なるほど、とか、意味がわかんない、とかでてくると思います。
それをヘルプで調べたり、ネットで調べたりするのも勉強方法のひとつかと。

【27913】Re:またまた教えてください!
お礼  クロリン  - 05/8/24(水) 9:07 -

引用なし
パスワード
   りん さん
返信遅くなりましたがどうもありがとうございました。勉強になりました。

【27914】Re:またまた教えてください!
お礼  クロリン  - 05/8/24(水) 9:09 -

引用なし
パスワード
   ▼ちくたく さん:
おはようございます。色々アドバイスまでしてもらってありがとうございました。
大変勉強になりました。

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