プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (4件)

手作業をそのままマクロに書き写すと、だいたいこんなカンジになります。



手順:
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に貼り付ける
といったマクロを使うのでも、十分役に立ちます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/06 09:50

こんにちは!



元データに手を加えるのではなく、別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
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/06 09:46

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())
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/06 09:53

'見出しの文字列で判断できれば、、、


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
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/06 09:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!