VBAマクロで最後の日から遡って6日間1が連続した行をコピーする方法

このQ&Aのポイント
  • ExcelのVBAで、最後の日から遡って6日間にわたり1が連続した行を別のシートにコピーする方法を教えてください。
  • 毎日のデータが表形式で出力されており、最後の日から遡って6日間にわたって1が連続している行を抽出したいです。
  • 行の最後から6日間、すべての要素が1である行を別のシートにコピーするExcelのVBAマクロを作成したいです。
回答を見る
  • ベストアンサー

1が6連続登場したらその行をコピーするVBAマクロ

私は、Excelの「マクロの記録」で自動記述されたマクロを少々いじる程度しかできないスキルです。 行いたい処理がEXCEL VBAで実現できなくて困っています。どうぞお力を貸してください。 毎日、添付した画像の「上の表」のようなデータが出ます。 「下の表」は、二日後のデータに見立てています。このように、日ごとに列が増えていく表です。 (値の部分は、数値で0か1しか入りません。) (上下に表を並べていますが、実際には「月初から本日まで」の1つの表しかありません。) ここで、やりたいことは・・・ 最後の日付から遡って6日間にわたり1が連続したら、その行だけ取り出して別シートにコピーしたいのです。 添付画像には、「すべての6連続した1」に黄色の網掛けをしていますが、 必要なのは「一番最後の日から遡って6日連続しているものだけ」です。 たとえば7/10の時点(上の表)では、工藤さんの行だけが該当。 7/12時点(下の表)では、石井さんだけが該当することになります。 該当した行を丸ごと、別のシートにコピーしたいわけです。 日によって、該当する行が複数行存在するときもあります。 自分で考えた限りでは、 データの右端(合計列)を見つけ、そこから左へ1セルだけオフセット→変数へセット そこからさらに左へ5セルオフセット→変数へセット それを選択範囲の開始セルと終了セルにできれば、 その中身がすべて1だった場合のみ、その行をコピーすればよいのでは・・・ と考えました。 行を1ずつ下に移動しながら最終行まで処理を続ける。 それを、行が終わるまで、繰り返す・・・(日によって行は増えたり減ったりする) (データは0か1かしか入らないので、最終日から6日間を範囲選択している場合、全部1か?という判断をしてもよいし、足して6か?という判断でもよさそうです) しかし、オフセットでセルはセレクトできても、 それを開始セル・終了セルとした「範囲」にすることができず、 また、行が終わるまで繰り返す処理も記述の仕方がわかりませんでした。 全く形になっていないので書く意味はなさそうですが、自分の記述を下記に示します。 繰り返し処理はネットで検索しました。 ---------------------- Sub testMacro() ' ' testMacro Macro ' Dim i As Long Dim MaxRow as Long Range("A2").End(xlToRight).Select '2行目で、データの右端をセレクトする。変数にセットすべき? Selection.Offset(0, -1).Select 'これが選択範囲の最初。変数にセットすべき? Selection.Offset(0, -5).Select 'これが選択範囲の最後。変数にセットすべき? Range(開始セル:終了セル).Select'この範囲指定がわからない MaxRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row '最後の行を知る(どの列でもいい) For i = 1 To MaxRow '1ずつ増やしながら最終行まで繰り返す   '範囲内が全部1かどうか(あるいは足して6かどうか)調べて、そうでなかったら次の行へ。   'もし全部1ならならコピーして別シートへコピー。 Next i End Sub ---------------------- 本当にまったく形になっていなくてすみません。 お力を貸していただけると嬉しいです よろしくお願いします

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

