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