Excel VBA質問箱 IV

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

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


8542 / 13644 ツリー ←次へ | 前へ→

【32658】マクロでの行削除 キース 05/12/20(火) 15:10 質問[未読]
【32659】Re:マクロでの行削除 Kein 05/12/20(火) 15:18 回答[未読]
【32662】Re:マクロでの行削除 キース 05/12/20(火) 15:59 質問[未読]
【32665】Re:マクロでの行削除 Kein 05/12/20(火) 16:09 発言[未読]
【32666】Re:マクロでの行削除 キース 05/12/20(火) 16:16 お礼[未読]
【32667】Re:マクロでの行削除 Kein 05/12/20(火) 16:46 発言[未読]
【32660】Re:マクロでの行削除 Jaka 05/12/20(火) 15:18 回答[未読]
【32691】Re:マクロでの行削除 Po 05/12/20(火) 21:05 発言[未読]

【32658】マクロでの行削除
質問  キース  - 05/12/20(火) 15:10 -

引用なし
パスワード
   初めまして宜しくお願いします。

現在EXCELで簡単な商品管理SYSを作っているのですが
次の処理をマクロで行いたいので、ご指導願います。

ソフト名  メーカー   定価    廃盤ソフト名
サッカー  バンダイ   4500  サッカー
テニス   バンダイ   4500  
野球    コナミ    5000  
対戦野球  ナムコ    4500  対戦野球  
F1    ナムコ    6000  
アクション バンダイ   5500
K−1   バンプレスト 5000
               ┏━━━━┓  
               ┃撤 収 ┃ 
               ┗━━━━┛   
処理内容
ソフト名と廃盤ソフト名が一致した場合に撤収コマンドボタン
押下で行削除をしたい。

この場合は、FOR〜NEXT文でコード記述すると思うのですが
初めて使うコマンドなのでどう記述すればいいのでしょうか??
宜しくお願いします。

【32659】Re:マクロでの行削除
回答  Kein  - 05/12/20(火) 15:18 -

引用なし
パスワード
   例によって"私流"の数式判定 & 処理、という方法のコードを提示します。
AA列を作業列とします。式はA列の値とD列の値の比較になります。

Sub Del_Rows()
  On Error Resume Next
  With Range("A2", Range("A65536").End(xlUp)).Offset(, 26)
   .Formula = "=IF($A2=$D2,1,"""")"
   .SpecialCells(3, 1).EntireRow.Delete xlShiftUp
   .ClearContents
  End With
End Sub

【32660】Re:マクロでの行削除
回答  Jaka  - 05/12/20(火) 15:18 -

引用なし
パスワード
   基本的な物だと

ESS = Range("A65536").End(xlUp).Row
For i = ESS To 2 Step -1
  If Cells(i, 1).Value = Cells(i, 4).Value Then
    Rows(i).Delete
  End If
Next

【32662】Re:マクロでの行削除
質問  キース  - 05/12/20(火) 15:59 -

引用なし
パスワード
   ▼Kein さん:
>例によって"私流"の数式判定 & 処理、という方法のコードを提示します。
>AA列を作業列とします。式はA列の値とD列の値の比較になります。
>
>Sub Del_Rows()
>  On Error Resume Next
>  With Range("A2", Range("A65536").End(xlUp)).Offset(, 26)
>   .Formula = "=IF($A2=$D2,1,"""")"
>   .SpecialCells(3, 1).EntireRow.Delete xlShiftUp
>   .ClearContents
>  End With
>End Sub

ヘルプや書籍を参照したのですが、Offset(, 26)と記述されてますが
基準値の指定は無くて良いのでしょうか??
申し訳ありませんが回答お願いします

【32665】Re:マクロでの行削除
発言  Kein  - 05/12/20(火) 16:09 -

引用なし
パスワード
   >Offset(, 26)と記述されてますが基準値の指定は無くて良いのでしょうか
「基準値」とは何を指しているのか分かりません。比較する「2つの列の一方のA列」
2行目から最終入力行までを数式を入れる行範囲とし、列の方は「何も使われていない」
(つまりデータ入力範囲から、なるべく遠い空白列)を、任意に決めているだけです。
だから「データ入力範囲の最終列より右であり、IV列まで」ならどこでも良いわけです。

【32666】Re:マクロでの行削除
お礼  キース  - 05/12/20(火) 16:16 -

引用なし
パスワード
   ▼Kein さん:
>>Offset(, 26)と記述されてますが基準値の指定は無くて良いのでしょうか
>「基準値」とは何を指しているのか分かりません。比較する「2つの列の一方のA列」
>2行目から最終入力行までを数式を入れる行範囲とし、列の方は「何も使われていない」
>(つまりデータ入力範囲から、なるべく遠い空白列)を、任意に決めているだけです。
>だから「データ入力範囲の最終列より右であり、IV列まで」ならどこでも良いわけです。

レス有り難うございます。
EXCELのヘルプでOFFSETを検索したら
Offset(基準値,行,列,高さ,幅)となっていたので、必要なのかと思って
しまいました。
Keinさんの説明で理解できました。わかりやすい説明有り難うございます。
また宜しくお願いします

【32667】Re:マクロでの行削除
発言  Kein  - 05/12/20(火) 16:46 -

引用なし
パスワード
   解決後ですが、少し誤解があるようなので念の為。
>EXCELのヘルプでOFFSETを検索したら
>Offset(基準値,行,列,高さ,幅)
VBAのコードで使う Offset は、あくまでVBAコードの「プロパティ」です。
通常、ワークシート関数の OFFSET は使いません。VBAヘルプの解説を以下に
コピペしておきます。

----------------------------------------------------------------------
Offset プロパティ (Range オブジェクト)
        

指定された範囲からのオフセット範囲を表す Range オブジェクトを返します。
値の取得のみ可能です。

構文

expression.Offset(RowOffset, ColumnOffset)

expression  必ず指定します。Range オブジェクトを表すオブジェクト式を
指定します。

RowOffset  省略可能です。バリアント型 (Variant) の値を使用します。
オフセットする範囲の行数 (正、負、または 0) を指定します。
正の値は下方向、負の値は上方向のオフセットを表します。既定値は 0 です。

ColumnOffset  省略可能です。バリアント型 (Variant) の値を使用します。
オフセットする範囲の列数 (正、負、または 0) を指定します。
正の値は右方向、負の値は左方向のオフセットを表します。既定値は 0 です。

【32691】Re:マクロでの行削除
発言  Po  - 05/12/20(火) 21:05 -

引用なし
パスワード
   他にこんなんも…

i = 2
Do Until Cells(i, 1) = ""
If Cells(i, 1).Value = Cells(i, 1).Offset(, 3).Value Then
Rows(i).Delete
End If
i = i + 1
Loop

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