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

[[20240418195359]]

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

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

 

『印刷後別シートの指定の場所に転記』(neee)

VBA初心者のため何もわからずに投稿してます すみません😭

Excelのシート1の一部B2のセルのみと 指定行B9からN9の範囲からB17からN17までの 範囲に入力されたものを別シートにに転記する という作業をしたいと考えています。 (転記後の部分も指定の場所が希望で  B2のセルはC36、B9からN9の範囲は  別シートのD36からQ36の範囲に転記)

その後にシート1の入力した部分をリセットし、 新たにシート1で入力したもの (先ほどと同じ部分) を最初に転記された別シートの下にに蓄積して 転記したいと考えています。

独学で始めるにはかなり難しく、お力を貸して いただければすごく助かります🙇‍♀️ よろしくお願いします🥺

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


>別シートに転記する そのシート名は? マクロの記録があります。 トライしてみてください。 (?) 2024/04/18(木) 20:47:05
 Option Explicit
Sub Tenki01()
    Dim r1, ws1, ws2, lr&, v()
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")
    Set r1 = ws1.Range("B9:N17")
    lr = ws2.Cells(Rows.Count, 4).End(xlUp).Row + 1
    If lr < 36 Then lr = 36
    v = r1.Value
    With ws2
        .Cells(lr, 3) = ws1.Cells(2, 2)
        .Cells(lr, 4).Resize(UBound(v, 1), UBound(v, 2)) = v
    End With
    Erase v
End Sub
あわててかいたので、間違ってるかも。。。← 言い訳 ^^;
m(__)m
(隠居Z) 2024/04/18(木) 20:48:13

ありがとうございます🙇‍♀️ 仕事で使おうかと思っていただけに すごく助かります。

別シート(転記先)は新規って名前にしてて 元々のシートは発注にしてます。 (neee) 2024/04/18(木) 20:57:22


ちなみに 1.印刷→上記のように別シートへ転記 2.入力部分のリセット 3.新たに入力→上記転記  (1の転記下へ更にに自動蓄積) ※その際に枠線も出るようにする などもすることは可能なんでしょうか? それぞれ1.2ボタンを別にして 出来ればいいかなと思うのですが… (neee) 2024/04/18(木) 21:04:06
おはようございますぅ。。。^^ できますけどぉ とりあえず、罫線だけでも、2.3.はついで質問です^^;教えて戴けるとうれしいです。

1.罫線は発注シートに引いて有るのでしょうかそれとも新規シートで引くのでせうかね 2.発注シート転記対象範囲の数式の有無ですが、もし有れば値変換でいいですか。 3.発注シート転記対象範囲の最初の行の「項目名でしょうか、」転記時の扱いは?

1.について、前者なら配列止めて、コピペにすればOK、後者なら罫線引くだけなので。

あとは。。。印刷なら印刷、更新は、更新、ボタン配置ならボタン等々、お困りの箇所を個別に 各シートの詳細情報と共に、ご相談賜れば、何かお手伝いくらいは出来るかもしれません。 たのご回答者様のアドバイスもお待ちくださいませ。でわ m(__)m

(隠居Z) 2024/04/19(金) 09:11:00


昨日いただいた数式を入れたら、プロシージャ内では 無効ですってエラーが出ます。 以前の補足にはなるのですが… 転記したいのは発注シートのB9.D9.J9.M9.S9.V9の部分を 新規別シートのD36.E36.G36.H36.I36.J36に転記 したいと考えてます。 (B9がD36のように前から転記したい部分は順に並べてます) またその列が複数になるのでB16.D16の列まで必要です。 新規別シートに転記データは残したまま、発注シートを リセットして新たに発注シートに入力したものを 以前の転記データの下に蓄積されていくといいなと 思うのですが…

お手数をおかけしますが教えて欲しいです🙇‍♀️ (neee) 2024/04/19(金) 10:31:40


こんにちは エラーになるのですか^^; しかし、そのぉエラーの内容は。。。(*^^*)

丸ごと、標準モジュールにコピペしていたけてますぅ ご確認をm(__)m (隠居Z) 2024/04/19(金) 13:49:31


やっぱりそれでもエラーになってしまいます😭 補足説明のものに変更になったら 教えていただいた数式は変更になるのでしょうか? (neee) 2024/04/19(金) 15:07:29
はい。もちろん変更しなければいけないのですが 当初のエラーメッセージの内容は、それ以前の問題でして

sub

 ここにコード

end sub

が 正常ですが

コード

sub

