いつもお世話になります。
複数行のデータを他シートに複写する際、複写先の行番号を指定する方法についてご教示ください。
現在、「計算表シート」のO列のセルに「1」を入力した行のデータを1件ずつ「日誌シート」の9行目」に複写して印刷しています。
今後は「計算表シート」のO列のセルに「日誌」シートの9行目から順番に複写する行番号を1から順番に入力して対象となる行データを1枚に印刷したい思います。
具体的には、O列のセルに1と入力した行データは、「日誌シート」の9行目(8+1行)、2と入力した行データは10行目(8+2行)、3と入力した行データは11行目(8+3行)としたいのです。
ただし、O列のセルに入力した番号は上から1,2,3と連続しておらず、2,1,3,5,4 という感じでバラバラです。
If ws.Cells(i, 15).Value = 1 Then を If ws.Cells(i, 15).Value <>”” Then
.PrintOut Copies:=1 を Next i の次行に移動して Worksheets("日誌")PrintOut Copies:=1
に変更し、更に一行ずつ、iのセルに入力されている数字を8に追加して「日誌」シートの複写先の行を指定するのかと考えましたが、コードの書き方が分かりません。
Sub 日誌記入()
Dim ws As Worksheet
Set ws = Worksheets("計算表")
Dim i As Long
For i = 4 To 19
If ws.Cells(i, 15).Value = 1 Then
With Worksheets("日誌")
.Cells(9, 4).Value = ws.Cells(i, 4).Value
.Cells(9, 5).Value = ws.Cells(i, 5).Value
.Cells(9, 6).Value = ws.Cells(i, 7).Value
.Cells(9, 7).Value = ws.Cells(i, 8).Value
.Cells(9, 8).Value = ws.Cells(i, 9).Value
.Cells(9, 9).Value = ws.Cells(i, 11).Value
.Cells(9, 10).Value = ws.Cells(i, 12).Value
.PrintOut Copies:=1
End With
End If
Next i
End Sub
No.6ベストアンサー
- 回答日時:
#3,4です
表組み云々は、置いといたとして 内容を変更する場合、わかり易いように?#3をご提示のコードに沿って書くと(.PrintOut 以外#3の内容と同じです)
Sub 日誌記入()
Dim ws As Worksheet
Set ws = Worksheets("計算表")
Dim i As Long, ii As Long
With Worksheets("日誌")
For i = 4 To 19
If ws.Cells(i, 15).Value <> "" Then
ii = ws.Cells(i, 15).Value + 8
.Cells(ii, 4).Value = ws.Cells(i, 4).Value
.Cells(ii, 5).Value = ws.Cells(i, 5).Value
.Cells(ii, 6).Value = ws.Cells(i, 7).Value
.Cells(ii, 7).Value = ws.Cells(i, 8).Value
.Cells(ii, 8).Value = ws.Cells(i, 9).Value
.Cells(ii, 9).Value = ws.Cells(i, 11).Value
.Cells(ii, 10).Value = ws.Cells(i, 12).Value
End If
Next i
' .PrintOut Copies:=1
End With
End Sub
O列の数値入力を間違えたり、使う人を考えると表組み自体を作り直すか、何かキーワードで抽出するとか、フィルタをかけるとかリストボックスで選択して書き込むとか、、課題がありそうですが、中々あるものを改修するのは面倒かも知れませんね。
今回は大変ありがとうございました。
「複写先(日誌シート)の行番号の指定はどうするのか」という疑問は、
「ii = ws.Cells(i, 15).Value + 8」で定義して「Cwlls(ii,〇).Vallue」とすることで解決しました。
複写元シートの列番号(値)をArray関数で一度に格納する方法も教えていただきました。何とか、仕組は分かりました。
また、前提となる日誌シートの書式自体も見直してみました。
日誌シートの商品数を複写元の計算表シートの商品数10と同じにして、0も含めて全て複写すれば先行きのメンテ負担も軽減できます。
以下のコードで業務を試行してみます。
Sub 日誌記入4()
Dim ws As Worksheet
Set ws = Worksheets("計算表")
Dim i As Long, ii As Long
With Worksheets("日誌")
For i = 4 To 19
If ws.Cells(i, 15).Value <> "" Then
ii = ws.Cells(i, 15).Value + 8
.Cells(ii, 4).Resize(, 10).Value = ws.Cells(i, 3).Resize(, 10).Value
End If
Next i
.PrintOut Copies:=1
End With
End Sub
No.4
- 回答日時:
#3です
結果で良いのかも知れませんので
.PrintOut Copies:=1 を Next i の次行に移動して、処理の結果をプリントするのが、多分、正解かもです。。
No.3
- 回答日時:
こんばんは、
よくわかりませんが、>O列のセルに入力した番号は上から1,2,3と連続しておらず、2,1,3,5,4 という感じでバラバラです。
なので、If ws.Cells(i, 15).Value <>”” Then でバラバラを回避して
セルの値で抽出先行数を設定すると言う事でよろしいでしょうか?
そのように解釈した場合、下記の様でどうでしょう?
>.Cells(9, 4).Value = ws.Cells(i, 4).Value部分も纏めてしまったので分かり難いかも知れません。
また、定数で指定しているので、限定的になってしまいますね。
Sub 日誌記入()
Dim ws As Worksheet
Set ws = Worksheets("計算表")
Dim i As Long, j As Long
Dim ii As Long
Dim WsCol() As Variant
WsCol = Array(4, 5, 7, 8, 9, 11, 12)
For i = 4 To 19
If ws.Cells(i, 15).Value <> "" Then
ii = ws.Cells(i, 15).Value + 8
With Worksheets("日誌")
For j = 4 To 10
.Cells(ii, j).Value = ws.Cells(i, WsCol(j - 4)).Value
Next j
.PrintOut Copies:=1
End With
End If
Next i
End Sub
>.PrintOut Copies:=1 を Next i の次行に移動して
とした場合、ループ処理の最後の結果のみをプリントする事になります。
解釈が違っていて頓珍漢なら、忘れてください。
No.1
- 回答日時:
angela2000さんが書いた文章って、お洒落ですよね!!表現が洗練されていて、テンポが良いです。
でも、質問内容が頭に入ってきません。特に「If ws.Cells(i, 15).Value = 1 Then を If ws.Cells(i, 15).Value <>”” Then.PrintOut Copies:=1 を ・・・」以降が意味不明です!!
何がしたいの?
何時もおせわになり、ありがとうございます。
自分だけ分かったつもりの説明文となり、大変申し訳ありませんでした。
「複写先(日誌シート)の行番号の指定はどうするのか」という疑問は、
「ii = ws.Cells(i, 15).Value + 8」で定義して「Cwlls(ii,〇).Vallue」とすることで解決しました。
引続きスキルアップに努めて参りますので、今後ともご教示よろしくお願い申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
ExcelのVBAで数字と文字列をマ...
-
特定の文字を条件に行挿入とそ...
-
VBAでセルをクリックする回...
-
Excel vbaで特定の文字以外が入...
-
Excelのプルダウンで2列分の情...
-
エクセルVBAでコピーして順...
-
Excel VBA、 別ブックの最終行...
-
【VBA】指定したセルと同じ値で...
-
【VBA】シート上の複数のチェッ...
-
VBからEXCELのセルの値を取得す...
-
RC表示に変数を入れる
-
クリックされたセルの位置を取...
-
数字でピラミッドを出力させる...
-
Excel VBA について(列幅)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel VBA】指定行以降をクリ...
-
Excelで指定した日付から過去の...
-
【Excel】指定したセルの名前で...
-
Excel vbaで特定の文字以外が入...
-
特定の文字を条件に行挿入とそ...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
Excelのプルダウンで2列分の情...
-
EXCELで変数をペーストしたい
-
連続する複数のセル値がすべて0...
-
Excel VBA、 別ブックの最終行...
-
VBAを使用した時間管理
-
エクセルVBAでコピーして順...
-
セル色なしの行一括削除
-
【EXCEL VBA】Range("A:A").Fi...
-
VBA コピーして次の値まで貼り...
-
VBA初心者です。結合セルを保持...
おすすめ情報
皆様、説明不足の内容で申し訳ありませんでした。写真を添付しました。
写真の左側が計算表、右側が日誌のシートです。取引先別に10種類の商品のうち7種類の受払額を日誌シートに複写します。
計算表のO4:O19のセルに日誌シートの9行目からの複写順序を入力。
現在は、全て「1」を入力して日誌シートの9行目に1件毎に複写して印刷しています。
これを6件、指定した順序(4行目→10行目…)で日誌シートの9行目から14行目までに複写しますす。
以下のコメントは、私の頭の整理です、ご放念下さい。
If ws.Cells(i, 15).Value = 1 Then を If ws.Cells(i, 15).Value <>”” Then
.PrintOut Copies:=1 を Next i の次行に移動して Worksheets("日誌")PrintOut Copies:=1