エクセル の学校
8.一覧 9.HOME
1.Top 2.Last

[[20240424201036]]

[ 初めての方へ | 一覧(最新更新順) |

|
| 全文検索 | 過去ログ | エクセルの学校HOME ]

 

『繰り返しの転記作業』(上司)

仕事で使用するものでVBA作成をお願いしたいです。 あまりパソコン自体詳しくないため、文章の説明が 足らずになっていたら申し訳ありません。

  シート 1    →      新規シート
     B2           →      C36

     B9:B16           →      D36:D43
     D9:D16           →      E36:E43
     J9 :J16           →      G36:G43
     M9:M16          →      H36:H43

まずは上のように転記をしたいと思っています。

新規シートに転記したものは蓄積しておき シート1に入力したものを1度リセット

リセットした後新たにシート1に入力してシート2に 転記をするという作業を繰り返し行います。

リセット後改めて入力すると

  シート 1    →      新規シート
     B2           →      C44

     B9:B16           →      D44:D51
     D9:D16           →      E44:E51
     J9 :J16           →      G44:G51

のようにリセット後の新規シートの転記範囲は 前回の転記下に反映されるようにしたいと考えています。

ただしシート1に入力するのは毎回全てではなく 上記例のように3行の範囲で終わるような こともあれば1行のみの入力、最大8行までの 入力が想定されます。 (リセット前でも最大8行も入力がない場合あります)

シート1のB2のセルは転記先を1つのセルに固定 にしていますが、特別固定にこだわっている わけではなくB2で入力されているものは 新規シートに入力されている数のみ C44以降(リセット後の場合として) 同じ値が全て転記されても構いません。

仕事の後輩がここでトピックスにてお伺いした ようですが、私にはその文章を読んでも不明 だったので改めてになったら申し訳ありませんが どなたか教えていただけないでしょうか? よろしくお願いします。

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


シート名 発注 想像の図

     |[A]|[B]|[C]|[D]|[E]|[F]|[G]|[H]|[I]|[J]|[K]|[L]|[M]|[N]|[O]|[P]|[Q]|[R]|[S]|[T]|[U]|[V]
 [1] |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   
 [2] |   |B2 |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   
 [3] |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   
 [4] |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   
 [5] |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   
 [6] |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   
 [7] |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   
 [8] |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   
 [9] |   |B9 |C9 |D9 |E9 |F9 |G9 |H9 |I9 |J9 |K9 |L9 |M9 |N9 |O9 |P9 |Q9 |R9 |S9 |T9 |U9 |V9 
 [10]|   |B10|C10|D10|E10|F10|G10|H10|I10|J10|K10|L10|M10|N10|O10|P10|Q10|R10|S10|T10|U10|V10
 [11]|   |B11|C11|D11|E11|F11|G11|H11|I11|J11|K11|L11|M11|N11|O11|P11|Q11|R11|S11|T11|U11|V11
 [12]|   |B12|C12|D12|E12|F12|G12|H12|I12|J12|K12|L12|M12|N12|O12|P12|Q12|R12|S12|T12|U12|V12
 [13]|   |B13|C13|D13|E13|F13|G13|H13|I13|J13|K13|L13|M13|N13|O13|P13|Q13|R13|S13|T13|U13|V13
 [14]|   |B14|C14|D14|E14|F14|G14|H14|I14|J14|K14|L14|M14|N14|O14|P14|Q14|R14|S14|T14|U14|V14
 [15]|   |B15|C15|D15|E15|F15|G15|H15|I15|J15|K15|L15|M15|N15|O15|P15|Q15|R15|S15|T15|U15|V15
 [16]|   |B16|C16|D16|E16|F16|G16|H16|I16|J16|K16|L16|M16|N16|O16|P16|Q16|R16|S16|T16|U16|V16
 [17]|   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   

 Option Explicit
Sub OneInstanceMain()
    Dim i As Long
    Dim v
    With Worksheets("発注")
    .Activate
    Set v = .Range("B2,B9:B16,D9:D16,J9:J16,M9:M16,S9:S16,V9:V16")
    v.Select
    End With
End Sub

