Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9093 / 13646 ツリー ←次へ | 前へ→

【29276】3つのデータを比較して削除する方法 haramama 05/9/29(木) 13:17 質問[未読]
【29279】Re:3つのデータを比較して削除する方法 Jaka 05/9/29(木) 15:15 回答[未読]
【29288】Re:3つのデータを比較して削除する方法 haramama 05/9/29(木) 18:22 お礼[未読]
【29365】修正 Jaka 05/10/3(月) 9:20 回答[未読]
【29400】Re:修正 haramama 05/10/4(火) 13:59 お礼[未読]
【29403】Re:修正 Jaka 05/10/4(火) 14:18 発言[未読]
【29404】Re:修正 haramama 05/10/4(火) 15:00 お礼[未読]

【29276】3つのデータを比較して削除する方法
質問  haramama  - 05/9/29(木) 13:17 -

引用なし
パスワード
   こんにちは。
いつも大変参考にさせていただいています。
先日は逆方向データ削除の方法を教えて頂き
本当にありがたかったです。
その先のデータ集計で、良い方法が見つからず
皆さまのお知恵を拝借できればと思っております。

3000行くらいのデータ量で、A・B・Cのデータのかたまり(?)
が各5列づつ並んでいます。
下の例では各2列としてあります。

各データには数100行おきに同じフラグが入っています。
フラグから次のフラグまでのデータ行数がA〜Cまで
不一致ですので、それを一致させたいと思っております。
(一番少ない行数のデータに合わせ、多いデータは削除する。)

--------------------------------------------------------
  A列   B列  C   D   E   F  G

1 りんご       バナナ     みかん 
2 DATA   フラグ1  DATA フラグ1 DATA フラグ1

3 DATA        DATA      DATA
4 DATA        DATA      DATA
.
.
.
.
100 DATA  フラグ2   DATA     DATA
.
.
.
.
120 DATA       DATA フラグ2  DATA
.
.
135 DATA       DATA      DATA フラグ2
.
.
200 DATA フラグ3 

数十行後にバナナ、みかんのフラグ3はあります。

---------------------------------------------------------

今の段階では、別シートにMATCH関数とROWS関数を使って
フラグ間の行数を割り出し、その後INPUTBOXを使って
手作業で行と削除セルを入れておりますが、できれば
完全自動化を目標にしています。

----------------------------------------------------------
現在の削除マクロ(りんごのみ)↓

Sheets(1).Select

 
  Dim i, j, k, l, m As Long
    k = InputBox("何行目から?")
    l = InputBox("何行目まで?")
    m = InputBox("何行おき?")
    
  
  For i = l To k Step -m
    
    For j = 1 To 5
      Cells(i, j).Select
      Selection.Delete shift:=xlUp
      
    Next j
  Next i

-----------------------------------------------------

ヒントをいただけたら大変助かります。

よろしくお願い致します。

【29279】Re:3つのデータを比較して削除する方法
回答  Jaka  - 05/9/29(木) 15:15 -

引用なし
パスワード
   今一効率のよさそうな物が思い浮かびませんでした。

Sub aaaaaaa()
Dim TB(1 To 3) As Variant, St As Long, FC As Long
Dim ColM As Variant, i As Integer
St = 2: FC = 1
Do
 FC = FC + 1
 TB(1) = Application.Match("フラグ" & FC, Columns(2), 0)
 TB(2) = Application.Match("フラグ" & FC, Columns(4), 0)
 TB(3) = Application.Match("フラグ" & FC, Columns(6), 0)
 If IsError(TB(1)) Or IsError(TB(2)) Or IsError(TB(3)) Then
   Erase TB
   Exit Sub
 End If
 Application.ScreenUpdating = False
 ColM = Application.Min(TB)
 For i = 2 To 6 Step 2
   Do
     'Cells(ColM, i).Select
     If Not (Cells(ColM, i).Value Like "フラグ*") Then
      Cells(ColM, i).Delete
     Else
      Exit Do
     End If
   Loop
 Next
 St = ColM
Loop
Application.ScreenUpdating = True
Erase TB
End Sub

【29288】Re:3つのデータを比較して削除する方法
お礼  haramama  - 05/9/29(木) 18:22 -

引用なし
パスワード
   jakaさま

ありがとうございました!!
明日からお休みですので、月曜日早速実データで試したいと思います。
初心者なので、時間がかかるかもしれませんが、、、
また結果を報告させていただきます。

本当にありがとうございました<m(__)m>

【29365】修正
回答  Jaka  - 05/10/3(月) 9:20 -

引用なし
パスワード
   行削除と同じにしてました。
このままだと前回手作業にて、左詰で削除をしていた場合、それを引き継いでしまいます。
追加しておいてください。

Cells(ColM, i).Delete
  ↓
Cells(ColM, i).Delete Shift:=xlUp

【29400】Re:修正
お礼  haramama  - 05/10/4(火) 13:59 -

引用なし
パスワード
   Jaka さん:

ありがとうございます。
今教えて頂いたコードを実行してみました。
が、私のやり方がまずいのか、マクロが終了しなく
なってしまいました。

しばらく時間が取れるので、ひとつひとつ
確認しながらすすめて行きたいと思います。

【29403】Re:修正
発言  Jaka  - 05/10/4(火) 14:18 -

引用なし
パスワード
   ▼haramama さん:
>今教えて頂いたコードを実行してみました。
>が、私のやり方がまずいのか、マクロが終了しなく
>なってしまいました。
いや、ありえそうですよ。
データ全体がどうなっているのか解らないから、記載されたデータ状態でしか試せないし、その分だけのコードしか書けないから....。

【29404】Re:修正
お礼  haramama  - 05/10/4(火) 15:00 -

引用なし
パスワード
   Jaka さん:
実データは複雑で、サンプルではフラグ1,2,3・・としましたが
全て固有名詞が入っています。(1〜3の各データ30個くらい)
(テキストファイル参照しながら入れています。)
さらにそのフラグは、数行数列にわたり、一部重複している
部分も有ります。
フラグの長さもそれぞれのデータのかたまりによって違いますので
最小値に合わせて削らなければなりません。

長くかかりそうですが、Jakaさんから教えていただいたコードを参考
にさせていただいて、コツコツやっていこうと思っています。

ありがとうございました。

9093 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free