[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『構文のまとめ方』(まんじゅう)
VBAを作ってますが、下記の構文をすっきりまとめるには方法ありますか?
まとまりそうで、指示してるセルが違うのでまとまらないような。。。
お願い致します。
i = 0 With a.Sheets(s.Name) With .Range("A6", .Cells(Rows.Count, "A").End(xlUp)) For Each w In .SpecialCells(xlCellTypeVisible) b.Sheets(h.Name).Range("B5").Offset(i).Resize(, 3).Value = w.Resize(, 3).Value i = i + 1 If (i >= 22) Then Exit For Next i = 0 End With With .Range("E6", .Cells(Rows.Count, "E").End(xlUp)) For Each w In .SpecialCells(xlCellTypeVisible) b.Sheets(h.Name).Range("F5").Offset(i).Resize(, 2).Value = w.Resize(, 2).Value i = i + 1 If (i >= 22) Then Exit For Next End With
< 使用 Excel:Excel2010、使用 OS:Windows7 >
すっきりするかどうかわかりませんが、二つの共通でない部分は A6〜のデータを、B5から 3列分書き出し E6〜のデータを、F5から 2列分書き出し なので、2回ループさせる内 1回目は A6〜・・・・・、2回目は E6〜・・・・ にしてみたらどうですか?
部分だけですが For カウンタ = 0 To 1 列名 = Array("A", "E")(カウンタ) '1回目は 列名="A" 2回目は 列名="E" セル = Array("B5", "F5")(カウンタ) '1回目は セル="B5" 2回目は セル="F5" サイズ = Array(3, 2)(カウンタ) '1回目は サイズ=3 2回目は サイズ=2 '↓それぞれの変数を使って処理。何回目のループかによって、列・セル・サイズが変わる。 With .Range(列名 & "6", .Cells(Rows.Count, 列名).End(xlUp)) For Each w In .SpecialCells(xlCellTypeVisible) b.Sheets(h.Name).Range(セル).Offset(i).Resize(, サイズ).Value = w.Resize(, サイズ).Value i = i + 1 If (i >= 22) Then Exit For Next i = 0 End With Next こんな感じで。
実際は読みにくくなるのでどうかと思いますが。
>どうやったらよいのでしょうか? 「サブプロシージャ 引数」 等で調べてみましたか? (HANA) 2014/11/20(木) 16:36
… Call sSub(A.Sheets(S.Name), B.Sheets(H.Name), "A6", "B5", 3) Call sSub(A.Sheets(S.Name), B.Sheets(H.Name), "E6", "F5", 2) …
Sub sSub(S As Worksheet, H As Worksheet, cOrg As String, cDst As String, iCou As Long) Dim i As Long Dim W As Range
With S.Range(cOrg, S.Cells(S.Rows.Count, Left(cOrg, 1)).End(xlUp)) For Each W In .SpecialCells(xlCellTypeVisible) H.Range(cDst).Offset(i).Resize(, iCou).Value = W.Resize(, iCou).Value i = i + 1 If (i >= 22) Then Exit For Next End With End Sub (???) 2014/11/25(火) 13:20
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.