↑ を実行して選択範囲が転記元の最大行数入力時の物と相違ないかご確認と 相違が有れば、相違点のご説明をお願いいたします。 (隠居Z) 2024/04/25(木) 00:10:43


 被りましたが...

 一部不明な点がありますが、言ってることを推測するに					
 下記のマクロで行けるかな?と思います。					
 条件としてコピー先のC列に入力が無い事が条件です。

 Sub Copy_Sample()
    Dim v(4) As Variant
    Dim i&, q&
    Dim rng As Range
    Set rng = Worksheets("Sheet2").Range("C36")
    With Worksheets("Sheet1") '元データ
        v(0) = .Range("B2")
        v(1) = .Range("B9:K16")
        v(2) = .Range("D9:D16")
        v(3) = .Range("J9:J16")
        v(4) = .Range("M9:M16")
    End With
    Application.ScreenUpdating = False
    With Worksheets("Sheet2") 'コピー先
        If rng.Value = "" Then
            q = 36
        Else
            q = .Cells(.Rows.Count, 3).End(xlUp).Row + 8
        End If
        .Cells(q, 3) = v(0)
        .Range(.Cells(q, 4), .Cells(q + 7, 4)) = v(1)
        .Range(.Cells(q, 5), .Cells(q + 7, 5)) = v(2)
        .Range(.Cells(q, 7), .Cells(q + 7, 7)) = v(3)
        .Range(.Cells(q, 8), .Cells(q + 7, 8)) = v(4)
    End With
    Application.ScreenUpdating = True
 End Sub

 ※シート名は、変更してお試しを
 全然違っていたら...すません^^;
(あみな) 2024/04/25(木) 00:14:31

>VBA作成をお願いしたいです。 ということなので、アドバイスを求めてるものではないと思いますが何点か。

■1 "部下"の方が投稿されたのは、[[20240418195359]]ですね。 そちらを再読されることを強くお勧めしますが、基本的に空っぽのセルを転記(コピー)したところでは実害は大きくないです。 ただ、↓が問題になりますね。

 >シート1のB2のセルは転記先を1つのセルに固定
 >にしていますが、特別固定にこだわっている
 >わけではなくB2で入力されているものは
 >新規シートに入力されている数のみ
 >C44以降(リセット後の場合として)
 >同じ値が全て転記されても構いません。

データ部分?の行数分増えてほしいのか、1セルだけで構わないのかはっきりさせましょう。

■2 上記が、1セルだけで構わないという話ならば↓でよいでしょう

 1. 貼り付けるべき(新規シートの)行を特定する
 2.  シート1のB2のセルをコピーして、新規シートのC列の「2.」で調べた行に貼付する
 3.  シート1の(B9:B16、D9:D16)をコピーして、新規シートのD列の「2.」で調べた行に貼付する
 4. シート1の(J9:J16、M9:M16)をコピーして、新規シートのG列の「2.」で調べた行に貼付する
 5. シート1の特定セルをクリアする

■3

 >ただしシート1に入力するのは毎回全てではなく
 >上記例のように3行の範囲で終わるような
 >こともあれば1行のみの入力、最大8行までの
 >入力が想定されます。
 >(リセット前でも最大8行も入力がない場合あります)

"部下"の方が同じ指摘をされていますが、【行】と【列】の使い方が変です。 例示の通りであれば、【8行、3列】のデータを転記したいという説明になっています。 もし、1回目が【8行】、2回目が【3行】という説明をするなら↓でしょう。

【1回目】

 B2        →   C36
 B9:B16   →   D36:D43
 D9:D16   →   E36:E43
 J9:J16   →   G36:G43
 M9:M16   →   H36:H43

【2回目】

 B2        →   C44
 B9:B11   →   D44:D46
 D9:D11   →   E44:E46
 J9:J11   →   G44:G46
 M9:M11   →   H44:H46

■4 貼り付けるべき(新規シートの)行を特定する方法としては、いくつかありますが[[20240418195359]]で提示されているように

 1.C列ではなくD列などで最終行を調べ、その次の行とする(xyzさんコメント済)
 2.Findメソッドで「D〜E、G〜H列」のセルのうち、何らかの情報があるセルを調べ、そのセルの行番号に+1する(私が提示済)

などのアプローチを採用されればよいと思います。

■5 なお、ここまで書きましたが、部下の方は解決できたようなので、直接説明を求めてはいかがですか?

 部下の方からしても、せっかく作成したのに同じものを上司の方が発注してたら気分悪いでしょうし、
 よしんば、それが気に入らないので別途作成依頼をするということであれば、現状を提示したうえで
 どういうところが気に入らないのか説明するほうがよいように思います。

 また、私見になりますがアフターケア付きの作成依頼をするなら、質問サイトで作成依頼をするんじゃなくて、
 普通の開発会社に発注すべきでしょう。

(もこな2) 2024/04/25(木) 07:31:45





[ 一覧(最新更新順) |

]

キーボードヒント:[Home]または[Fn+Home]キーで一番上へ戻ります

YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.