• 締切済み

不特定のシートをマクロで削除を

いつもお世話になります WINDOWS7 EXCELL2010 です。 シート「記入」にデーターを入力してそのデーターをいくつかの振分のシートに転記しています。 条件 削除したい 1 0000    の4桁のシート名のいずれかのシートを削除   ※例えば 11月4日のシート名は 1104 の4桁になります。         1月1日は 0101 となります。        今月で言えば 1101 ~ 1130 の30枚のシートがあります。 削除しない 1 文字名   のシートは削除しない 2 1 ~ 12 のシートは削除しない 上記の削除したいの方法は私なりの考えで2通り考えました。 他にいい方法があればおすすめ願えればありがたいです。 その1~ 00 の4桁のシート名が削除の対象ですので、 例えば今月で言いますと ~1031(10月31日分) 先月までのシートをマクロで削除する方法 その2~      添付図のようにB列に○のあるシートのみをマクロにて削除する方法 抽出するマクロは下記です。 Sub アクティブセルからシート名一覧を作成する() Dim sh As Object Dim row_num As Long Dim col_num As Long If MsgBox("アクティブセルから下にシート名一覧を作成してもいいですか?", vbYesNo + vbDefaultButton2) = vbNo Then Exit Sub row_num = ActiveCell.Row col_num = ActiveCell.Column For Each sh In ActiveWorkbook.Sheets Cells(row_num, col_num).Value = sh.Name row_num = row_num + 1 Next sh End Sub 小生の考えの その1~ その2~ または他の方法でいいアイディアがありましたら御指導いただけませんでしょうか。 宜しくお願いします。

みんなの回答

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

>その1~ その2~ または他の方法 他の方法でもよいってことは結局何がヤリタイ/出来たら良いのかというと、何でもいいから4ケタ数字のシートは削除したいってことナンでしょうか。 sub macro1()  dim w as worksheet  application.displayalerts = false  for each w in worksheets   if w.name like "####" then   ’必要に応じてアナタがヤリタイ事を条件として積み込むこと    if left(w.name, 2) <> format(month(date), "00") then     w.delete    end if   end if  next  application.displayalerts = true end sub 一度ご相談は解決で閉じてから、改めて「こういう結果が欲しい/こうなって欲しい」とご相談を書き直し、新しく投稿しなおしてみて下さい。

dorasuke
質問者

お礼

ありがとうごさいました。

dorasuke
質問者

補足

早速の御指導ありがとうございます。 私なりに考えたのは 重くなる いい方法でない などの観点からいくつか考えその上に何か他の方法であれば思った次第です。 再度自分なりの考えをぶつけさせていただきますので可能なら再指導よろしくお願いします。