No1のものです。 勉強のために解説するほどのものではないですが解説を書いてみました。 だいたい考え方はあっています。 実際の方法として要点ごとに以下のように解説致します。 不明な点があれば補足してください。 他サイト様ですが、 分かりやすい解説をされているサイトも参考でURLを載せておきます。 >該当した行を丸ごと、別のシートにコピーしたいわけです。 フォーマット(タイトル行や列幅等)を引き継ぐために 該当行をコピーではなく、シートをコピーしてから ActiveSheet.Copy After:=ActiveSheet Set mySt = ActiveSheet 不要行を削除する方法にしています。 Rows(i).Delete >日によって、該当する行が複数行存在するときもあります。 全ての行に対して処理をしています。 行削除を行っているので若い行番号→最終行番号ですと 行削除した際に次の行番号が上にシフトしてしまい、 1個飛ばしになってしまうため、最終行から若い行(開始行)へ Step値を-1として処理しています。 For i = .Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1  ~ Next i http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_for_next.html >データの右端(合計列)を見つけ、 >そこから左へ1セルだけオフセット→変数へセット Findで「計」を検索し合計列の列番号を取得しています。 合計列の列番号から-1した値を最終日の列番号として利用します。 myCol = ActiveSheet.Rows(1).Find("計").Column - 1 http://www.moug.net/tech/exvba/0050116.html >そこからさらに左へ5セルオフセット→変数へセット >それを選択範囲の開始セルと終了セルにできれば、 セル範囲は『Range(開始セル,終了セル)』で指定できます。 .Range(.Cells(i, myCol - 5), .Cells(i, myCol)) http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html http://www.clayhouse.jp/vba/vba01.htm >その中身がすべて1だった場合のみ、その行をコピー >(あるいは足して6かどうか) 『WorksheetFunction.』+『関数名(引数)』で エクセルのワークシート上で使用する関数を利用出来ます。 今回は『Sum』関数を使用し、引数に上記のセル範囲を設定しています。 Ifブロックで使用している『Not』は後に続く条件式が否定の場合に真となります。 よって、「対象範囲の合計値が6以外の場合に処理」となります。 If Not WorksheetFunction.Sum( _    .Range(.Cells(i, myCol - 5), .Cells(i, myCol)) _    ) = 6 Then  ~ End If http://www.excel-vba.net/excel-condition-001.html http://home.att.ne.jp/zeta/gen/excel/c04p20.htm

tanako-gi-
質問者

お礼

