- 締切済み
VBAについて
こんばんは、下記のVBAについて質問をさせてください…! シートの名前と特定の列の名前が一致したらデータを引っ張ってくるというVBAなのですが、下記のVBAではもってくるデータはE列でおわりですが、もっと沢山列がある場合で、例えばDA列とかまである場合はどうすればよいのでしょうか…?! まさか「.Range("A" & cellCnt).~」というのを一つ一つ入力するわけではないと思うのですが、記述の方法が分からず困っています。 どなたかご教示いただけると大変助かります…! ' データをとってくるシートの行 Dim dataCnt As Integer ' 貼り付け先のシートの行 Dim cellCnt As Integer cellCnt = 1 For dataCnt = 1 To Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row If Sheets("Sheet1").Range("L" & dataCnt).Value = Sheets(sheetIdx).Name Then With Worksheets(sheetIdx) .Range("A" & cellCnt).Value = Worksheets("Sheet1").Range("A" & dataCnt).Value .Range("B" & cellCnt).Value = Worksheets("Sheet1").Range("B" & dataCnt).Value .Range("C" & cellCnt).Value = Worksheets("Sheet1").Range("C" & dataCnt).Value .Range("D" & cellCnt).Value = Worksheets("Sheet1").Range("D" & dataCnt).Value .Range("E" & cellCnt).Value = Worksheets("Sheet1").Range("E" & dataCnt).Value End With cellCnt = cellCnt + 1 End If Next
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- SI299792
- ベストアンサー率47% (780/1631)
プログラムの検証はしていませんがDAまでの場合、 .Range("A" & cellCnt, "DA" & cellCnt) = Worksheets("Sheet1").Range("A" & dataCnt, "DA" & dataCnt).Value や .Range("A" & cellCnt).Resize(, 105) = Worksheets("Sheet1").Range("A" & dataCnt).Resize(, 105).Value という書き方で、一度に転送できます。
- imogasi
- ベストアンサー率27% (4737/17069)
>特定の列の名前 また「特定の」なんて書いているが、それより、データ模擬例をあげるべきだ。 自信のない自分のVBAコードなど挙げるより、出てきた、良い回答(のロジックやコード)を勉強したら。 シート名を探すシートは複数か?データを探すシートは複数か? 対象が単数・複数は非常に大切。 列の名前というのはないが、項目名を第1行目にでも置いているのか。 ーー ForNextでたとえばCells(1,j)と問題のシート名文字列を深くして探せば仕舞ではないのか。 Find、FindNextメソッドがすっきりするが、該当が複数ある時、FindNextのコードが、VBAでは、初心者にはむつかしいと思うから、1つ見つかっても終り列まで比較を繰り返せば、仕舞だろう。」
- kkkkkm
- ベストアンサー率66% (1734/2604)
No1の追加です A列から始まらない場合はNo1だとResizeの調整が必要になりますからこちらのほうがいいかも。 Dim Sh1 As Worksheet を追加して Set Sh1 = Sheets("Sheet1") With Worksheets(sheetIdx) .Range(.Cells(cellCnt, "A"), .Cells(cellCnt, "DA")).Value = Sh1.Range(Sh1.Cells(dataCnt, "A"), Sh1.Cells(dataCnt, "DA")).Value End With
- kkkkkm
- ベストアンサー率66% (1734/2604)
.Range("A" & cellCnt).Resize(1, Columns("DA:DA").Column).Value = _ Worksheets("Sheet1").Range("A" & dataCnt).Resize(1, Columns("DA:DA").Column).Value みたいな感じでいかがですか。