関連するQ&A

  • 不特定のシートをマクロで削除を ~2

    いつもお世話になります WINDOWS7 EXCELL2010 です。 御指導を仰ぎたいのは、 参照図で言いますとシート名「シート名一覧」のA列に下記のマクロで抽出されたシート名の一覧があります。 このシートのB列に削除したいシートに○(例えばB16 B17)を入れるとマクロでそのシートが削除されるマクロが可能であれば是非ご教授いただけませんでしょうか。 抽出するマクロは下記です。 Sub アクティブセルからシート名一覧を作成する() Dim sh As Object Dim row_num As Long Dim col_num As Long If MsgBox("アクティブセルから下にシート名一覧を作成してもいいですか?", vbYesNo + vbDefaultButton2) = vbNo Then Exit Sub row_num = ActiveCell.Row col_num = ActiveCell.Column For Each sh In ActiveWorkbook.Sheets Cells(row_num, col_num).Value = sh.Name row_num = row_num + 1 Next sh End Sub 宜しくお願いいたします。

  • シートの全てを半角にする

    A列からT列、 行は10000行ほどあるのですが 全てを半角にしたいのですがマクロでないと無理でしょうか? Sub 全てを半角にする() Dim row行 As Long Dim col列 As Long For col列 = 1 To Range("IV1").End(xlToLeft).Column For row行 = 2 To Cells(65536, 2).End(xlUp).Row Cells(row行, col列) = StrConv(Cells(row行, col列), vbNarrow) Next row行 Next col列 End Sub でやるしかないですか? もっと効率のいい方法があったら教えてください!

  • マクロ 特定のシート以外を削除する

    いつも回答して頂きありがとうございます。 特定のシート以外を削除するマクロを作成して動作させたのですが、削除する時に『選択したシートにデータが存在する可能性が・・・』と聞いてきます。これを無視して削除を行わせたいのですがどうすればよろしいでしょうか?御指導の程宜しくお願い致します。 Sub シートの削除() Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "データ元" And ws.Name <> "集計用" Then ws.Delete End If Next End Sub

  • エクセルのマクロで特定フォルダ内のJPGファイルを検索して開きたいので

    エクセルのマクロで特定フォルダ内のJPGファイルを検索して開きたいのですが、うまくいきません。 検索して開くファイルは、アクティブセルの値で始まります。 (例えばアクティブセルが「0000」だとすると、フォルダ内にある「0000りんご.JPG」というファイルを開く。りんごの部分は特定の文字でないためワイルドカードを使用してみましたがうまくいきません) Sub test() Dim P As String Dim Fname As String Fname = ActiveCell.Value P = "パス名\" & Fname & "*.JPG" Shell "Rundll32.exe" & " Shimgvw.dll,ImageView_Fullscreen" & " " & P, vbNormalFocus End Sub どうぞよろしくお願い致します。

  • 特定の文字を含むシートを選択するには

    いつもお世話になっております。 特定の文字を含むシートのデータをコピーするにはどのようにしたらよろしいでしょうか。 具体的には (1)シート名の末尾に"D"を含むシートを選択 (2)選択したシートのデータをコピー (3)コピーしたデータを順次"Sheet1"に貼付 というマクロを組みたいのですが、(1)のところがうまくいきません。 以下のように作成してみました。 Dim sh As Worksheet Dim lr As Long, tlr As Long For Each sh In Worksheets If sh.Name = "*D" Then lr = sh.Cells(ActiveSheet.Rows.Count, 3).End(xlUp).Row sh.Rows("3:" & lr).Copy tlr = Sheets("Sheet1").Cells(ActiveSheet.Rows.Count, 3).End(xlUp).Row Sheets("Sheet1").Range("A" & tlr + 1).PasteSpecial End If Next 4行目の sh.Name = "*D" のところがうまくないようです。 よろしくお願いします。

  • エクセルマクロ 特定の文字列を含む行のみを残す (マクロ修正)

    以下のマクロは、EXCEL2003で 「特定の文字列が含まれている列を削除する」動作をするマクロです Sub Macro1() Const col As String = "A" '文字列が入力されている列 Dim idx As Long Dim keyWord keyWord = Application.InputBox("削除対象の文字列は?", Type:=2) If TypeName(keyWord) <> "Boolean" And Len(keyWord) > 0 Then   For idx = Cells(65536, col).End(xlUp).Row To 1 Step -1     If InStr(Cells(idx, col).Value, keyWord) > 0 Then '    If Application.CountIf(Rows(idx), "*" & keyWord & "*") > 0 Then       Rows(idx).Delete     End If   Next idx End If End Sub このマクロを、 「特定の文字列が含まれている行のみを残し、それ以外を削除する」 というマクロに変更したいと思っています。 是非ご回答お願いいたします。

  • Excel 改ページのマクロ

    同シート内で改ページを設定するマクロを、ここで教えてもらったのですが、改ページを判断するデータの列が関数(vlookup)で持ってきたデータの場合にうまく機能しません。下のマクロに手を加えれば可能でしょうか? Sub Macro4() Const col As String = "A" '改ページを判断するデータの列名 Dim idx As Long Dim sv sv = Cells(1, col).Value For idx = 1 To Cells(65536, col).End(xlUp).Row   If Cells(idx, col).Value <> sv Then     ActiveSheet.HPageBreaks.Add Before:=Rows(idx)     sv = Cells(idx, col).Value   End If Next idx End Sub

  • どなたかマクロ修正お願いします。

    自分なりに 作成してみましたがどうもうまくいきません。 Sub 変換() Dim Sh1 As Worksheet, Sh2 As Worksheet, Sh3 As Worksheet, Dim r As Range Set Sh1 = Worksheets("1") Set Sh2 = Worksheets("2") Set Sh3 = Worksheets("3") Sh3.Select Set c = Cells.Find(What:="9876543", LookAt:=xlWhole) c.Offset(, 1).Activate ActiveCell.Replace What:="中田", Replacement:="中田英寿" End Sub このように作成しましたがうまくいきません。恐らくsheet3のデータはsheet1から( =1!A100 )といったように値を他のsheetから持ってきてるからではないんでしょうか?

  • マクロを組むとこんなエラーが出るようになりました

    捺印君:Vel 1.25→(エクセルのフリーソフトです) PicturesクラスのPasteプロパティを取得出来ません。 予期せぬエラーが発生しました。 とエラーが出ます。 ちなみに組んでいるマクロは下記です Sub 全シートの保護() Dim Sh As Worksheet Dim myPassword As String myPassword = InputBox("パスワードを入力してください", "パスワード") For Each Sh In Worksheets Sh.Protect Password:=myPassword Next End Sub Sub 全シートの解除() Dim Sh As Worksheet Dim myPassword As String myPassword = InputBox("パスワードを入力してください", "パスワード") For Each Sh In Worksheets Sh.Unprotect Password:=myPassword Next End Sub このマクロがおかしいからエラーが出るんですよね? 違うマクロにすれば問題ないでしょうか? ちなみにマクロは「全シートの保護一括解除」と「一括保護」で パスワード付きの物をとなっております。

  • エクセル:シート内に入力があった場合のマクロの書き方

    シート内に入力があった時の処理を作作りたいです。 現状の作り方は、シートのコードにWorksheet_Changeを用意し、 その中に「Target.Addressを取得し、そのアドレスに応じて処理をする」と書き込んでいます。 例えば以下は、入力があったら3列離れた同じ行に同じ内容入力をする、というコードです。 Private Sub Worksheet_Change(ByVal Target As Range)   Dim T_row As Integer, T_col As Integer   T_row = Target.Row   T_col = Target.Column + 3   Application.EnableEvents = False   Cells(T_row, T_col).Value = Target   Application.EnableEvents = True End Sub このコードの作り方だと、1つのセルへの入力にしか対応しないというか、 ドラッグやコピー&ペースト等、複数のセルにまたがった操作をすると動きません。 そういった通常可能な操作にも対応できるように作っていきたいのですが、 その場合どのように書き始めていけばよいでしょうか。 面倒な質問となってしまいましたが、 お時間あればよろしくお願いします。

専門家に質問してみよう