[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『構文のまとめ方』(まんじゅう)
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.