end sub の様な感じでプロシジャーの外に処理内容が記述されている場合に発生いたします。 エラーの内容が変化したのでしたら 黄色く反転したコードをこちらにコピペしていただけますか。 m(__)m (隠居Z) 2024/04/19(金) 15:27:59


こんにちわ〜。。。^^ コード動くようになりましたですか。。。(*^^*) 補足のご説明では当初より大分内容が変更になったのでせうかね。。。私なりに 解釈したものを作ってみました。何かの足しにでもなれば幸甚です。

(隠居Z) 2024/04/19(金) 09:11:00に対するお返事も戴いておりませんので わたしはここまでとさせていただきます。引き続き他の回答者様のアドバイス をお待ちくださいませ。でわ、頑張ってくださいね。 m(__)m

 Option Explicit
Sub Tenki02()
    Dim i&, r1, r, wS1, wS2, lR&, rNtx
    Set wS1 = Worksheets("発注")
    Set wS2 = Worksheets("新規")
    Set r1 = wS1.Range("B2,B9,D9,J9,M9,S9,V9")
    rNtx = Split("C,D,E,G,H,I,J", ",")
    lR = wS2.Cells(Rows.Count, 4).End(xlUp).Row + 1
    If lR < 36 Then lR = 36
    With wS2
        For Each r In r1
            r.Copy .Range(rNtx(i) & lR)
            i = i + 1
        Next
    End With
    Erase rNtx
End Sub
(隠居Z) 2024/04/20(土) 10:18:04

仕事に今日きて試してみたら一部転記はうまくいきました! ありがとうございます😊 ただ転記されるのが1行のみで、他の行が転記出来ないです😭 まだ追加の式がいるのでしょうか?? (neee) 2024/04/22(月) 15:38:54
 横入失礼。
 ・また新たに"発注"シートのB2,B9,D9,J9,M9,S9,V9セルに入力して、
 ・もういちどマクロを実行すれば、
 ・"新規"シートの次の行に転記される、
 ということになっていると思いますけど、
 そういうことではなかったんですか?

 そういう話でなかったのなら、改めて説明されたらいかがですか? 
 そうすればコメントがあるかもしれません。

(xyz) 2024/04/22(月) 17:10:36


転記したいのは発注シートの B9〜16.D9〜16.J9〜16.M9〜16.S9〜16.V9〜16 の部分を新規別シートのD36.E36.G36.H36.I36.J36に 転記したいと考えてます。 (B9がD36のように前から転記したい部分は順に並べてます) またその列が複数になるのでB16.D16の列まで 同じ条件の転記が必要です。 その後新規別シートに転記データは残したまま、 発注シートをリセットして新たに発注シートに 入力したものを以前の転記データの下に蓄積されていく といいなと思うのですが… お手数をおかけしますが教えて欲しいです🙇‍♀️

(neee) 2024/04/22(月) 19:16:09


追加コメントがありましたので、一部話が前後しますが、そのまま。

私も横からですが何点か。

■1 >ただ転記されるのが1行のみで、他の行が転記出来ないです セルの表現が独特なのでボタンの掛け違いがおこっているように思います。

 シート1のB2のセル    → 別シートのC36
 シート1のB9からN9セル  → 別シートのD36からQ36

多分↑のように受け取られているけど実際には↓じゃないですか?

 発注シートのB2のセル    → 新規シートのC36
 発注シートのB9からN17セル → 新規シートのD36からQ44
                   ~~                              ~~

■2 上記が正しいとするとデータは最大で9行あるわけですが、例えば「B9:N12」(つまり4行分)しかデータがないものを転記した場合、【次のデータ】はどこに転記するのですか?

あくまで9行1セットにするならば、45行目以降に出力すればよいですが、そうでない場合は40行目以降にしないとダメですよね? すなわち、貼付(転記)先が変わりますから、その点ははっきりさせるべきでしょう。

■3 >VBA初心者のため何もわからず〜 ↑とのことですが、仰ることをまとめると↓のようになるとおもいます。

 1.  発注シートをプリントアウトする
 2. 貼り付けるべき(新規シートの)行を特定する
 3.  発注シートのB2のセルをコピーして(新規シートに)貼り付ける
 4.  発注シートのB9からN17セルをコピーして(新規シートに)貼り付ける
 5.  (新規シートの)罫線を設定する
 6. 発注シートの特定セルをクリアする

このうち、2以外は【マクロの記録】で必要な命令を調べることができます。 まずは、そちらから手を付けてみては如何でしょうか?

