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

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

bgm38489の回答

  • 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言語では、一重の場合は、増やす文字を省略してよかった)。わざわざ指定するのは、重複構造があるためなのです。

関連するQ&A

  • VBA教えて下さい

    for nextの使い方がわかりません 変数を使用し条件に当てはまる数値だけ 処理するといった内容です 考えたコード sub test() dim a as variant dim b as variant dim i as variant with workbooks("book1").activesheet set a =.range("A5") set b =.range("B5") end with with workbooks("book2").activesheet for i = 80 to 110 if a = cells(i,1) then b.value = cells(i,2) end if next i end sub このコードにてやりたい事は まず、book1の今開いてるシートを参照し A5セル、B5セルをセットし (例えばA5は2と入力している B5セルは10000と入力している) 次に、book2の今開いてるシートを参照し もし、1行目の80~110どれかのセルの数字が 変数aと同じ値ならば (A行80~110行のセルの数字2があれば 例えば85列) 変数bの数字を2行目の80~110に条件に当てはまるセルに移す (B行85列にB5セルの値10000を移す) ()の部分は例えで書いてます 読みにくかったら無視でお願いしますm(__)m 指定の仕方など間違ってると思うので コードを書いてくれると助かります 回答お願いしますm(__)m

  • VBA フォルダ内にあるブックをすべて開く

    いつもお世話になります。 デスクトップ上にフォルダ「新しいフォルダ」があり、その中に6つエクセルブックがあります。 Book1.xls Book2.xls Book3.xls Book4.xls Book5.xls と test.xls です。 test.xlsに、Book1~Book5を開く というマクロを作り実行したところ、実行時エラー1004 『Book1.xlsがみつかりません』と表示されます。 Sub test() Dim buf As String, i As Long buf = Dir("C:\Documents and Settings\tsasaki\デスクトップ\新しいフォルダ\*.xls") Do While buf <> "" i = i + 1 Workbooks.Open Filename:=buf 'Cells(i, 1) = buf buf = Dir() Loop End Sub どのが間違っているか教えてもらえますか。

  • VBA Excel処理の追加を2点教えてください

    Office2003(SP3) 以下は、昔、教えてもらったExcel VBAスクリプトで、よく使わせて もらってます。「C:\mybooks\」にあるxlsファイル(a001.xls、a002.xls、 a003.xls・・・・)を片っ端から開き、 1つのBookに束ねる動作をします。 これだけでも大変便利なのですが、もう少し改善いたしたく。 (1) 束ねられたBookのSheet名が、Sheet1、Sheet1 (2)、Sheet1 (3)、 Sheet1 (4)・・・ になってしまいます。そこで、ファイル名から拡張子を落 とした文字列をSheet名にセットする記述をご教示下さい。 (2) a001.xls、a002.xls、a003.xls・・・は、それぞれSheet1、Sheet2、 Sheet3を含みます。Sheet1だけが抜き取られてSheet2、Sheet3が残された大量 の残骸Bookが開きっぱなしになります。これら、保存せずに閉じる記述を追加 したいのですが。 よろしくお願い致します。 Sub OpenFiles() Dim i As Integer Dim wb As Workbook Dim fname Dim dirname As String ' i = 1 dirname = "C:\mybooks\" fname = Dir(dirname + "*.htm") If fname <> "" Then Do While fname <> "" If fname <> "." And fname <> ".." Then If i = 1 Then ' 最初のファイルを開く Workbooks.OpenText FileName:=dirname + fname Set wb = ActiveWorkbook ' 最初のファイルを新規ブックに複製して閉じる。 ActiveSheet.Copy wb.Close Set wb = ActiveWorkbook Else ' 2番目以降のファイルは複製した最初のファイルに追加 Workbooks.OpenText FileName:=dirname + fname ActiveSheet.Move After:=wb.Worksheets(wb.Worksheets.Count) End If i = i + 1 End If fname = Dir Loop Else MsgBox "検索条件を満たすファイルはありません。" End If Set wb = Nothing End Sub

  • VBA EXCEL 開かずにデータ操作

    現在下記のようなコードでテストしています。 Sub Sample() Dim TargetBook As Workbook    Set TargetBook = Workbooks.Open("Book2.xls")    TargetBook.Sheets("Sheet1").Cells(1, 5) = Cells(1, 1)    TargetBook.Close End Sub Book2を開いてセルの読み書きはテストできました。 これをBook2をopenせず閉じた状態で操作したいと思っています。 Workbooksの表示されるメソッドを色々試してみますが出来ません。 OpenDatabaseが使用できるのかと思いますが、出来ません。 ご指導よろしくお願いします。

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

  • VBAで複数シートを新たに作成したBookにコピー

    いつも大変お世話になります。動作環境は、WindowXPSP3、EXCEL2010です。10個の名前付きsheetがあります。Book.xlsmから新たにBook1.xlsxを作成してこのBook1.xlsxに1個のsheet名が「sheet1」を作成します。そして、Book.xlsmにある10個の名前付きsheetをBook1.xlsxに作成した一個のsheet1にコピーします。コピーの仕方は、Book.xlsmの一番左端のsheetから順番にBook1.xlsxに作成した1個のsheet1に下から上に向かってコピーしていきます。最終的には、10個の名前付きsheetが纏められます。後一つの条件は、一番最初にコピーするシートには4行目に項目書かれております。なので、一番最初にコピー4行目だけはコピーして、後は、5行目からコピーしたく、下記のマクロを作成しました。 Option Explicit Option Base 1 Public Sub シートの纏め() Dim i As Long Dim mySheetCnt As Long Dim mySheetName() As String Dim ws As Workbook Dim s As Worksheet '========================================================================== mySheetCnt = ThisWorkbook.Sheets.count ReDim mySheetName(1 To mySheetCnt) For i = 1 To mySheetCnt - 3 mySheetName(i) = Sheets(i).Name 'MsgBox "変数mySheetName(" & i & ")=" & mySheetName(i) Next i '========================================================================== Dim EffectiveRow As Long Dim EffectiveColumn As Long EffectiveRow = Range("B65536").End(xlUp).Row 'MsgBox "EffectiveRow = " & EffectiveRow & "" EffectiveColumn = Cells(4, 256).End(xlToLeft).Column 'MsgBox "EffectiveColumn = " & EffectiveColumn & "" '========================================================================== Dim Book1 As Workbook For i = 1 To mySheetCnt - 3 If mySheetCnt = 11 Then GoTo Label1 'MsgBox "mySheetName(i) = " & mySheetName(i) & "" 'MsgBox "デフォルトで" & Application.SheetsInNewWorkbook & "枚作成されます" Workbooks.Add Application.SheetsInNewWorkbook = 1 Sheets("sheet1").Select Book1 = ActiveWorkbook.Name Workbooks("Bookxlsm").Worksheets("mySheetName(i)").Range("B4:AF58").Copy _   Workbooks("Book1.xls").Worksheets("sheet1").Range("B4") ⇐ここで、実行時エラーが出ます。 Next i Label1: End Sub しかし、実行時エラーで止まってしまいます。もう、1週間格闘しております。どなたか、何卒ご教授して頂きたく、宜しくお願い申し上げます。

  • 別bookのセルを参照するにはどうしたらよいでしょうか

    Next Forを使用したマクロで、そのNext For構文内で、別ブックのセルを参照したいのですが、どうしたらよいでしょうか。 下記のように作成してみたのですが、テストしてみると、同ブック同シートの該当セルを参照しているようで、機能しません。下記の書き方では間違っているのでしょうね・・・。 マクロ初心者で、とても初歩的な質問で申し訳ないのですが、教えていただきたく質問させていただきました。よろしくお願いします。 必要なブックは開いている状態です。 Cells(i,_)はbook1・シート"AAA"のi行・_列目を参照し、 Cells(n,_)はbook2・シート"BBB"のn行・_列目を参照し、 Cells(s,_)はbook2・シート"BBB"のセルを参照してほしいのですが・・・。 (1) book1・シート"AAA"のi行18列目のセルとbook2・シート"BBB"のn行・1列目の値が同じであれば (2) (book2・シート"BBB"のn行・1列目)の1行下をs行目としてs行・4列目のセルとbook1・シート"AAA"のi行28列目のセルが同値であれば (3) s行4列目からs行9列目を”ClearContents”するという内容です。下記のマクロは全て記述しておりませんが、ここが間違っているのは確実だと思います。今後の勉強にも是非生かしていきたいと思っておりますので、どうぞよろしくお願いいたします。 Sub test01() Dim n As Long Dim i As Long Dim s As Long For i = 6 To Workbooks("book1.xlsx").Worksheets("AAA").Cells(Rows.Count, 16).End(xlUp).Row If Cells(i, 16) = "" Then Exit For Else For n = 4 To Workbooks("book2.xlsx").Worksheets("BBB").Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 16) <> "" And Cells(i, 18).Value = Cells(n, 1).Value Then For s = n + 1 To Workbooks("book2.xlsx").Worksheets("BBB").Cells(Rows.Count, 4).End(xlUp).Row If Cells(s, 1) <> "" Then Exit For ElseIf ..............

  • VBA コード番号がない場合は、次の行へ進む

    OSはXPPro、 Excelは2003を使用しています。 入金データの「支店データ」シートのコード番号がマスタの表にある時、新シート(test)にコピーするマクロを作ろうと悪戦苦闘しています。 下記までは組んだのですが、「インデックスが有効範囲にありません」とエラーになってしまいます。 マスタにないコードだからだと思っているのですが、そういう場合は次の行のコード番号に進めるステートメントをどう組めば良いか分かりません。 どなたかご教示頂けると有り難いです。 よろしくお願い致します。 Sub test() Dim wb As Workbook Dim ws As Worksheet Dim mypath As String Dim fname As String Dim maxgyo As Long 'マスタの最終行 Dim intRow As Long 'マスタの行 Dim strMasCode As Long   'マスタのコード番号 Dim maxgyo2 As Long '入金データの最終行 Dim intRow2 As Long '入金データの行 Dim strSrhCode As Long '入金データのコード番号 Dim shingyo As Long '新シートの書き込み行 Worksheets.Add After:=ActiveSheet, Count:=1 '新しいワークシートを作成 ActiveSheet.Name = "test"            'そのシートの名前は[test] mypath = "C:\Documents and Settings\XXX\My Documents\XXX\" fname = "マスタ.xls" Set wb = Workbooks.Open(mypath & fname) '上記で指定したブックを開く Set ws = wb.Worksheets("担当マスタ")     '[担当マスタ]シートを指定 Workbooks("入金データ").Activate maxgyo = Sheets("支店データ").Cells(Rows.Count, 1).End(xlUp).Row '支店データの最終行 For intRow = 2 To maxgyo strSrhCode = Worksheets("支店データ").Cells(intRow, 6) shingyo = 1 shingyo = singyo + 1 Workbooks("マスタ").Activate maxgyo2 = Sheets("マスタ").Cells(Rows.Count, 2).End(xlUp).Row 'マスタの最終行 For intRow2 = 2 To maxgyo2 strMasCode = Sheets("マスタ").Cells(intRow2, 2) 'マスタのコード番号を代入 If strSrhCode = strMasCode Then 'マスタと支店データのコード番号が一致したら With Workbooks("入金データ").Worksheets("test") .Cells(shingyo, 1) = Worksheets("支店データ").Cells(intRow, 1) .Cells(shingyo, 2) = Worksheets("支店データ").Cells(intRow, 2) End With End If Next intRow2 Next intRow End Sub

  • エクセルVBA 無駄な部分をおしえてください

    VBA初心者です。 多数のシートを条件によって二つのブックに分ける、というVBAを作ろうとしています。 なにぶん素人なので、無駄な文章が多いのではないかと心配で、 お知恵を拝借できればと思い投稿いたしました。どうぞよろしくお願いいたします。 やりたいこと:Book1のA列に100程度の文字列があり、そのいずれかと一致するシート名(Book1のSheets(2)以降)を持つシートはBook2の最終シートの後ろへ、どの文字列ともシート名が一致しないシートはBook3の最終シートの後ろへ移動。(「最終シートの後ろへ移動」がうまくいっていません) VBAの内容:Book1のH1に「=countif(A:A,G1)」と入力しておき、G1にシート名を入力させ H1>0ならば該当シートをBook2へ、それ以外はBook3へ移動 の繰り返し   Application.ScreenUpdating = False Dim j As Integer, k As Integer j = Workbooks("Book2.xls").Worksheets.Count k = Workbooks("Book3.xls").Worksheets.Count Do While Workbooks("Book1.xls").Sheets.Count > 1 Range("G1").Value = Worksheets(2).Name If Range("H1").Value > 0 Then Worksheets(2).Move after:=Workbooks("Book2.xls").Sheets(j) Else Worksheets(2).Move after:=Workbooks("Book3.xls").Sheets(k) End If Loop

  • Excel VBAで他のワークブックからのコピぺの仕方について

    Excel VBAで開いている全てのワークブックから決められたセルの中身とそのシート名をそれぞれ決められた一つのワークブックにコピぺする マクロを作りたいのですが、どうやって作って良いのかが分かりません。 例えば、 Sub Mac() For i = 1 To 100 Workbooks("Book1.xls").Worksheets("sheet1").Range(Cells(2108, 2), Cells(3108, 2)).Cut Destination:=Workbooks("Book1.xls").Worksheets("sheet1").Cells(13, 2) End Sub みたいにすれば良いと思うのですが、開いている全てのファイルからのコピぺってどうやって記述するのでしょうか? 何卒よろしくお願い致します。