- ベストアンサー
エクセルマクロで条件に当てはまるシートの名前
何日も試行錯誤しましたが、わからないので教えてください。 あるファイルがあります。 そのファイルには数十枚のほぼ同じ形のデータが入ったワークシートがあります。 それぞれのワークシートには、ある範囲(例 A5:D10)にデータが入っていたりいなかったりです。 そこで、その範囲にデータが無ければ、別のブックの例えば「リスト」というシートに一覧にして、そのシートの名前を書き出したいのです。 それをマクロで記述するやりかたがどうやってもうまく行きません。 どうかお教えください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
●「データが入ってる」とは,その範囲に「生データが記入」してあったり無かったりするという意味で良いのか ●そもそも「一つも入ってない」「部分的に入っている」「全部埋まっている」など,どんな状態を調べたいのか といった部分が説明不足のようです。 準備: マクロブックと「あるブック.xlsx」を開いておく マクロブックに「リスト」シートを用意,次のマクロを登録,実行する sub macro1() dim w as worksheet workbooks("あるブック.xlsx").activate for each w in activeworkbook.worksheets ’生データの有無を検査 if application.counta(w.range("A5:D10")) =0 then ’<24 とすると部分空白 thisworkbook.worksheets("リスト").range("A65536").end(xlup).offset(1) = w.name end if next end sub
その他の回答 (2)
- kkkkkm
- ベストアンサー率66% (1719/2589)
No1です 「あるファイル」にコードを記載するのでしたら ThisWorkbook.Activate を最初の方に入れておいた方が安全です。 また、別のファイルから「あるファイル」や「別のブック」を操作するのでしたら、たとえば Sub Example() Dim i As Integer, j As Long Dim c As Range j = 1 With Workbooks("あるファイル.xlsx") For i = 1 To .Sheets.Count For Each c In .Sheets(i).Range("A5:D10") If c.Value = "" Then Workbooks("別のブック名.xlsx").Sheets("リスト").Cells(j, "A") = .Sheets(i).Name j = j + 1 Exit For End If Next Next i End With End Sub などのようにしてください。
補足
早速ありがとうございます。 明日会社に行ったらやってみます。
- kkkkkm
- ベストアンサー率66% (1719/2589)
たとえば、その範囲内のセルに一つでもデータがなければリストに出すのでしたら以下のコードでいかがでしょう。 Sub Example() Dim i As Integer, j As Long Dim c As Range j = 1 For i = 1 To Sheets.Count For Each c In Sheets(i).Range("A5:D10") If c.Value = "" Then Workbooks("別のブック名.xlsx").Sheets("リスト").Cells(j, "A") = Sheets(i).Name j = j + 1 Exit For End If Next Next i End Sub
お礼
私の説明不足から、残念ながらこのコードでは抽出ができませんでしたが、大変素早いご回答をありがとうございました。
お礼
私の説明不足で他の回答者の方にもご迷惑をお掛けしました。 この方法でスパッとうまくいきました。 どうもありがとうございました。
補足
確かに説明不足ですみませんでした。 その範囲に全くデータの入っていないシートと、 その範囲に少しでもデータの入っているシートの二種類があります。 その全くデータの入っていない方のシートの名前のリストがほしいのです。 教えていただいた物は明日会社に行ったら試してみます。 ありがとうございます。