(もこな2 ) 2024/04/22(月) 19:21:34


 | 転記したいのは発注シートのB9.D9.J9.M9.S9.V9の部分を
 | 新規別シートのD36.E36.G36.H36.I36.J36に転記
 | したいと考えてます。
 | (B9がD36のように前から転記したい部分は順に並べてます)
 | またその列が複数になるのでB16.D16の列まで必要です。

 この表現で、
 | B9〜16.D9〜16.J9〜16.M9〜16.S9〜16.V9〜16
 | の部分を新規別シートのD36.E36.G36.H36.I36.J36に
 | 転記したいと考えてます。
 のようには読み取れませんよ。

 | (B9がD36のように前から転記したい部分は順に並べてます)
 は
 | (転記したい部分を、左から右の順に並べて書いています)
 と言う意味ですね。

 | またその列が複数になるのでB16.D16の列まで必要です。
 日本語として間違っていますよね。
 複数の"行"ですよね。
 「B16.D16の列まで」 というのも意味不明です。
 列ですか? なぜBとDだけが出てくるんでしょうか。

 ■
 結局のところ、転記範囲は次のようになるんですね?
     発注シート      新規シート
     B2        →      C36
     B9:B16    →      D36:D43
     D9:D16    →      E36:E43
     J9:J16    →      G36:G43
     M9:M16    →      H36:H43
     S9:S16    →      I36:I43
     V9:V16    →      J36:J43
 2回目は
     発注シート      新規シート
     B2        →      C44
     B9:B16    →      D44:D51
     以下同じ
 ということなんですね?
 次は44行目と、一行の空白行もなく続けるんですね?

 コード作成で留意するのは、転記先の行を求めるところです。
 36とか44のところです。

 C列ではなく、D列の最終行を求めて、その次の行が書き込み先の開始位置です。
 つまり、
 ws2.Cells(Rows.Count, "D").End(xlUp).Row + 1
 のように求めます。
 初回だけは36にする必要があるので、
 求めた行と36のいずれか大きい方とするとよいでしょう。

 あとは、For.. Nextなどの繰り返し処理が不明なら、
 7つの転記作業をそのまま書いたらいいでしょう。
 7行のコードで書けるんですから、それでよいのではないですか?
 頑張ってトライしてみて下さい。

(xyz) 2024/04/23(火) 07:19:04


トピ主からの反応がないですが追加で。

■4 コピーする範囲が「B9からN17セル」なのか「9〜16行目のB,D,J,M,S,V列」なのかわかりませんが、ざっくり整理すると↓みたいな感じになるんじゃないですかね?

    Sub 研究用()
        Dim 出力行 As Long, tmp As Long

        Worksheets("発注").[プリントアウトする命令]

        出力行 = 36
        With Worksheets("新規")
            On Error Resume Next
            出力行 = WorksheetFunction.Max(36, .Range("C:E,G:J").Find(What:="*", LookIn:=xlValues, LookAt:=xlPart, SearchDirection:=xlPrevious).Row + 1)
            On Error GoTo 0

            .Cells(出力行, "C").Value = Worksheets("発注").Range("B2").Value

            '▼▼適宜修正してください▼▼
            Worksheets("発注").Range("B9:B16,D9:D16").[コピーする命令]
            .Cells(出力行, "D").[値貼り付けする命令]

            Worksheets("発注").Range("J9:J16,M9:M16,S9:S16,V9:V16").[コピーする命令]
            .Cells(出力行, "G").[値貼り付けする命令]
            '▲▲適宜修正してください▲▲

            On Error Resume Next
            tmp = .Range("C:E,G:J").Find(What:="*", LookIn:=xlValues, LookAt:=xlPart, SearchDirection:=xlPrevious).Row
            On Error Resume Next

            If tmp >= 36 Then
                Union(.Cells(出力行, "C"), Intersect(.Rows(出力行 & ":" & tmp), .Range("D:E,G:J"))).[罫線を設定する命令]
            End If
        End With

        Worksheets("発注").Range("B9:B16,D9:D16,J9:J16,M9:M16,S9:S16,V9:V16").[値をクリアする命令]
    End Sub

 ※既に述べたように[]の部分は、【マクロの記録】で必要な命令が調べられます。

(もこな2 ) 2024/04/23(火) 15:32:46


説明わかりにくくてすみません😭 まとめてみたのですが、これで伝わりますでしょうか?

例としては 1.シート1のB2のセル → 新規シートのC36 2.シート1のB9からN9セル →新規シートのD36からQ36

2.に関してはB9〜N9のセル→新規シートD36〜Q36の行は 下に7行続くようになるので (B9のセルを含んで最大8行まで) 最終はB16〜N16→新規シートK36〜Q36 の行へ転記したいと考えています。

