マクロを用いてのデータ加工の方法とは?

このQ&Aのポイント
  • 1分のデータ(60個)の平均を繰り返し処理できる方法を知りたい
  • ループを使って変数部分を指定することで、1440行も書かずに済む
  • 具体的なコードのイメージを示している
回答を見る
  • ベストアンサー

マクロを用いてのデータ加工

1分のデータ(60個)の平均を繰り返し処理できるようにしたいのですが どうすれば上手くいくでしょうか? 00:00:00~00:00:59までのデータを00:00として平均をとろうと考えています。 単純にやると1440行も書かなくてはいけないので ActiveSheet.Range("L3").FormulaLocal = "=AVERAGE(B3:B62)" ActiveSheet.Range("L4").FormulaLocal = "=AVERAGE(B63:B122)" ・・・ ループ使いたいのですが、変数部分をどうしたらいいのかわかりません。 わかる方よろしくお願いします。 *イメージ Dim i, j For i = B3 To B28743 Step 60 For j = B62 To B28802 Step 60 ActiveSheet.Range("L3:L902").FormulaLocal = =Average(i & ":" & j) Next i,j

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

なんだかよくわかりませんが L3~L902セルに、B3から60ずつの範囲のAVERAGEを計算する数式を挿入していけばいいんでしょうか? Sub test01() Dim Rng As Range, i As Long With ActiveSheet Set Rng = Range("B3:B62") For i = 1 To 900 Cells(i + 2, "L").FormulaLocal = "=AVERAGE(" & Rng.Address(0, 0) & ")" Set Rng = Rng.Offset(60) Next i End With Set Rng = Nothing End Sub

water18
質問者

お礼

ありがとうございます。 上手くマクロを組み込むことができました。

その他の回答 (3)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

No3 merlionXXです。 > 上手くマクロを組み込むことができました。 water18さん、それは良かった。お役に立てて幸いです。 なお、ずいぶん前に回答した、フォルダー内の全てのCSVファイルからデータをエクセルに転記するマクロコードはどうだったのでしょうか? まったくお返事がなく、締め切られてもいないのでうまくいかなかったのでしょうか? http://okwave.jp/qa4950281.html 回答番号:No.1です。

water18
質問者

お礼

お返事が遅れてしまい申し訳ありませんでした。 マクロは上手く動作しましたが取り込みたい順番とシートの順番が逆になります。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

わざわざマクロを組まなくても L3に =AVERAGE(OFFSET(B$3,60*(ROW()-3),0,60,1)) を入れて下までコピーしてはいかが?

water18
質問者

お礼

OFFSETですか、使ったことがないのでいまいちわかりませんが、便利ですね。 ありがとうございます。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

質問文の意味がよくわからないのですが、勝手に想像して… 以下のように仮定しました。 ・データがB3~B28743にあり、60個ごとにまとめて平均値を求めたい。 ・平均値を表示するセルは、L3、L4、L5と上詰めで=AVERAGE()の式で  算出してよい。(L902の意味が不明ですが…) ◆式は一度だけ定義しておけば、データの内容が変わっても自動的に算出されるのでマクロで設定する必要もないと思うので、L3に式 =AVERAGE(INDIRECT("B" & ROW()*60-177 & ":B" & ROW()*60-118)) を入れて、L481まで下にコピーフィルすれば設定できるかと… ◆どうしてもマクロでというのであれば、同様に For r = 3 To 481  Range("M" & r).Formula = "=AVERAGE(B" & r * 60 - 177 & ":B" & r * 60 - 118 & ")" Next r みたいな感じでいけると思うけど…

water18
質問者

補足

L902となっているのは、データの一部が欠落しているためサンプル数が少なくなっているためです。

