
■表の値を組み合わせて新しい表を生成したい
http://bekkoame.okwave.jp/qa5876434.html
後出しで叩かれそうなおか~ん。
まぁ「叩き台」だからいいんですけどね、
「丸1日放置してた」のは忘れないでくださいね。
「初心者」で「例文」が欲しいという要望なので
本来【 わたしなんかの出る幕ではない 】んですけど
なぜかスルーされてたので【 やむをえず 】落穂として拾いました。
…いや、「なぜか」は…なんでだろ?
------------------
検閲削除
------------------
げほげほ、さて。
「初心者」で「例文」なので、
できるだけ「オーソドックス」に書いてみようと…
わたしなりに努力はしたんですが、失敗 orz
こういう場合、どういうふうに書くのが「基本」なんだろ?
ふだん「動けばいいや」って思ってるもんだから
いざ「ちゃんと」書こうとすると困っちゃうのよね(ぉ
・OffsetじゃなくてCellsを使うべきだった?
・変数に入れてても、Withで括るとやっぱ違う?
・毎回空白チェックして止めるのはこのスケールでも間抜け?
・それともやはり根本的に… orz
'=======↓ココカラ↓=======================================
Sub Sample2()
Dim orgCel As Range
Dim rtnCel As Range
Dim itmCnt(2) As Long
Dim i As Long
Dim j As Long
Dim k As Long
Set orgCel = Worksheets("Sheet1").Range("A1") '元表左上隅セル
Set rtnCel = Worksheets("Sheet2").Range("A1") '書出先左上隅セル
With orgCel
i = Rows.Count
j = .Column
k = .Row - 1
With .Parent
itmCnt(0) = .Cells(i, j).End(xlUp).Row - k
itmCnt(1) = .Cells(i, j + 1).End(xlUp).Row - k
itmCnt(2) = .Cells(i, j + 2).End(xlUp).Row - k
End With
k = 1
For i = 1 To itmCnt(0)
For j = 1 To itmCnt(1)
k = k + 1
rtnCel.Cells(k, 1).Value = .Cells(i, 1).Value
rtnCel.Cells(k, 2).Value = .Cells(j, 2).Value
Next j
Next i
For i = 1 To itmCnt(2)
rtnCel.Cells(1, i + 2).Value = .Cells(i, 3).Value
Next i
End With
End Sub
'=======↑ココマデ↑=======================================
ここまですると、かえって判りにくくなる気が…。
ちなみに
・元データは連番とは限らない
・元表/先表の位置は動くかもしれない
・元表/先表の形は動かない
・位置指定は最小限に(だからといってParent使うか?)
というのはわたし的に大前提。
…なんだけど、もしかすると
↓こういうのが「すまーと」なのかなぁと思ったりも(ぇ
'=======↓ココカラ↓=======================================
Sub Sample3()
Dim a As Worksheet, b As Worksheet
Dim c As Long, d As Long, i As Long
Set a = Worksheets(1)
Set b = Worksheets(2)
a.Range(a.Cells(1, 3), a.Cells(Rows.Count, 3).End(xlUp)).Copy
b.Cells(1, 3).PasteSpecial Transpose:=True
c = a.Cells(Rows.Count, 1).End(xlUp).Row
d = a.Cells(Rows.Count, 2).End(xlUp).Row
a.Range(a.Cells(1, 2), a.Cells(Rows.Count, 2).End(xlUp)).Copy
For i = 0 To c - 1
b.Cells(2 + i * d, 1).Resize(d, 1).Value = i
b.Paste b.Cells(2 + i * d, 2)
Next i
Application.CutCopyMode = False
End Sub
'=======↑ココマデ↑=======================================
いや、コレは【冗談】なんだけど、でもよく見かけるよね、この手の。