こんにちは。
>今回はワークシート関数を組み込んだ方が速いような気はしますが、今後のために勉強してみたいです。
ワークシートも、大きさにもよりますね。私は、マクロ専門だから、マクロで処理するというわけですが、関数が良く分かっている人は、マクロでのアイデアも同じようにできるものだと思います。
サンプルを見せていただいたけれども、合理的に数学的に作っていますね。ちょっとしたヒントさえあれば、ご自身でも可能だと思います。今回は、勉強のためのコードとして、なるべく基本に忠実に考えてみます。
私が想像していたのは、もっとややこしくなっているものだと思いました。多くの質問は、実務として、ワークシート関数では、不可能だから、マクロでお願いしますというのが多いです。
なるべく易しいコードを考えてみました。(途中で、ローカルウィンドウで値も取れます)
----------------------------------------------------
Sub TestMacro1()
Dim Sh1 As Worksheet
Dim Sh2 As Worksheet
Dim i As Long
Dim j As Long
Dim Ren As Integer
Dim Komo As String
Dim Tana As Integer
Dim Kin As Long
Dim Retu As Integer
Dim Gyo As Integer
Dim LastRow As Long
Set Sh1 = Worksheets("Sheet1")
Set Sh2 = Worksheets("Sheet2")
'最後の行
LastRow = Sh1.Cells(Rows.Count, 1).End(xlUp).Row
With Sh1
For i = 2 To LastRow
Ren = .Cells(i, 1).Value '連番
Komo = .Cells(i, 5).Value '項目
Tana = .Cells(i, 2).Value '棚 '未使用
Kin = .Cells(i, 6).Value '金額
j = .Cells(i, 4).Value '行
Gyo = (j - 1) * 3 + 1
Retu = .Cells(i, 3).Value '列
With Sh2.Range("B1") '基点(連番項目の一番上)
.Offset(Gyo, Retu).Value = Ren
.Offset(Gyo + 1, Retu).Value = Komo
.Offset(Gyo + 2, Retu).Value = Kin
End With
Next i
End With
Set Sh1 = Nothing
Set Sh2 = Nothing
End Sub
----------------------------------------------------
>棚&列&行で「132=Sheet2!E5」といった表を作り、
>参照する方法はできないかな。。。とも思ったのですが
>現実的ではないでしょうか?
この方法でも、できますが、「棚,列,行,位置」というように、コンマ切りのほうが、処理しやすいです。それより、そういう入力方法が大変ではないでしょうか?実務的には、テンキーだけで入力できれば、一番よいですよね。区切り文字で、「,」はありませんが、「/*-+.」は使えますから、それで切り分けて作れば早いと思います。「132=Sheet2!E5」 ->「1.3.2.2-5.5」
こういう約束事は、慣れれば覚えられます。
それから、このマクロ自体よりも、元の原票を作るほうが大変なような気がします。マクロで並べ替えてみて気が付いたけれども、この原票が出来上がった時点で、8割以上出来上がっているのも同じだと思います。この原票を手作業で作っているとしたら、非常に合理的に棚の整理ができているのだと思います。場所が、ぶつかることはないのでしょうか?
お礼
素晴らしいです!正に望んでいた完璧な結果です。 これを応用できるよう、自分で理解を深めていきます。 本当にありがとうございました。 >もう、惨憺たる状態からのスタートでしたね。 きっと膨大な量でしょうから、ご苦労が伺えますね。 でもそういう経験がおありだからこそのスキルなのでしょう。 私もしばらく実務でのExcelは離れ、最近また必要になって きましたが、奥が深くて面白いものですね^^ さて、ポイントを付けさせて頂かないといけないのですが、 Wendy02さんにはその後色々とレクチャーして頂いたので 良ポイントとして、次点の方に迷ってしまいます。 今回はご回答頂いた順で付けさせて頂きたいと思います。 皆さま、ありがとうございましたm(_ _)m