![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_13.png?8acaa2e)
以下のプログラムは10行ごとにデータを抜き出すプログラムです。
これに追加して、普段は10行に1個データを抜き出し、前回の結果より絶対値が10増減があったとき、
相対値が10%の増減があった時にもデータを抜き出すようにするにはどうすればいいですか?
例えば以下の通り
time result
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
11 100
12 500
13 1000
14 1000
15 1000
16 1000
17 1000
18 1000
19 1000
20 1000
21 1000
・ ・
・ ・
・ ・
↓
time result
1 1
10 1
11 100
12 500
13 1000
20 1000
・ ・
・ ・
・ ・
ここからプログラム(10行ごとに抜き出す)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Sub nukitori()
Dim X As Worksheet
Dim i As Long
Dim ii As Long
Dim col As Integer
Dim Nukitori_Step As Long
Nukitori_Step = 10
i = 2
ii = 2 '●●●見出し行が1行目なので2で始める
Set X = ActiveSheet
'●シートShordataがあったら削除
On Error Resume Next
Application.DisplayAlerts = False
Worksheets("shortdata").Delete
Application.DisplayAlerts = True
On Error GoTo 0
Worksheets.Add.Name = "shortdata"
'●先ず、見出しをコピー
Worksheets("shortdata").Rows(1).Value = X.Rows(1).Value
While X.Cells(i, 1) <> "" And i < 65535
For col = 1 To 255
Worksheets("shortdata").Cells(ii, col).Value = X.Cells(i, col).Value
Next
If i = 2 Then i = 1
i = i + Nukitori_Step
ii = ii + 1
Wend
End Sub
ここからプログラム(10行ごとに抜き出す+増減があった場合も抜き出す)
ただし以下の箇所でエラーが起こる
If i > 3 And Abs(Cells(i, 1) - Cells(i - 1)) >= 10 Then
中断モードでコードを実行することができませんと。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Sub 抽出()
Dim i As Long
Dim j As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim Lastline As Long
Dim SelFlg As Boolean '抽出データかどうかの
Set ws1 = Worksheets("OriginDT") '元データ
Set ws2 = Worksheets("SelectDT") '抽出データ
Lastline = ws1.Cells(Rows.Count, 1).End(xlUp).Row '最終行番号を取得
ws2.Cells(1, 1) = ws1.Cells(1, 1) '見出し部分のコピー
ws2.Cells(1, 2) = ws1.Cells(1, 2)
j = 1
For i = 2 To Lastline
SelFlg = False
'10で割ったあまりが1(つまり10行おき)または最初のデータのとき
If i Mod 10 = 1 Or i = 2 Then '
SelFlg = True '抽出対象にする
End If
'2行目以降で一つ上の行との差が10以上のとき
If i > 3 And Abs(Cells(i, 1) - Cells(i - 1)) >= 10 Then
SelFlg = True '抽出対象にする
End If
If SelFlg = True Then '抽出対象だったらコピー
j = j + 1
ws2.Cells(j, 1) = ws1.Cells(i, 1)
ws2.Cells(j, 2) = ws1.Cells(i, 2)
End If
Next
End Sub
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
質問の意味がわかりにくい
例えば
(1)基本は10行ごとに抜き出す
(2)ただし、直前に抜き出した数より
A.絶対値(引き算して)10%増減があれば抜き出す
OR
B.相対値(割り算をして)が10%の増減があったときも抜き出す
とでも書けば判りやすい。
===
ロジックをフローチャート的に書いて、じっくり考えたのか?
ロジック以外は質問するほど難しいことは何も無いのでは。
IF分で場合分け
引き算
割り算
の単純な計算でしかない(全て絶対値で考えるのか)
========-
ここはエラーの添削コーナーではない。長々と質問文を書いて、読者の時間を取らさないこと。もっと質問文は短くなるはず。
While X.Cells(i, 1) <> "" And i < 65535
For col = 1 To 255
Worksheets("shortdata").Cells(ii, col).Value = X.Cells(i, col).Value
Next
If i = 2 Then i = 1
i = i + Nukitori_Step
ii = ii + 1
Wend
質問に載せるのはこの辺りだけで良いのでは。
ーー
データ列には途中空白セルがあるのか?
負のデータがあるのか
ーーー
処理ロジック
基本は、上記(2)の条件があるので、全行を処理対象にせざるを得ない。
また直前の抜き出し行を変数に保持
上記(2)の条件を判定
該当すれば抜き出し
かつ直前の抜き出し行の変数にその行をセット
該当該当し無い場合は、直前の抜き出し行と比べ10行以上なら
書き出し。
かつ直前の抜き出し行の変数にその行をセット
この全行あて繰り返しだろう。
何処が難しい?
判定計算の算式部分で判らないのなら、その旨明記して、質問すべきだ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
アクセス2000で画像データ...
-
ブレーカー落ちで壊れたりしな...
-
R言語での行列の分割
-
【エクセル】測定時間がバラバ...
-
ポケコン PC-E650 の...
-
SDカード メーカーや値段によ...
-
ユーザーフォームのテキストボ...
-
不規則なデータのfft処理
-
C言語で2桁Hex文字列を10進...
-
シーケンサにパソコンからアク...
-
VBAでシートからコンボボックス...
-
抜き出しマクロ(3)
-
Excelの操作について。 〔〕を...
-
エクセルVBAプログラミング...
-
配列でデータが入っている要素...
-
RPGで誰が攻撃を受けるのかを決...
-
家計簿プログラム
-
メモ帳(テキストデータ)をExc...
-
逆離散フーリエ変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
この行は既に別のテーブルに属...
-
VBAを使ってOutlookメール本文...
-
VBA 空白セルを削除ではない方...
-
S9タイプからXタイプにデータ...
-
多量のSUMIF式を軽くしたい
-
Accessで該当データにフラグを...
-
[C言語] コメント文字列を無視...
-
[エクセル]データの個数が2番目...
-
エクセルで2つの時系列のデー...
-
特定のデータの抽出方法を教え...
-
外部データの更新がうまくでき...
-
ActiveReportについて
-
CString型の文字列連結について
-
ユーザーフォームのテキストボ...
-
カンマからスラッシュに
-
シーケンサにパソコンからアク...
おすすめ情報