- ベストアンサー
Excelで周期的に列を削除する方法
Excel2007を使用しています。 データの整理で、周期的に列を削除する方法を探しています。 具体的には、Fast samplingで10点、Slow samplingで1点とるというような計測プログラムのデータで、Slow samplingのデータのみを抽出しようとしています。 そのため、10列削除して、11列目を残し、12列目から10列削除して、22列を残し・・・と周期的に抽出する必要があります。 マクロなどを使ったことがないほどの初心者です。 ご教授、よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは! 元データに手を加えるのではなく、別Sheetに11列ごとコピー&ペーストではどうでしょうか? 仮にSheet1のデータをSheet2にコピー&ペーストする一例です。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim j As Long, cnt As Long, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") For j = 11 To wS1.Cells(1, Columns.Count).End(xlToLeft).Column Step 11 cnt = cnt + 1 wS1.Columns(j).Copy wS2.Cells(1, cnt) Next j End Sub 'この行まで ※ 通常、行方向にデータがあることが多いのですが、 質問では「列」となっていますので、列方向で操作しています。 ※ 1行目のデータ数で最終列を判断していますので、 1行目は項目等何らかのデータが入力されているという前提です。m(_ _)m
その他の回答 (3)
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
'見出しの文字列で判断できれば、、、 Option Explicit Sub Samplling() Const xSelect_Del = "Fast sampling" '削除したい列の見出し Const xHead = 1 '見出しの行 Dim xCol_Left As Long Dim xCol_Right As Long Dim kk As Long With ActiveSheet.UsedRange xCol_Left = .Column xCol_Right = .Columns(.Columns.Count).Column For kk = xCol_Right To xCol_Left Step -1 If (Cells(xHead, kk).Value = xSelect_Del) Then Columns(kk).Delete End If Next End With End Sub
お礼
質問サイトを使ったことがなく、回答があるとメールに通知が来ると思っておりまして、お礼が遅くなりました。すぐに回答頂いたのに、申し訳ございません。プログラミングのどこを改変すればよいのかが分からず、実行がかないませんでした。これから学んで行きたいと思います。ご教授ありがとうございました。
Sheet1 の 1列目から 10列削除して、11列目を残し、12列目から 10列削除して、22列目を残し・・・と周期的に Sheet2 に抽出する Sheet2!A1!: =INDEX(Sheet1!1:1,11*COLUMN()) Sheet1 の 1行目から 10行削除して、11行目を残し、12行目から 10行削除して、22行目を残し・・・と周期的に Sheet2 に抽出する Sheet2!A1: =INDEX(Sheet1!A:A,11*ROW())
お礼
質問サイトを使ったことがなく、回答があるとメールに通知が来ると思っておりまして、お礼が遅くなりました。すぐに回答頂いたのに、申し訳ございません。頂いた回答の中でもっともプログラミングがシンプルで、おそらく一番スマートな方法をご教授いただいたのだと思います。
- keithin
- ベストアンサー率66% (5278/7941)
手作業をそのままマクロに書き写すと、だいたいこんなカンジになります。 手順: ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける sub macro1() range("A1").select start: if selection.range("A1")="" then exit sub selection.range("A:J").delete shift:=xlshifttoleft selection.range("B1").select goto start end sub ファイルメニューから終了してエクセルに戻る データシートを開いてマクロを実行する。 #実際にはもうちょっと簡単には、新しいマクロの記録で 11列目、22列目、33列目…をコントロールキーを押しながら飛び飛びに最大限列選択しておき、コピーしてシート2のA1に貼り付ける といったマクロを使うのでも、十分役に立ちます。
お礼
質問サイトを使ったことがなく、回答があるとメールに通知が来ると思っておりまして、お礼が遅くなりました。すぐに回答頂いたのに、申し訳ございません。丁寧なご説明、ありがとうございました。実際にプログラミングを動かしてみて、マクロの有用性を実感しました。勉強していきたいと思います。
お礼
質問サイトを使ったことがなく、回答があるとメールに通知が来ると思っておりまして、お礼が遅くなりました。すぐに回答頂いたのに、申し訳ございません。おかげさまで処理がスムーズに出来るようになりました。ご説明が初心者の私には一番分かりやすかったのでベストアンサーにさせていただきました。ありがとうございました。