前提・実現したいこと
A列に特定の文字が入っているところからFor文をスタートさせたいです。
↓のプログラムでは
都道府県.xlsxのL4にThisWorkbookのJ2をコピー
都道府県.xlsxnのM4にThisworkbookのL2をコピー
都道府県.xlsxのN4にThisworkbookのM2をコピー
・
・
・
と、変数cntとiを使ってデータ数分繰り返しを行っています。
今はcnt=4と具体的に数字を代入をしていますが、
始まるセルが変わる可能性もある場合(都道府県.xlsxのセルを追加した場合など)を考えて
A列に'東京'と入っている場合以下のFor文を繰り返す というコードを書きたいです。
Dim wb As Workbook Set wb = Workbooks("都道府県.xlsx") Dim i As Long Dim cnt cnt = 4 For i = 2 To ThisWorkbook.Worksheets("A").Cells(Rows.Count, 1).End(xlUp).Row wb.Sheets(1).Range("L" & cnt) _ =ThisWorkbook.Worksheets("A").Range("J" & i) wb.Sheets(1).Range("M" & cnt) _ = ThisWorkbook.Worksheets("A").Range("L" & i) wb.Sheets(1).Range("N" & cnt) _ = ThisWorkbook.Worksheets("A").Range("M" & i) wb.Sheets(1).Range("O" & cnt) _ = ThisWorkbook.Worksheets("A").Range("K" & i) cnt = cnt + 1 Next End Sub
試したこと
試しにIF文を入れてみたのですが、
ここでcntに入れる値何が入るのかが分からなくて困っています。
ご教授お願いいたします。
Dim wb As Workbook Set wb = Workbooks("都道府県.xlsx") Dim i As Long Dim cnt cnt = 4 'i=2から最終行まで繰り返し For i = 2 To ThisWorkbook.Worksheets("A").Cells(Rows.Count, 1).End(xlUp).Row 'もしA列に東京という文字が入っていたら IF wb.Sheets(1). InStr(wb.Sheets(1).Range("A" & i), "東京") Then wb.Sheets(1).Range("L" & cnt) _ =ThisWorkbook.Worksheets("A").Range("J" & i) wb.Sheets(1).Range("M" & cnt) _ = ThisWorkbook.Worksheets("A").Range("L" & i) wb.Sheets(1).Range("N" & cnt) _ = ThisWorkbook.Worksheets("A").Range("M" & i) wb.Sheets(1).Range("O" & cnt) _ = ThisWorkbook.Worksheets("A").Range("K" & i) cnt = cnt + 1 End IF Next End Sub
コピー先は4行目から順番に1行ずつ進むのですよね?
で、2行目から最終行までの間で、A列が東京の行だけ、コピー先の4行目以降にコピーしたいのですか?
それとも、2行目から最終行までの間で、A列が東京である最初の行を探し、見つかったら、その行から最終行までの間で、コピー先の4行目以降にコピーしたいのですか?
コピー先は4行目から始まるとは決まってないです.
そのため、実現したいことは後者になります。
A列に東京という文字が入っているか確認する必要があると思うので、
4行目から始まるかはわからない という感じです。
えーと、確かにこれは混乱しています。
東京が入っているかどうかをチェックしているのはコピー先であるwb.Sheets(1)なのに
コピー元のシートのインデックスである i を使ってチェックしています。まずそこからおかしいです。
要件をしっかり明文化しましょう。
・「A列に」というのはどのシートの話をしているのか→コピー元の話かと思っていたらコピー先の話だった
・コピー元からは2行目から最終行まで全部をコピーするのか?
・各行のコピー先はどこ?
・A列➔コピー先の話
・コピー元からは2行目からデータ数分だけコピーしたいので最終行と設定しています。
「コピー先A列で東京が入っているセルを見つけたら、そこを始点としてFor文を回す」のか「コピー先A列の中でFor文を回して、東京とあるセルにだけ処理をするのか」が曖昧な気がするのですが、どちらなのでしょう?
回答2件
あなたの回答
tips
プレビュー