• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAの書き方を教えてください 3)

VBAの書き方を教えてください

このQ&Aのポイント
  • VBAの書き方について教えてください。Sheet1のrange("A1")をVLOOKUPで検索後の文字を取得し、同じ名前のシートを検索し、さらにrange("A1000")をアクティブにしてここからコードをつなげて処理しています。また、range("A4")でVLOOKUPの検索が空白の場合にエラーが発生します。
  • VBAの書き方を教えてください。range("A1")の処理が終わったら、range("A2")の処理に入り、range("A3")とrange("A4")を続けて処理を行っています。しかし、range("A4")でVLOOKUPの検索が空白の場合にエラーが発生してしまいます。
  • VBAの書き方について教えてください。On Error GoToやOn Error Resume Nextを使用してエラーハンドリングを行いたいのですが、うまくできません。どのようにすればエラーハンドリングができるでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

A1から順繰り処理を進めていくのでしたら、各シートをイチイチアクティブにしていく意味が全くありませんが、まぁそこは目をつむって。 sub macro1()  dim h as range  for each h in range("A1:A" & range("A65536").end(xlup).row)   if h <> "" then    on error goto errhandle    application.goto worksheets(h.value).range("A1000").end(xlup).offset(1), true    activecell.resize(1, 2).value = range("J1:K1").value retpos:   end if  next  exit sub errhandle:  msgbox "SHEET " & h.value & " NOT FOUND"  resume retpos end sub #補足 >Sheet1のrange("A1")をVLOOKUPで検索後の文字を取得し マクロのどこにも何もVLOOKUPしてませんので、まぁご説明の無いどこかでうまくできてる事にします。

t-seisan1
質問者

お礼

keithinさん。 前回同様、ご協力ありがとうございます。 msgbox "SHEET " & h.value & " NOT FOUND" が大変役立つコードを教えて頂きましたので、使わせて頂きます。 また、大変シンプルで新しく考え方を見直す良いチャンスでした。 前回同様ですが、また何かあればよろしくお願いします。

その他の回答 (2)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

ANo.1です。 補足みました。 こんな感じで良いんじゃないでしょうか。 Private Sub 記帳_Click()   On Error Resume Next 'エラーが発生したら次の行から再開   For i = 1 To 13 'A1~A13までを対象     nCount = 0     'A列のセルの名前のシートが無いと、エラーになるのでnCountは0のまま     nCount = Worksheets(Cells(i, 1).Value).Index     If nCount > 0 Then 'nCount が0じゃ無いならシートは有る       With Worksheets(Cells(i, 1).Value)         nLast = .Range("A1000").End(xlUp).Row + 1         .Range("A" & nLast).Resize(1, 5).Value = Range("J1:N1").Value       End With     End If   Next i End Sub

t-seisan1
質問者

お礼

mt2008さん。 ありがとうございました。 既存のコードをベースにして頂き、また説明までつけて頂き理解しきれなかったコードが少しわかってきました。 もう少し勉強して行きたいと思います。 また何かあれば、よろしくお願いいたします。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

前の質問のリンクが無いことも有り、やりたい事が良く解らなかったのですが、こういう事でしょうか。 J1、K1セルは、どこのシートのJ1、K1セルか解らなかったので、マクロを起動した時アクティブなシートのセルとしました。 検索したシートのJ1、K1セルにしたい場合は、 = Range("J1") → = .Range("J1") の、様に変えて下さい。 Private Sub 記帳_Click()   For i = 1 To 10     myFlg = False     For j = 1 To Worksheets.Count       If Worksheets(j).Name = Cells(i, 1).Value Then         myFlg = True         Exit For       End If     Next j     If myFlg = True Then       With Worksheets(j)         nLast = .Range("A1000").End(xlUp).Row         .Cells(nLast + 1, 1) = Range("J1")         .Cells(nLast + 1, 2) = Range("K1")       End With     End If   Next i End Sub

t-seisan1
質問者

補足

ご協力ありがとうございます。 先のリンク忘れていました。 1.http://oshiete.goo.ne.jp/qa/8451754.html 2.http://oshiete.goo.ne.jp/qa/8489481.html 詳細を記載いたします。 資材算出と言うシートがあり、ある情報を入力するとA1~A13までのセルに入力したVLOOKUP関数で、資材名が表示されます。別のコードにて資材に関する情報をJ1、K1、L1、M1、N1などに表示させています。 (ここまではできています) A1~A13までの表示された資材(VLOOKUP関数での表示なので、資材がない場合は空白を表示しています)と同じ名前のシートを同じブックから探し出し、A1000を指定→A列の最終行を指定→J1からN1までの情報をA列から右セルに移動しながら入力させる(この部分を2つ分のみ表記しています)→これをA1からA13まで順に繰り返す。 この様な内容です。 質問に書きました様に、空白が2つ続くと実行時エラー9で止まってしまいます。 宜しくお願いいたします。

関連するQ&A

専門家に質問してみよう