[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『for文の書き方について』(爪)
for文の書き方について教えてくさい。
やりたいことは、C列5行目から最終列までの値、C列6行目から最終列までの値、U列10行目〜C列10行目までの値(逆から)、D列10行目の値、C列10行目の値を別のシートに1行にして貼り付けたいと思っています。
If n > 0 Then For i = 5 To 6 For j = 3 To ws1.Cells(5, Columns.Count).End(xlToLeft).Column ws2.Cells(n, k) = ws1.Cells(i, j) k = k + 1 Next j Next i For l = 3 To 21 Step -1 ws2.Cells(n, k) = ws1.Cells(10, l) Next l ws2.Cells(n, k) = ws1.Cells(10, 4) ws2.Cells(n, k + 1) = ws1.Cells(10, 3) End If
このように書いてみて、処理結果自体は望み通りの結果を得ているのですが、for文以外にも同じような結果を得られる書き方があれば教えて頂きたいと思い投稿致しました。(貼り付けたい元の値(セル)が今後増えていくため、for文がいっぱいになると分かりにくいかな・・・と)宜しければご回答をお願い致します。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
Dim m As Long Dim n As Long Dim k As Long
n = 20 m = 1
'5行目の転記 With Range("C5") With Application.Range(.Cells, .End(xlToLeft)) k = .Count Cells(n, m).Resize(, k).Value = .Value m = m + k End With End With
'6行目の転記 With Range("C6") With Application.Range(.Cells, .End(xlToLeft)) k = .Count Cells(n, m).Resize(, k).Value = .Value m = m + k End With End With
'10行目の転記 With Range("C10") With Application.Range(.Cells, .End(xlToLeft)) For k = .Count To 3 Step -1 m = m + 1 Cells(n, m).Value = .Cells(k).Value Next End With End With End Sub
ぁあ、自作の関数を作れば、もう少しスッキリしますかね。。。
(まっつわん) 2018/03/15(木) 12:51
>xlToLeft
xlToRight
の間違いでした^^;;;
(まっつわん) 2018/03/15(木) 13:15
逆順はどうしてもループ使っちゃいますねぇ・・・
Sub arr()
Dim arr1(19) Dim c5 As Long, c6 As Long, i As Long
c5 = Range("C5").End(xlToRight) 'C5から右に何個あるか c6 = Range("C6").End(xlToRight) 'C6から右に何個あるか
For i = 3 To 21
arr1(21 - i) = Cells(10, i) 'Range("C10:U10")までを逆順で格納
Next i
With Worksheets("別のシート") .Range("A1", .Cells(1, c5 + 1)).Value = Range("C5", Cells(5, c5 + 3)).Value .Range(.Cells(1, c5 + 2), .Cells(1, c5 + c6 + 1)).Value = Range("C6", Cells(6, c6 + 3)).Value .Range(.Cells(1, c5 + c6 + 2), .Cells(1, c5 + c6 + 19 + 1)) = arr1 .Cells(1, c5 + c6 + 19 + 1 + 1) = Range("D10") .Cells(1, c5 + c6 + 19 + 1 + 1 + 1) = Range("C10") End With
End Sub
まっつわんさん 10行目転記の「m = m + 1」はnextの前でよいのでは?試したら一列空いちゃいましたけど・・・
(774) 2018/03/15(木) 14:59
>まっつわんさん >10行目転記の「m = m + 1」はnextの前でよいのでは?試したら一列空いちゃいましたけど・・・ なるほど。。。 そうですね。ありがとうございます。^^ 試してないのバレバレですね^^;
(まっつわん) 2018/03/15(木) 17:36
Dim rngResult As Range
With Sheets(1) SetAdd .Range("C5"), rngResult, True SetAdd .Range("C6"), rngResult, True SetAdd .Range("U10"), rngResult, False End With End Sub
Private Sub SetAdd(ByVal rngFrom As Range, _
ByRef rngTo As Range, _ ByVal flg As Boolean) Dim c As Range Dim i As Long, j As Long
If rngTo Is Nothing Then Set rngTo = Sheets(2).Range("A1") i = 0 Else i = rngTo.Count End If
If flg Then Set rngFrom = Application.Range(rngFrom, rngFrom.End(xlToRight)) For Each c In rngFrom i = i + 1 rngTo(1, i).Value = c.Value Next Else Set rngFrom = Application.Range(rngFrom, rngFrom.End(xlToLeft)) For j = rngFrom.Count To 3 Step -1 i = i + 1 rngTo(1, i).Value = c.Value Next End If Set rngTo = rngTo.Resize(, i) End Sub
こんな感じでサブルーチンを作って再利用すると追加があっても、
対応がしやすいかなぁ。。。。。。。
(まっつわん) 2018/03/15(木) 18:05
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.