ただし入力部分は毎回全ての行入力しない場合が あるのでB9からB16の列からN9からN16の列の 入力された範囲のもののみを転記という形になるか と思うのですが…

またその転記した範囲を一度全てリセットし、 (このリセットはマクロの記録で製作済として) 先ほどと同じような転記を繰り返し行いたいのですが その際には前回転記したデータは残しておきたいです。

1.に関してはリセットして新たに入力する際に 新規シートに転記が出来るようにしたいのですが、 蓄積されてるデータの数によってCの列の何行目に あたるかは変わります。   リセット後に先ほど指定した範囲のセルのところに 新たに入力されたデータを別シート指定部分に転記 (条件は先ほどと同じ)・し、以前に蓄積された データの下に新たに入力したものがさらに転記 されていくような仕組みが知りたいと思っています。

この作業をボタンを作って転記というのを押せば出来るように なりたいです。

難しいと思いますがよろしくお願いします🙇 (neee) 2024/04/23(火) 21:20:54


余計なお世話かもしれませんが、絵文字は避けたほうがいいとおもます。 (見る環境によっては文字化けする可能性があると思うので)

それはそれとして、今更ながらトピ主が"質問"したいのはどんなことなのでしょうか? もし、"質問"ではなく"作成依頼"をしたいということならば、あらかじめ明言しておいたほうが良いかもしれません。

以下は質問だと捉えてのコメントになりますので、そうでない場合は無視してください。

■5 >1.シート1のB2のセル → 新規シートのC36

 既に提示済です。

■6 >2.に関してはB9〜N9のセル→新規シートD36〜Q36の行は >下に7行続くようになるので >(B9のセルを含んで最大8行まで) >最終はB16〜N16→新規シートK36〜Q36 >の行へ転記したいと考えています。

 ↑の説明が理解できません。
 たとえば↓のようにシートの情報はともかく、セルの関係性を8行分全部書けませんか?
    B9〜N9    →  D36〜P36
    B10〜N10  →  E36〜Q36
    B11〜N11  →  F36〜R36
    B12〜N12  →  G36〜S36
    B13〜N13  →  H36〜T36
    B14〜N14  →  I36〜U36
    B15〜N15  →  J36〜V36
    B16〜N16  →  K36〜W36 

 ※↑は8行分、最後がK36という情報から無理やり考えたものです。
   本当にこれだったらどんどん上書きしていっちゃうので、正しいものに直して提示してください。

■7 >1.に関してはリセットして新たに入力する際に >新規シートに転記が出来るようにしたいのですが、 >蓄積されてるデータの数によってCの列の何行目に >あたるかは変わります。

 あくまで、C列は独立していて書き込む行は、ほか(D列以降)の列と
 ずれても構わないという話の場合であっても、xyzさんが示された方法でも、
 私が示した方法でも対応でも対応可能です。研究してみてください。

>リセット後に先ほど指定した範囲のセルのところに >新たに入力されたデータを別シート指定部分に転記 >(条件は先ほどと同じ)・し、以前に蓄積された >データの下に新たに入力したものがさらに転記 >されていくような仕組みが知りたいと思っています。

 上記と被りますが、C列とD列以降の最終行はそれぞれ独立しているという場合でも
 既に提示した方法で対応可能です。研究してみてください。

■8 >ただし入力部分は毎回全ての行入力しない場合が >あるのでB9からB16の列からN9からN16の列の >入力された範囲のもののみを転記という形になるか >と思うのですが…

 「■7」にも関連しますが、空っぽのセルを転記(コピー)しちゃうと問題があるのですか?
 提示した方法を応用して最終行を求めれば、仰ることは可能です。
 ただ、空っぽのセルを転記(コピー)したところで、後の作業に影響がでないと思いますので
 気にせずコピーするというアプローチのほうが簡単であるように思います。

(もこな2) 2024/04/24(水) 07:29:58


色々教えていただいてありがとうございました! 内容整理して教えて頂いたのを引用したら出来ました! ありがとうございます♪ (neee) 2024/04/24(水) 20:10:18
突然出来たというのが釈然としませんが、解決して何よりです。 ただ、結局何が正解だったのか、もやもやするので、完成品を提示してもらえませんか?

(もこな2) 2024/04/25(木) 06:37:37


上司の方が再質アップされてるようですよ。←確認はとっていませんが多分^^; 完成品、私も見たいです。(*^^*)v m(__)m (隠居Z) 2024/04/25(木) 07:50:07



[ 一覧(最新更新順) |

]

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

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