関連するQ&A

  • 配列変数に格納したデータを計算する方法はありますか?

     簡単な例ですが、例えばB列にあるデータの平均値を求めるときに以下のようにしています。 sub 平均計算()   Dim X(1 To 1000, 1 To 1) As Variant, i as Integer   For i = 10 To 1000     X(i, 1) = WorksheetFunction.Average _          (Range(Cells(i - 9, 2), Cells(i, 2)))   Next   Range(Cells(1, 1), Cells(1000, 1)) = X End Sub  ここで処理速度改善のため、B列のデータを別の配列変数Yに格納してから平均値を求めるというようなことをしたいのですが、そんなことは可能でしょうか?イメージとしてはこんな感じです。   Y = Range(Cells(1, 2), Cells(1000, 2))   for i = 1 to 1000     X(i, 1) = WorksheetFunction.Average _          (Range(Y(i - 9, 2), Y(i, 2)))   Next  当然これはエラーになってしまいますが、このようなことを可能にする方法があれば、どなたか教えてください!よろしくお願いします。

  • マクロが実行しない

     二行三列を一枡として月の勤務割表を作成しています。マクロで同じ事を しているのにMacro1の方が実行しません。お教え願えませんでしょうか。 (尚、図形を枠線上にコピペしています。) Sub Macro1()実行しません。 Dim i As Integer Dim j As Integer For i = 10 To 43 Step 2 For j = 10 To 103 Step 3 Select Case Cells(i, j).Value Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste End Select Next Next End Sub Sub Macro2()実行します。 ActiveSheet.Shapes.Range(Array("四角形1")).Select Selection.Copy Range("J11:K11").Select ActiveSheet.Paste End Sub

  • エクセル マクロ 繰り返し処理の制御方法について

    お世話になります。エクセル初心者です。 登録用のシートから(データ数は、5000行ほど)、印刷用のシートへの転記を考えています。  下記のコードはテスト用の簡易なものですが、試行錯誤でここまではたどりついたのですが。  A列には大分類用の番号を入れてあるので、A列のセルの値が変わるまで、同じ処理を繰り返したいのですが、そのためにはどうしたらよいでしょうか。下記のコードの i と j の変数部分を連動させたい(A列の同じ値の数だけ、5行おきの転記をしたい)のですが。  Do until 構文も試してみたのですが(下記のコードでは、テストなので、「=2」のように固定にして(a)の部分に挿入してみました。)、エラーメッセージに従い、Loop の位置を(b)から(c)に変えてみたところ、無限ループに陥り、対処に困っています。  よろしくお願いします。 Sub test3() Dim i As Long Dim j As Long i = 1 '転記元の行 'Do until range("A"&i)=2 -----------------------(a) For j = 1 To 200 Step 5 '転記先の行 Range("J" & j) = Range("B" & i) Range("k" & j) = Range("C" & i) Range("L" & j) = Range("D" & i) Range("J" & j + 1) = Range("E" & i) Range("J" & j + 2) = Range("F" & i) Range("J" & j + 3) = Range("G" & i) i = i + 1 'Loop-------------------------------------------'(b) Next j 'Loop-------------------------------------------'(c) End Sub

  • Excel マクロ:変数を複数使う場合

    マクロ初心者です。 For文で、変数を2つ定義し、それぞれが1つずつ増えてくれるような マクロを組みたいのですが、うまくいきません。 例えばA列の並んだ数字を、B列に一個とばしで入力するとして・・・ 例) Dim i As Integer Dim j As Integer For j = 2 To 10 Step 2 For i = 1 To 9 Cells(j, 2).Value = Cells(i, 1).Value Next i, j ではだめですよね。iが1つ増える時に、jも1つ増える、 というようにVBAを組むことが可能なのでしょうか? ど素人な質問ですみませんが、教えてください。

  • マクロの処理速度が遅くなってしまいました

     今までエクセル2000を使用していたのですが、エクセル2003にバージョンアップして、以下の処理速度を検証したところ、処理が遅くなってしまいました。内容はsheet2にあるデータを変数に格納して簡単な計算をした後にsheet1に入力するということを5回繰り返し、それぞれの処理にかかる時間をsheet3に表示するというものです。 Sub タイム計測()   Dim myStart As Single, myGoal As Single   Dim j As Integer   Application.ScreenUpdating = False   Sheets(1).Select   Cells.Clear     For j = 1 To 5       myStart = Timer         Call サンプル       myGoal = Timer - myStart       Sheets(3).Select       Cells(j, 1) = myGoal       Sheets(1).Select     Next     Sheets(3).Select   Application.ScreenUpdating = True End Sub Sub サンプル()   Dim i As Integer, j As Integer   Dim Data As Variant, KeKKa(1 To 2000, 1 To 199) As Variant   Data = Range(Sheets(2).Cells(1, 1), Sheets(2).Cells(2000, 199))   For i = 1 To 2000     For j = 1 To 199       KeKKa(i, j) = Data(i, j) + Data(i, j)     Next   Next   Range(Cells(1, 1), Cells(2000, 199)) = KeKKa End Sub エクセル2000のときは1回当り平均して概ね0.7秒位で処理していたのですが、エクセル2003にすると1.4秒位かかってしまいます。処理速度が遅くなってしまうとバージョンアップした意味がないのですが、原因や改善策があればどなたか教えていただけないでしょうか?よろしくお願いします。

  • Excel VBA 複数のオブジェクトのコピーについて

    皆様、こんにちは。 いつもお世話になっています。 ActiveSheetに、他のシートのRange("B4:AC58")をコピーしたいですが、 ActiveSheetのRange("B1")に入力された値に合わせて、Range("B4:AC58")がコピーされる回数を設定したいです。 例えば、Range("B1")に1が入力されていれば、Range("B4:AC58")を1回だけコピーする、2でしたら2回、etc. ループを作ればできそうですが、変数の設定がよくわからなくて困っています。 ループなしのものを一応、作りましたが、そこからはどうすればいいかを教えていただければ幸いです。 どうぞよろしくお願いいたします。 Dim i As Integer i = Worksheets("Sheet2").Range("B1").Value Dim MyForm As Variant Set MyForm = Worksheets("フォームtest").Range("B4:AC58") For ? Worksheets("Form").Activate MyForm.Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("B3") Next

  • エクセルのマクロで重複データーを削除する

    Sub Sample() Dim i As Long With Range("B:B") For i = .CurrentRegion.Rows.Count To 1 Step -1 If .Offset(i, 0) = .Offset(i - 1, 0) Then .Offset(i, 0).EntireRow.Delete Next i End With End Sub 上記のマクロを実行するとエラーがでますが、どこを直せばわかりません。 一つのブックのシート全体のB列の重複データーを削除したいのですが、教えて頂けないでしょうか?

  • エクセルVBA-カウンター i と j の使い方

    2つの条件を同時に満たすと図形を別のワークシートにコピーし、600行程度あるワークシートなので For - Next を使ってその作業を繰り返す、というエクセルのマクロを以下のように書き込みました。ところがマクロを実行すると、一番最初の行だけ正確に実行され、次に条件を満たす行があっても図形がコピーされません。(ということはカウンター i, j の使い方が間違っているのです)どなたか私の素人コードを見て修正方法を教えてください。お願いします。 Sub finalize() Dim MyStr As String Dim i As Long Dim j As Long  For j = 2 To 1482 Step 40 For i = 3 To 188 Step 5 MyStr = Range("O" & i) If MyStr <> "" Then                    '条件1 If Range("L" & i).Value = "毎日" Then      '条件2   Sheets("図形_現読").Select ActiveSheet.Shapes.Range(Array("毎日")).Select Selection.Copy Sheets("印刷画面").Select Range("AG" & j).Select ActiveSheet.Paste Else If Range("L" & i).Value = "朝刊" Then Sheets("図形_現読").Select ActiveSheet.Shapes.Range(Array("朝刊")).Select Selection.Copy Sheets("印刷画面").Select Range("AG" & j).Select ActiveSheet.Paste End If End If End If Next i Next j End Sub

  • やはり図形のクリアで実行時エラー1004

     図形を二行三列で一枡とし図形を貼り付けていますが、どうしても実行時エラー 「1004」が出て図形のクリアができません。(尚、四角形は枠線上にあります。) 対処法がありましたらお願いします。 Windows7・SP1 Office2010 Sub 図形の貼付け() Dim i As Integer Dim j As Integer For i = 10 To 43 Step 2 For j = 9 To 99 Step 3 Select Case Cells(i, j).Value Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste Case 2: ActiveSheet.Shapes("四角形2").Select Selection.Copy Cells(i + 1, j).Select ActiveSheet.Paste Case 4: ActiveSheet.Shapes("四角形3").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste Case 5: ActiveSheet.Shapes("四角形3").Select Selection.Copy Cells(i + 1, j + 2).Select ActiveSheet.Paste Case 6: ActiveSheet.Shapes("円1").Select Selection.Copy Cells(i, j).Select ActiveSheet.Paste End Select Next Next End Select End Sub Sub 図形のクリア() Dim myRng As Range Set myRng = Range("I10:CW43") Dim n As Integer, sp As Variant For n = ActiveSheet.Shapes.Count To 1 Step -1 Set sp = ActiveSheet.Shapes(n) If Not Intersect(Range(sp.TopLeftCell, sp.BottomRightCell), myRng) Is Nothing  (ここで実行時エラー1004になります。) Then sp.Delete End If Next Set myRng = Nothing End Sub

  • N88互換BASICで「メッセージの定義されてないエラーです」と出ます

    N88互換BASICで「メッセージの定義されてないエラーです」と出ます… 最近プログラミングを始めた初心者です。 プログラムでエラーが出て困っています、どこが問題なのか改善方法を教えてください。 10 DIM A(100,100,100) 20 INPUT "B=";B 40 FOR i=1 to 100 step 1 50 FOR j=1 to 100 step 1 60 FOR k=1 to 100 step 1 70 A(i,j,k)=B 80 print A(i,j,k) 90 NEXT k 100 NEXT j 110 NEXT i こんな感じのものです。 配列変数を作って、Bの数値を全ての配列変数に代入したいです。 宜しくお願致します。

専門家に質問してみよう