[[20130821102108]] 『複数シートのいらない列の削除』(PON) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数シートのいらない列の削除』(PON)
Windows7 Excel2007

みなさんおはようございます。
自分では考えもつかなかったので,教えてください。

まず部屋の管理をしてます。

A列からD列まで項目名がはいってます。G8に部屋名 G9に管理番号がはいってます。
A-D G8 I8
           集会所  仮眠室    

                        G9   I9
                       10000  20000 
水道         100円   50円           
光          20円   30円
集会使用料      50円   15円

このようなデータが複数列・複数シートにまたがっています。
ちなみに部屋の列の並び順は順不同です。部屋がないときもあります。
しかし,仕事で使うのは 4部屋だけなので,この指定した番号以外
の列を消したいのです。(A−D列は必ず残したいです。)
どうかVBAをおしえいていただきますと幸いです。


 消したい範囲をセルアドレスで説明できますか?
 全シートの E:F、H列とか。

 全シートが同じであれば、手作業でも全シートを選択して一回の削除操作でできます。
 (Mook)

PONです。
MOOKさん

残念ながらバラバラです。

例えば
シート1

部長室 洗面室 事務室

シート2
洗面室 事務室 休憩所
などになっております。


 うーん、説明だけではどこを削除したいのかが特定できません。

 もう少し具体的なサンプルを提示できるでしょうか。
 例えば シート1 のレイアウトはどうなっていて、どこを削除したいのでしょうか。
 (Mook)

Mookさん
ありがとうございます。
AからD列はタイトルがはいってたり,項目名がはっいてます
G列からG列とH列 I列とJ列のようにペアでデータがはいってます。

例(A-D列)     G列H列

○○棟       集会所
          800←管理ナンバー

光熱費        100円

集会室使用量     200

合計         300円

こういうデータが複数列複数シートにあるのですが,私の欲しいのは管理ナンバ−が特定の物(数個)
ですのでそれ以外のデータ(列)を削除したいです。その際にA−D列は残しときたいです。
 


 では、A:D 列は保持、E列以降9行目が特定の値(管理番号)以外の列を削除
 でよいのでしょうか。
 (Mook)

Mookさん
ありがとうございます。
まさしくいわれるとおりです。

 こんなことでしょうか。
 (Mook)

 Sub Sample()
    Const KEEP_CODE = 800  '// 保持する管理番号

    Dim ws As Worksheet
    Dim c As Long
    Dim lastCol As Long
    Application.ScreenUpdating = False
    For Each ws In Worksheets
        lastCol = ws.Cells(9, Columns.Count).End(xlToLeft).Column
        If lastCol > 4 Then
            ws.Range(ws.Cells(1, lastCol + 1), ws.Cells(1, Columns.Count)).EntireColumn.Clear
            For c = lastCol To 5 Step -1
                If ws.Cells(9, c).Value <> KEEP_CODE Then ws.Columns(c).Delete
            Next
        End If
    Next
    Application.ScreenUpdating = True
 End Sub

MOOKさま
ありがとうございます。

大切な事をお伝えしませんでした。管理ナンバーがはいっているセルは結合セルでした。
そのせいか,うまく行かなかったのでもう一度御指示をいただけたらと思います。


  If ws.Cells(9, c).Value <> KEEP_CODE Then ws.Columns(c).Delete
 を
  If ws.Cells(9, c).MergeArea.Cells(1, 1).Value <> KEEP_CODE Then ws.Cells(9, c).MergeArea.EntireColumn.Delete
 に変更。
 (Mook)

MooKさま

PONです。確認させていただきました。
うまくいきました。
ちなみに,シートが沢山あるので,管理番号で該当しないシートは削除したいのですが
VBAを教えていただけませんでしょうか

ぜひお願いします。


        If Application.CountIf(ws.Range("E9").Resize(1, Columns.Count - 4), KEEP_CODE) = 0 Then
            Application.DisplayAlerts = False
            ws.Delete
            Application.DisplayAlerts = True
        Else
      今の For 〜 Next 内の処理
        End If
 (Mook)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.