回答ありがとうございます。 Findの活用や If Notをつかった条件判断と繰り返し、大変参考になります。 また、丁寧な解説も入れてくださり、初心者として大変助かります!(^^)! 実はこの質問、作りたい全体プログラムの、もっとも難しい1部分についてアドバイスをいただこうと思ってのもので、実際にはさらにいろいろな処理を続けていく必要があります。 (なんだか、全部を丸投げするのって反則のような気がしまして・・・) 今回の回答をいただけて、びっくりするほどVBA構築のめどが立ってきました!!(^^)/ まだまだ難関はありますけれど~(´・ω・`) ↓↓↓  完成目標は…こうです!  ↓↓↓ 今回の元データはチーム1.xlsブックのデータである。 ほかにもチーム2.xls、チーム3.xlsなど、10ファイルほどある。 既存の「連続6個.xls」というブックがあり、プログラムはその標準モジュールに記述する 連続6個.xlsは、チーム1.xlsを開いて、今回教えていただいたプログラムを実行する。 出力シートに抽出された6連続1のデータ行は、「連続6個.xls」の最終行にコピーされる。 この時、A列に入っていた人の名前を、ブック名と同じチーム1にする。(複数行あっても。) 続いてチーム2.xlsを開き、同処理実行。抽出されたデータは、「連続6個.xls」の最終行にさらにコピーされていく。A列はチーム2とする。 (出力シートに抽出された時点で、A列の全セルにブック名を入れておくべきですね♪ この時、書いて下さった処理構文 .Range(.Cells(i, myCol - 5), .Cells(i, myCol)) に近いものが使えそうです♪) 連続6個.xlsブックは、 チーム1  1 0 1 1 1 1 1 1 1 1 チーム1  1 0 1 0 1 1 1 1 1 1 チーム1  1 0 1 1 1 1 1 1 1 1 チーム2  0 0 0 0 1 1 1 1 1 1 チーム3  1 1 1 0 1 1 1 1 1 1 ...... みたいな感じになるでしょう。 チーム1、チーム2、チーム3・・・という風に複数ブックを開いては処理して閉じる、をしていくので、 変数にブック名を配列としてチーム1、チーム2、チーム3…という風に入れて、 forで繰り返す時にブック名が入れ替わるようにできたらいいですよね♪ これもかなりの難関っぽいですねー ( ;∀;) でもたぶん、これも教えていただいた With ~ End With のところを活かしつつ、工夫する感じでしょうか~( *´艸`) ↑↑↑  完成目標は…こうです!  ↑↑↑ 目標はこんな感じです♪前途多難ですネ(笑) でも、本当に今回教えていただいた構文からの発展が見込めます。 大変うれしいです。(^^♪ もし、またどこかで躓いたら、似たような質問を載せると思います。 その時はまたぜひ、ご協力よろしくお願いします!!!(笑) 頑張ります、ありがとうございました! m(__)m

その他の回答 (2)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

各ブックから条件一致を別ブックへ集約するという事でしたら、 シートコピー → 不要行削除では扱いにくいですね。 新規シート作成 → 条件一致行をコピーに変更しました。 以下の変更点となります。 (コード内の関連する箇所に該当番号をコメントしています) (1)出力先の行数をカウントするcnt変数を追加 (2)6連続行の判定箇所で「Not」を削除 (3)ループ処理を最後から手前ではなく、開始から終了へ順送りに変更 (4)取得元と出力先のシートを配列変数(シートオブジェクト)に格納して処理 ※) 補足の内容については質問の追加となり利用規約違反になりかねないため この場での回答は控えさせていただきます。 不明な点があれば別途質問としてあげてください。 試行錯誤しながら、完成まで頑張ってください。 ■変更VBAコード Sub 判定コピー2() '変数型宣言 Dim myCol As Long Dim mySt(1) As Worksheet '(4) Dim i As Long Dim cnt As Long '(1) '最終日取得 '(1行目の"計"を検索し、見つかった列-1を最終日の列番号とする) myCol = ActiveSheet.Rows(1).Find("計").Column - 1 'コピー元シートを記憶 '(4) Set mySt(0) = ActiveSheet 'シート新規作成 '(4) '(コピー先のシートを作成) Worksheets.Add After:=ActiveSheet Set mySt(1) = ActiveSheet 'シート名設定 '(新規作成したコピー先のシート名を設定) mySt(1).Name = "出力" '行数分処理 With mySt(0)   For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row '(3)     If WorksheetFunction.Sum(.Range(.Cells(i, myCol - 5), .Cells(i, myCol))) = 6 Then '(2)       '最終日手前6セル分の合計が6以外であれば行コピー       cnt = cnt + 1 '(1)       .Rows(i).Copy mySt(1).Rows(cnt)     End If   Next i End With End Sub

tanako-gi-
質問者

お礼

ありがとうございます~~(^з^)-☆ まさか変更版を書いていただけるとは思っていませんでした!(*^^*) これでいよいよ完成に近づける気がします。 各処理の仕組みや意味が良く理解できましたので、今後にも役立てられる気がします。 どうもありがとうございました~~(*^^*) もしこれに関する別の質問を目にされたときは、またぜひ助けていただきたいです(笑) がんばります(*^^*)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

シートを右クリック→コードの表示 または、Alt+F11でVBEを開き、標準モジュールを作成 してから最下のVBAコードを貼り付けてください。 コピー元のシートを表示した状態で、 表示→マクロ(または、Alt+F8)より「判定コピー」を選び「実行」してください。 表示中のシートの右側に「出力」という名前で新規シートが作成され、 該当の結果が表示されます。 注) 最終日の取得に『1行目』に存在する『「計」が入力されたセル』 の1つ手前の列を最終日の列として取得していますので、 「計」が見つからない場合はエラーとなります。 ■VBAコード Option Explicit Sub 判定コピー() '変数型宣言 Dim myCol As Long Dim mySt As Worksheet Dim i As Long '最終日取得 '(1行目の"計"を検索し、見つかった列-1を最終日の列番号とする) myCol = ActiveSheet.Rows(1).Find("計").Column - 1 'シート新規作成 '(コピー先のシートを作成) ActiveSheet.Copy After:=ActiveSheet Set mySt = ActiveSheet 'シート名設定 '(新規作成したコピー先のシート名を設定) mySt.Name = "出力" '行数分処理 With mySt   For i = .Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1     If Not WorksheetFunction.Sum(.Range(.Cells(i, myCol - 5), .Cells(i, myCol))) = 6 Then       '最終日手前6セル分の合計が6以外であれば行削除       .Rows(i).Delete     End If   Next i End With End Sub

