Excel VBA質問箱 IV

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

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


1756 / 13645 ツリー ←次へ | 前へ→

【72122】データ以下の行を削除 はる 12/6/4(月) 15:40 質問[未読]
【72123】Re:データ以下の行を削除 UO3 12/6/4(月) 20:03 発言[未読]
【72124】Re:データ以下の行を削除 UO3 12/6/4(月) 21:49 発言[未読]
【72125】Re:データ以下の行を削除 はる 12/6/5(火) 9:25 質問[未読]
【72126】Re:データ以下の行を削除 UO3 12/6/5(火) 11:10 発言[未読]
【72127】Re:データ以下の行を削除 UO3 12/6/5(火) 11:26 発言[未読]
【72128】Re:データ以下の行を削除 はる 12/6/6(水) 9:12 質問[未読]
【72129】Re:データ以下の行を削除 UO3 12/6/6(水) 10:37 発言[未読]
【72130】Re:データ以下の行を削除 はる 12/6/6(水) 17:46 質問[未読]
【72131】Re:データ以下の行を削除 UO3 12/6/6(水) 20:27 発言[未読]
【72136】Re:データ以下の行を削除 はる 12/6/7(木) 12:46 お礼[未読]

【72122】データ以下の行を削除
質問  はる  - 12/6/4(月) 15:40 -

引用なし
パスワード
   VBAで質問があります。
以下のようにデータがあり,「あ」「い」「う」が項目になります。
やりたいことは,項目の付いている上部のデータだけ残して下部のデータを削除を考えています。
上部でデータの項目は変化しないのですが,データの量が変化するため削除を始めたい行が一定にはなりません。

  A B C
1 あ い う
2 12 26 26
3 18 16 20
4 26 20 10
5 10 22 11


8 25 30 13 20 61・・・
9 11 14 23 20・・・
10
11 20 22 17 23 21・・・


一応,固定行なら以下のようにマクロを組むことができたのですが,行が変化するので,その対応ができませんでした。
以下のマクロは「F列」が空いていたので,適当な数値を入れて削除しようと考えたものです。
どなたか分かる方がいらっしゃいましたらご教授ください。
また,もしもっといい方法があるようであれば知恵をお貸しください。

Dim total As Double
  Dim i As Long
  Dim z As Long
   Range("A8").Select
   i = 8
    z = Range("A" & Rows.Count).End(xlUp).Row
    For i = 8 To z
     total = total + Range("F" & i).Value
      Range("E" & i).Offset(0, 1).Value = total
     Next
    Range("F8").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.EntireRow.Delete Shift:=xlUp

初心者なのでできれば詳しく教えていただければ助かります。
よろしくお願いします。

【72123】Re:データ以下の行を削除
発言  UO3  - 12/6/4(月) 20:03 -

引用なし
パスワード
   ▼はる さん:

>やりたいことは,項目の付いている上部のデータだけ残して下部のデータを削除を考えています。

こんばんは
アップされた例ですと、A,B,C の3列だけ項目名があり、
一方データは8行目以降のように D,E といった列にもありますね。

この場合、A,B,C 列だけの2行目以降をクリアするのですか?
それとも、2行目以降の全列をクリアしていいのですか?

【72124】Re:データ以下の行を削除
発言  UO3  - 12/6/4(月) 21:49 -

引用なし
パスワード
   ▼はる さん:

なんとなく、おやりになりたいことはこんあことかなぁと想像しながら。

Sample1 はタイトル行を残します。
Sample2はタイトル行も含めて消します。

Sub Sample1()
  With Range("A1").CurrentRegion
    .Offset(1).Resize(.Rows.Count - 1).ClearContents
  End With
End Sub

Sub Sample2()
  Range("A1").CurrentRegion.ClearContents
End Sub

【72125】Re:データ以下の行を削除
質問  はる  - 12/6/5(火) 9:25 -

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

返信ありがとうございます
前回は空白列の削除でお世話になりました。
今回もよろしくお願いします。

質問の言葉が足りずに申し訳ございません。
私が記載した例を基に話しますと,5行目までのデータを残してそれ(6行目)以下のデータを消したいと考えています。
しかも5行目までのデータ量によって8行目まで,20行目までを残したいと変化します。
US3 さんの仰るとおり6行目以下のデータは D列以降にも存在するので,行を削除したほうが良いのかと思っています。

つまりUS3 さんが示してくださった「Offset(1)」のところがデータに合わせて変化できればと思います。

よろしくお願いします。

【72126】Re:データ以下の行を削除
発言  UO3  - 12/6/5(火) 11:10 -

引用なし
パスワード
   ▼はる さん:

あぁ、上のほうを残すわけですね。

Sub Sample3_1()
  Dim i As Long
  Dim z As Long
  
  i = Range("A1").CurrentRegion.Rows.Count + 1
  z = ActiveSheet.UsedRange.Cells(ActiveSheet.UsedRange.Cells.Count).Row
  Rows(i & ":" & z).ClearContents
  
End Sub

Sub Sample3_2()
  'Sample3_1 の ちょっと横着バージョン
  Dim i As Long
  
  i = Range("A1").CurrentRegion.Rows.Count + 1
  Rows(i & ":" & Rows.Count).ClearContents
  
End Sub

Sub Sample4()
'上のほうの残すべきリスト範囲の列にタイトルも含めて空白列があれば使えませんが
  Dim v As Variant

  v = Range("A1").CurrentRegion.Value
  Cells.ClearContents
  Range("A1").Resize(UBound(v, 1), UBound(v, 2)).Value = v
  
End Sub

【72127】Re:データ以下の行を削除
発言  UO3  - 12/6/5(火) 11:26 -

引用なし
パスワード
   ▼はる さん:

