• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで複数行の指定)

VBAで複数行の指定方法と条件に基づいたデータ削除について

このQ&Aのポイント
  • VBAで複数行の指定方法と条件に基づいたデータ削除の方法について教えてください。初心者です。
  • やりたいことは、for next文を使用してbook1のシート内のN~R行に特定の文字が入っている場合、book2のシート内のB行の文字を削除することです。
  • 現在のコードでは、book1のシート内のN行しか反映されていません。複数行のN~Rに反映させる方法がわかりません。教えていただけると助かります。

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

  • ベストアンサー
回答No.1

>これではbook1のシートに内のN行しか反映されません N行ではなくN列ですよね。 >複数行N~Rに反映させるコードわからないです やりたいことは「book1.xlsアクティブシートのN1~R100に”受入”という文字が入っていたら、book2.xlsアクティブシートのB列を消去する」で宜しいでしょうか。 最小限の修正に抑えるなら、こうなります。 Sub test() Dim c As Variant Dim i As Long Dim j As Integer ' 列ループ用 Set c = Workbooks("book2.xls").ActiveSheet With Workbooks("book1.xls").ActiveSheet For j = 14 To 18 For i = 1 To 100 If .Cells(i, j) Like "*受入*" Then 'もし、N~R列のどれかに『受入』という文字が入っていたら c.Cells(i, 2).Clear '同じ行のB列のセルをクリアする End If Next i Next j End With End Sub

kousukebojto
質問者

お礼

for nextの使い方を教えて頂きありがとうございますm(__)m

その他の回答 (4)

  • bgm38489
  • ベストアンサー率29% (633/2168)
回答No.5

for to nextの重複構造の利用ですね。 For j = 14 To 18 For i = 1 To 100 If Cells(i,j) = ・・・   Next i Next j こうすれば、まずJ=14について、I=1から100まで、次にj=15についてI=1から100まで・・・というように処理できます。 Next I、という風に、どの文字を増やすか(どのFor文に戻るか)を指定するのはこのため。二重構造、三重構造などがなければ、 Iの指定はする必要はないのです(昔のBasic言語では、一重の場合は、増やす文字を省略してよかった)。わざわざ指定するのは、重複構造があるためなのです。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#3です。やってみたので、Find法のコードを追加しておく。 小生は、VBAとしては、理解がむつかしい課題と思うが、有用で、WEBでも沢山解説がある。 ワイルドカードの機能を使わなくても、LookAt:=xlPart指定で、下記のようにすれば、部分一致で、セルを探してくれるようだ。 MsgBox f.Row & "行ー" & f.Column & "列にみつかった" (2か所)のところに、したい処理のコードを入れる(下記では略)。 Sub test02() Dim f As Range Set f = Range("N1:R100").Find(What:="受入", LookAt:=xlPart) If f Is Nothing Then MsgBox "見つからない " Exit Sub '終了 Else MsgBox f.Row & "行ー" & f.Column & "列にみつかった" firstAddress = f.Address '繰返し検索し、条件を満たすすべてのセルを検索する Do Set f = Range("N1:R100").FindNext(f) If f Is Nothing Then Exit Do Else MsgBox f.Row & "行ー" & f.Column & "列にみつかった" End If Loop Until f.Address = firstAddress '最初に見つかったセルに戻ったら終了 End If End Sub

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

質問に書いていることがよくわからない。 >シート内N~R行にある は列の間違いか? 初心者とは言いながら、エクセルそのものの知識や表見法(語句。エクセル術語)常識は勉強してからでないと、VBA利用に行くのは早い。 >Set c = Workbooks("book2.xls").ActiveSheet のActiveSheet も気になる。具体的にシート名を記述して表現しては。 どのシートがアクチブになっているか、直前の状態を頼りにするのは危ういのでは。 ーー 多列の(連続列)範囲を問題にするなら、初心者はまず下記(1)から始めるべきでしょう。 別に少し進んで、FindメソッドというものでNーR列の中で「受入」という文字のあるセルを見つける方法もある。 ーー (1)逐次セル繰り返し法で(行と列に分けて考えて繰り返す) Sub test01() f = Range("N1").Column MsgBox Range("N1").Column t = Range("R1").Column MsgBox Range("R1").Column '--- For i = 1 To 3 '行繰り返し,3は小生のテスト用 For j = f To t ′列限定 If Cells(i, j) Like "*受入*" Then MsgBox i & "行," & j & "列で見つかった" '所定処理 End If Next j Next i End Sub ーーー テストデータ 14 受入 16 17 18 金銭受入      受入れ後 で確認

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんにちは Sub test()   Dim c As Variant   Dim i As Long   Dim t As Range      Set c = Workbooks("book2.xls").ActiveSheet      With Workbooks("book1.xls").ActiveSheet     For i = 1 To 100       If c.Cells(i, 2) <> "" Then         Set t = .Range("N" & i).Resize(, 5).Find("受入", , xlValues, xlPart)          'もし、14行目のN~R列のセルのどれかに『受入』という文字が入っていたら         If Not t Is Nothing Then           c.Cells(i, 2).Clear 'その2行の条件に当てはまるセルをクリアする         End If         Set t = Nothing       End If     Next i   End With End Sub こんな感じでも。

関連するQ&A

専門家に質問してみよう