tanako-gi-
質問者

お礼

回答ありがとうございます~~~(^^)/ 美しいプログラムですね!! .Range(.Cells(i, myCol - 5), .Cells(i, myCol))) のところとか、初心者がネットで解説を見た程度ではなかなか構成できないところですね~~ 大変助かります。ありがとうございます(^_-)-☆

関連するQ&A

  • エクセルVBAで行のコピー貼り付けについて

    初心者、勉強中でエクセル2007です。 A1行からK40行までの表があります。 これを下にコピーをしながら増やしていってるのですが、マクロでしようと思い下記のとおり 考えました。 selecion.row.Offset(39, -1).Select ここでオブジェクトが必要ですと出ます。 それからその下の?とを色々ぐぐってみますがどうしてもわかりません。 それと2007ですので65536行ではないのですが、MaxRow = Cells(Rows.Count, 1).End(xlUp).Row だと動かないみたいですので下記としています。 よろしくご教授お願いします。 Sub Gcopy() MaxRow = Range("B65536").End(xlUp).Offset(-39, -1).Select データの入ってる最終行を取得 Selecion.row.Offset(39, -1).Select 選択された行から上に39行移動し選択 ?                    下へ39行まで選択   MaxRow = Range("B65536").End(xlUp).Offset(1, -1) 最終行を取得 ActiveSheet.Paste 貼り付け End Sub

  • エクセルのマクロで行選択の選択範囲を変数指定する方法

    あるファイルのデータを別のファイルに行挿入でコピーするマクロを作ろうとしています。 コピー元の選択について、行範囲が固定であれば例えば   Rows("10:20").Select でよいのですが、コピー元行範囲がファイルにより異なるので変数化する必要があります。 単純には、 Sub Row_Copy() Dim AA, BB As Integer AA = 10 BB = 20 ' 10行目から20行目を行選択しコピーする Rows("AA:BB").Select '##ここが問題## Selection.Copy ' ' (簡単のため)同じシートに行挿入する例 Rows("30:30").Select Selection.Insert Shift:=xlDown End Sub ですが、これだと Rows("AA:BB").Select の部分でエラーになります。 いろいろとやってみましたが、どうしても何らかのエラーになってしまいます。Rowsは変数では使用できないのでしょうか? ちなみに、行範囲の選択ではなくRangeでセル範囲の選択をするという方法もありますが、複数ファイルのデータをコピー先の一つのファイルにマージするために行挿入でコピーしたいことと、列方向の柔軟性を持たせたいため、コピー元選択方法として行範囲の指定をしたいという趣旨があります。 また、1行毎のコピー・行挿入をデータの行数だけ繰り返すという手もありますが、データ量が多いとかなり処理時間がかかるためこれも避けたいと思っています。 マクロ初心者で知識不十分ですが、よろしくお願いします。

  • エクセル(VBA)で複数セルのコピーができません

    お世話になっております。 マクロを使って複数のセルを選択してコピーし、別のブックにあるシートへ 貼り付けたいのですが上手くいきません。  Range(Selection, Selection.End(xlToRight)).Select   Selection.Copy 上記のようにコピーしたいセルの入っている行全体の貼り付けは出来たのですが、必要なデータのセルのみ(隣り合っていない)を選択して 貼り付けようとすると何もコピーされていない状態で終了してしまいます。 (変数に代入してコピー等・・・) どなたか教えて下さい。

  • 任意の複数行をコピーするマクロ

    VBを勉強中の初心者です。 マクロの自動記録でシート1の5~6行目をシート2のセルA3へコピーすることはできました。マクロの内容は   Sheets("Sheet1").Select   Rows("5:6").Select   Selection.Copy   Sheets("Sheet2").Select   Range("A3").Select   ActiveSheet.Paste となっていました。 上記のシート1の5~6行目を任意の複数行(例えば A1 に 200306 A2 に 200307 A3 に 200307 A4 に 200307 A5 に 200308 A6 に 200309 A7 に 200309 のデータがあった場合、コピーしたい年月が 200307 の場合は A2 ~ A4 をシート2のA3へ)でコピーしたいのですが、どうすればよいのかどなたか教えて下さい。よろしくお願いします。

  • Excel vbaで、一行ずつコピーし連続保存する

    Excel vbaで、一行ずつ別シートにコピーして、そのシートを連続で保存したいです。 まず、Excelで、「全員データ」シートと、「個人別データ」シートを作りまして、 「全員データ」シートのA2からA4までは氏名、B2からC4までは任意の数字等を入力しています。 その状態で、「全員データ」シートに保存したデータを、一人分ずつ「個人別データ」シートにコピーし、 その「個人別シート」を連続で保存する、という作業をしたいと思っています。 ちなみに下記コードでうまくできました。 (セルの値を使ったファイル名の作成も併せて行えました。) そこからさらに、「個人別データ」シートから単純に(=個人別データ!A2というように)リンクさせた「印刷用シート」を同様に連続で保存する、という作業までしたかったのですが、 その場合に、(1)ファイル名の作成は2行目から4行目のものを使ってうまくいくのですが、(2)そのファイルの中身が全て4行目(最終行)のものになってしまいます。 いろいろ試してみたのですが、解決できませんでした。 付け焼刃程度の知識しかなく、お聞きするのに必要なだけの情報を記載できたかもわかっていません。 情報不足であれば、そこもご教示いただければ助かります。 よろしくお願いします。 Sub 保存() ' ' 保存 Macro ' '変数を定義 Dim 保存先 As String Dim 最終行 As Long Dim 該当行 As Long 保存先 = ThisWorkbook.Path & "\個人別フォーム" 最終行 = Worksheets("全員データ").UsedRange.Rows.Count 'ループ For 該当行 = 2 To 最終行 '一行ずつコピー Sheets("全員データ").Select Range(Cells(該当行, 1), Cells(該当行, 3)).Select Selection.Copy '「個人別データ」シートに貼り付ける Sheets("個人別データ").Select Range("a2:c2").Select ActiveSheet.Paste '「個人別データ」シートを名前を付けて保存 Sheets("個人別データ").Select ’⇒「個人別データ」ではなく「印刷用データ」としたい。 Sheets("個人別データ").Copy ’⇒「個人別データ」ではなく「印刷用データ」としたい。 ActiveWorkbook.SaveAs _ Filename:=保存先 & "\個人別データ" & Range("A2") & Range("B2") & Range("C2") & ".xlsx", _ FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close Next 該当行 End Sub

  • エクセルVBAでコピーすると行の高さが低くなる

    いつもお世話になってます。 エクセル2003のVBAで、セルの範囲を指定してコピーすると行の高さが低くなってしまいます。その他の書式は、変化せずうまくコピーできています。以下がプログラムです。 Sub copy_hyou() Worksheets("sheet1").Activate Range("A1:K24").Copy 'セルA1からK24をコピーします。 Range("A25").Select 'A25からペイストします。 ActiveSheet.Paste End Sub どう直せば、行の高さもコピーできるでしょうか? お休み中すみませんがよろしくお願いいたします。

  • 条件分岐マクロの作り方? 

    あ い う え お か き く け …こういったデータがあります。 「あ」のセルが選択しておいて、 ボタンを押すと、処理が始まるマクロを組みました。 ・まず、選択範囲を、「あ~う」に広げる (2行右まで選択) ・選択範囲(あ~う)をコピーして、 ・別のシートにはりつける ・・・という処理です。 今、「複数の選択範囲を同時に処理」できないものかと考えています。 たとえば、 1.《一つのセルが選択されている》場合は、従来通りのマクロ処理 2.《あ~けまで、9つのセルを選択してあるならば》、この範囲をまるごとコピーペーストする。 ・・・IF ELSEなどを使用するのかと思うのですが、その組み方がわかりません。 アドバイスを、お願いします。

  • 行をコピーするマクロ

    下記のような表があります。 最初は10件分の行しかない(印刷するとこれで1ページ) のですが10件を超えた場合に、この元になっている表 (データの入っていないテンプレート、他のシートにあります) から10件を埋めた後にコピーするマクロを組みたいのです。 具体的には23行目に別シートの2行目から22行までをコピー するマクロボタンをこのシートにおきたいと思っています。 日によってデータの量は数件から200件くらいになり、日締めで これを印刷しなければいけないので、必要なページのみ 印刷したいからです。 使っているのはWindowsXP(SP3)、OfficeXP(2002)です。

  • VBA 範囲指定してコピー&ペーストしたい

    WindowsXP SP2 Office2003 を使っています。 ExcelVBAで、 シート「Sheet1」のセル(B9:B40)を範囲選択してコピーし、 シート「Sheet2」のセル(A2:A33)に貼り付けをしたいのです。 行数は毎月増えていきます。 例えば、1月が9から40でしたら、2月は41から70、3月は71から102・・・ B列だけだったら、Range("B" & tateA & " :B" & tateB).Select で記述できますが、 列は、7個ずつ増えた列数の情報を取得したいのです。 Sheet1では、B列から始まり7個ずつ列数が増え、I列(I9:I40)、P列(P9:P40)、W列(W9:W40)・・・の値を Sheet2のB列、C列、D列に値ベースで貼り付けするマクロを考えています。 (Sheet2の列数は1個ずつ増えます。) ざっくりになりますが表のイメージとしては、 Sheet1にはカテゴリ毎に複数の項目があり、 Sheet2にはSheet1のカテゴリ毎の合計値だけを一覧にし、見やすく表示させたいのです。 1回の処理では1ヶ月分の処理を行うため、行情報は9から40で固定なのですが、 列番号は一定の数増えたものを変数にしたいのですが、表示の仕方が分かりません。 ようは『Range("B" & tateA & " :B" & tateB).Select』 の列表示のBも変数にして、 その変数を7個ずつ増やして処理をしたいのです。 説明がうまく出来なくて申し訳ないのですが、 列と行を変数にした表示の仕方を分かる方がいましたら、教えてください。 よろしくお願いします。

  • マクロについての質問です

    前回、このサイトにて教えてもらったマクロにて、不明な点が出てきましたので再度質問させていただきます。 ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞                           ボタン  A  B  C  D  E  F  G    H                  data1                      data2                    data3                      data4                    data5                    data6                      ・                        ・                        ・     ※Gの列にはハイパーリンクが並んでいます。 ※ボタン押下時に選択しているセルの行番号を取得し、その行のA~F列をコピーして、ハイパーリンクで開いた ファイル(date・・・)にはりつける。 ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ この作業のマクロを教えていただき、以下のマクロが出来ました。 Sub book() Dim col As Integer '選択行No取得用変数 Windows("book.xls").Activate col = ActiveCell.Row '現在選択している行No格納 Range(Cells(col, 1), Cells(col, 6)).Select '該当行のA~F列選択 Selection.Copy '選択範囲コピー Cells(col, 7).Hyperlinks(1).Follow NewWindow:=True '該当行のリンク開く Sheets("Sheet2").Select '貼り付けシートの選択 Range("a2").Select '貼り付けセルの選択 ActiveSheet.Paste '貼り付け End Sub このマクロで、もともと作成していた6行程度の表では何の不自由も無く作業できました。 次にこの表の行が大量に増えてきましたので \\server\スタッフ\購買 フォルダーに、連続した番号のファイル (date1・date2・・・・date10)を作成し、上記の表の3行目(data1の行)のG列に、ハイパーリンク関数  =HYPERLINK("\\server\スタッフ\購買\"&H3&".xls",H3)を入力。 その後、3行目H列にdate1を入力し、フィルコピーにてdate1・date2・・・・date10までを作成。 次に3行目G列からフィルコピーにてハイパーリンクdate1・date2・・・・date10までを作成。 これで、単純に上記表を拡大することが出来たと思っていたのですが、今まで使っていたマクロボタンを押すと “実行時エラー9:インデックスが有効範囲にありません”となってしまい、デバックすると Cells(col, 7).Hyperlinks(1).Follow NewWindow:=True の行が黄色に点灯していました。 これはどういう内容でしょうか?どの作業が悪いのでしょうか?私としては、この表のからリンクするファイルを 増やし、そのファイル名をフィルコピーにて表に陳列させたいと考えていました。 もし何か良い作業があれば教えていただきたいです。すみませんがよろしくお願いします。

専門家に質問してみよう