↑のSample4 は、もし、上のほうのリスト内に式がはいっていると値にかわってしまいますので
以下のほうがいいです。

Sub Sample4_2()
'上のほうの残すべきリスト範囲の列にタイトルも含めて空白列があれば使えませんが
  Dim v As Variant

  v = Range("A1").CurrentRegion.Formula
  Cells.ClearContents
  Range("A1").Resize(UBound(v, 1), UBound(v, 2)).Formula = v
  
End Sub

【72128】Re:データ以下の行を削除
質問  はる  - 12/6/6(水) 9:12 -

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

コメントありがとうございます。

まだ内容までは精査していないのですが,とりあえずUS3さんが作ってくださったマクロの必要部分を貼り付けて試したところ,なぜだか削除してくれませんでした。。。

因みに「i = Range("A1").CurrentRegion.Rows.Count + 1」の部分はA1から行を数えて1を加えた数字をiにしなさい。ということですよね。
これも空白があると使えないですか?
機器からデータを抜いてきているのでどうしても空白が入ってしまいます。
空白の位置は残すべきリスト範囲にもありますし,A列の中にも空白セルやスペースのみが入ったセルも入っています。

時間が取れるときに自分でも精査してみますが,もし分かるところがありましたらご教授ください。

【72129】Re:データ以下の行を削除
発言  UO3  - 12/6/6(水) 10:37 -

引用なし
パスワード
   ▼はる さん:

こんにちは

シートの実態が見えないのでなんともいえないところはあるのですが・・・

>機器からデータを抜いてきているのでどうしても空白が入ってしまいます。
>空白の位置は残すべきリスト範囲にもありますし,A列の中にも空白セルやスペースのみが入ったセルも入っています。

空白セルはかまいません。
残すべき上のほうの領域内に、その領域内での空白列や空白行があるということですか?
空白行があればそれは、その下が残さない対象になりますね。

それより、

>とりあえずUS3さんが作ってくださったマクロの必要部分を貼り付けて試したところ,なぜだか削除してくれませんでした。。。

私は US3 ではなく UO3 ですけど、まぁ、それはさておき、
コードの必要部分を張り付けるのではなく、まず、アップされた例と同じ形のシートを作り、
それに対してアップしたコードをそのまま実行してみてもらえませんか?

あぁ、それと、アップされたデータで、はるさんがアップしておられる【行固定バージョン】を流してみました。
このコードの中で、total 計算等をしておられますが、最後はそれらすべて消されますよね?
この total 処理の意味はなんでしょう?

【72130】Re:データ以下の行を削除
質問  はる  - 12/6/6(水) 17:46 -

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

こんにちは,返信ありがとうございます。

まずお詫びですが,名前を間違えるなんて大変失礼なことをしました。
不快な思いをさせてしまい,申し訳ございません。
思わず前回助言を頂いたときの私のコメントも確認してしまいました。。。


空白列や空白行の件ですが,実際には以下のようになっています。

  A B C D E
1 あ   い   う
2 12   26   26
3 18   16   20
4 26   20   10
5 10   22   11


8 AA XX   13 20 61・・・
9       10 14 13・・・
10
11 BB YY   23 20・・・
12       22 30・・・
13
14 CC ZZ   17 23 21・・・

残すべきリストのB列,D列には空白列のようになっていますが,何故かスペースだけ入っていいます。
しかし消したいリストの方にはデータが入っているので,列が全て空白にはなっていません。(C列のC8以下は完全な空白)

>それに対してアップしたコードをそのまま実行してみてもらえませんか?

確認したところ,きちんと消されました。
しかしUO3さんがアップしてくださったコードをそのまま実行したいファイル(実際のデータが入っているもの)で試したら巧く消えませんでした。。。

>この total 処理の意味はなんでしょう?

この意味はあまり無いのですが,連続してデータが入っているところが無かったので,消したいリストに連続したデータを入れて,そこを選択させて行を消しているだけです。
コードをあまり詳しく知らないので,苦肉の策です。

よろしくお願いします。

【72131】Re:データ以下の行を削除
発言  UO3  - 12/6/6(水) 20:27 -

引用なし
パスワード
   ▼はる さん:

こんばんは

スペースですかぁ。
外部から取り込んだデータなんでしょうかね。
そうするとスペース以外の「ゴミ」もあるかもですね。

以下を試してみてください。

Sub Sample3_3()
  'ちょっと横着バージョンの改訂版
  Dim i As Long
 
  With ActiveSheet.UsedRange
    .Replace What:=" ", Replacement:="", LookAt:=xlPart
    .Replace What:=" ", Replacement:="", LookAt:=xlPart
  End With
  i = Range("A1").CurrentRegion.Rows.Count + 1
  Rows(i & ":" & Rows.Count).ClearContents
 
End Sub


Sub Sample3_4()
  'Sample3_3でもだめなら
  Dim i As Long
  Dim c As Range
  
  With ActiveSheet.UsedRange
    For Each c In .Cells
      c.Value = WorksheetFunction.Clean(c.Value)
    Next
    .Replace What:=" ", Replacement:="", LookAt:=xlPart
    .Replace What:=" ", Replacement:="", LookAt:=xlPart
  End With
  i = Range("A1").CurrentRegion.Rows.Count + 1
  Rows(i & ":" & Rows.Count).ClearContents
 
End Sub

【72136】Re:データ以下の行を削除
お礼  はる  - 12/6/7(木) 12:46 -

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

コメントありがとうございます。
UO3さんのコードでやりたいことが出来るようになりました。
スペースを最初に削除してしまえばという発想は素晴らしいです。

また躓いた際にはお世話になるかもしれませんが,そのときにはよろしくお願いいたします。

色々とお世話になりまして、ありがとうございました。

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