• ベストアンサー

Excelで周期的に列を削除する方法

Excel2007を使用しています。 データの整理で、周期的に列を削除する方法を探しています。 具体的には、Fast samplingで10点、Slow samplingで1点とるというような計測プログラムのデータで、Slow samplingのデータのみを抽出しようとしています。 そのため、10列削除して、11列目を残し、12列目から10列削除して、22列を残し・・・と周期的に抽出する必要があります。 マクロなどを使ったことがないほどの初心者です。 ご教授、よろしくお願い致します。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! 元データに手を加えるのではなく、別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

haniwa502
質問者

お礼

質問サイトを使ったことがなく、回答があるとメールに通知が来ると思っておりまして、お礼が遅くなりました。すぐに回答頂いたのに、申し訳ございません。おかげさまで処理がスムーズに出来るようになりました。ご説明が初心者の私には一番分かりやすかったのでベストアンサーにさせていただきました。ありがとうございました。

その他の回答 (3)

回答No.4

'見出しの文字列で判断できれば、、、 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

haniwa502
質問者

お礼

質問サイトを使ったことがなく、回答があるとメールに通知が来ると思っておりまして、お礼が遅くなりました。すぐに回答頂いたのに、申し訳ございません。プログラミングのどこを改変すればよいのかが分からず、実行がかないませんでした。これから学んで行きたいと思います。ご教授ありがとうございました。

noname#204879
noname#204879
回答No.3

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())

haniwa502
質問者

お礼

質問サイトを使ったことがなく、回答があるとメールに通知が来ると思っておりまして、お礼が遅くなりました。すぐに回答頂いたのに、申し訳ございません。頂いた回答の中でもっともプログラミングがシンプルで、おそらく一番スマートな方法をご教授いただいたのだと思います。

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

手作業をそのままマクロに書き写すと、だいたいこんなカンジになります。 手順: 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に貼り付ける といったマクロを使うのでも、十分役に立ちます。

haniwa502
質問者

お礼

質問サイトを使ったことがなく、回答があるとメールに通知が来ると思っておりまして、お礼が遅くなりました。すぐに回答頂いたのに、申し訳ございません。丁寧なご説明、ありがとうございました。実際にプログラミングを動かしてみて、マクロの有用性を実感しました。勉強していきたいと思います。

関連するQ&A