A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>ただいま、最終的に行いたい図を添付しましたので
>一度、ご確認いただけますでしょうか?
添付画像確認致しました。
画像からは列番号(記号)/行番号が読み取れないので具体的なコードは記述できません。
また、図1と図2の様式については一致している項目が「納入先」、
近そうな項目が「LOT」「lot No」、「品名」「銘柄」、「数量」「個数」、
新規の項目が「出荷日」「荷姿」「合計」など
作業的に「転記」ではなく「集計」に近いようですが。
>現在のコードをもとにして、応用し添付画像の様に
>マクロを組みたいのですが、どこを変更すれば
>実現可能でしょうか?
上記(添付画像でいう黄色背景色の部分をコピーする)目的では、
ベースとするご提示して頂いている「S_書込」プロシージャでは程遠いですね。
ご提示のコードは今回の目的で作成されたものとは全くの別物でしょうか。
詳細な仕様を元に初めから作られたほうが早い気がいたしますが。
上記理由により具体案ではありませんが・・・
今回の画像のように転々とした値を別の場所に転記する場合はコピーではなく以下のように記述します。
Worksheets("Sheet2").Range("A2") = Worksheets("Sheet1").Range("B8")
→ Sheet2のA2セルにSheet1のB8セルの値を入れる
まとまった範囲を代入する場合は配列変数に格納してから纏めて入れる方法もあります。
Dim myRange As Variant
→ 配列変数を用意
myRange = Worksheets("Sheet1").Range("G8:L8")
→ Sheet1のG8:L8セルを配列変数に格納
Worksheets("Sheet2").Range("B2:G2") = myRange
→ Sheet2のB2:G2セルに配列変数を格納
セルアドレスの指定方法について、以下のコードはどれもA2セルを意味します。
Range("A2")
i=2: Range("A" & i)
Cells(2, 1)
Cells(2, "A")
Range(Cells(2, 1))
Range(Cells(2, 1).Address)
No1の回答を元に最終行値を取得し上記記述方法と組み合わせて
目的のセルを対象に上記方法で個々に項目を代入する処理を淡々と記述すればよいかと思います。
No.3
- 回答日時:
別途、セル範囲に名前の定義がされていますね。
シート様式の仕様も提示して頂いてないので、
コードより以下のように仮定致します。
(1)名前の定義において、「商品名」は"K:K"である
(2)「出荷リスト」シートの1~7行は項目行であり、
コピー対象はK~W列の入力されている行を対象とする。
(3)「台帳」シートの1行目は項目行であり、
コピー内容は値でA列の最終セルの次の行に張り付ける。
上記条件ですと、(3)により以下のコードは「+ 2」である必要があります。
セル範囲 = "A" & 行 + 1
↓
セル範囲 = "A" & 行 + 2
また、以下の処理で最終行を取得する場合はコピーされた範囲のデータは全て連続している必要があります。
行 = Worksheets("台帳").Range("A2").CurrentRegion.Rows.Count
つまり、以下のデータを台帳に転記した後、次の転記処理から正常に動作しなくなります。
K L M
08|データ データ データ
09| 空白行 ・・・
10|データ データ データ
No1で回答した内容でご提示のコードを作成し直すと以下のようになります。
(上記仮定(1)、(2)、(3)に問題が無ければ動作します)
Sub S_書込()
'見積データをコピー
Range("K8:W" & Cells(Rows.Count, "K").End(xlUp).Row).Copy
'台帳シートの最終行+1へ値として張り付け
Worksheets("台帳").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
'コピーの解除
Application.CutCopyMode = False
End Sub
この回答への補足
ご丁寧にご回答頂きましてありがとうございます。
すみません、画像がなくわかりずらくなってしまいまして…
ただいま、最終的に行いたい図を添付しましたので
一度、ご確認いただけますでしょうか?
現在のコードをもとにして、応用し添付画像の様に
マクロを組みたいのですが、どこを変更すれば
実現可能でしょうか?
お力をお貸し頂けないでしょうか?
No.2
- 回答日時:
補足にてご提示頂いたコード「書込」プロシージャでは
各プロシージャを管理しているだけのコードですので転記できていない理由が不明です。
実際に転記処理をしていると思われる
「Call S_書込」から呼び出されている「S_書込」プロシージャをご提示ください。
この回答への補足
Sub S_書込()
'表示されている見積書データを台帳に書込みます。
'入力された行数をカウント
行 = Application.WorksheetFunction.CountA(Range("商品名"))
'コピー元(入力画面)のセル範囲文字列を作成
セル範囲 = "K8:W" & 行 + 7
'見積データをコピー
Range(セル範囲).Copy
'見積データを貼り付ける行の選択
行 = Worksheets("台帳").Range("A2").CurrentRegion.Rows.Count
セル範囲 = "A" & 行 + 1
'見積データを貼り付け
Worksheets("台帳").Range(セル範囲).PasteSpecial Paste:=xlPasteValues '値
'コピーの解除
Application.CutCopyMode = False
End Sub
どういう指示がなされているのか、改めて教えて頂けたら幸いです。
No.1
- 回答日時:
現在の状態と具体的なデータの様式がご提示されていないので何とも言えませんが・・・・
1つのブックの元となるシート(1)と、転記先のシート(2)(マクロにより新規作成?)で構成されているわけですよね?
溜まるという事はシートを次々作成(名前を重複しないように)するわけではなく、一つのシート(2)に下記がしていくという事でしょうか。
転記するデータの様式(1行なのか範囲なのか、指定セルなのか不明)が分からないため詳細は記述できません。
また、ご質問者様がVBAでどの程度まで作成できるのかが分かりませんがアドバイス程度でお答えします。
(1)シートを元として、出荷指示を入力までは手作業による入力で、
マクロの動作としては「保存ボタンを押して別のシートへ自動転記」とします。
■シートを手軽に使用できるようにする(シートオブジェクト変数にシートを代入)
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Worksheets("(1)シート")
Set ws2 = Worksheets("(2)シート")
このようにすることで、以降「Worksheets("(1)シート").処理」と記述するとこを、「ws1.処理」として利用できます。
■新規出力シートの作成
VBAでシートを作成できますが、新規シートを作成するのか、作成したシートへ追加するのか判定する処理が必要なため、手軽に作成するには予め「(2)シート」を作成したうえで、上記のようにws2で作成シートを対象シートとして指定したほうが簡単です。
■データのコピー(転記)
特定の範囲を特定セルへコピーする方法場合は以下のようになります。
ws1.Range("1:1").Copy ws2.Range("1:1")
→ ws1のセル範囲「1:1」をws2のセル範囲「1:1」にコピーする
1行をコピーするだけならRangeでセル範囲を指定せずにRowsで行を指定することも出来ます。
ws1.Rows(1).Copy ws2.Rows(1)
→ ws1の1行目をws2の1行目にコピーする
■現在のデータの最終行を取得
出力先のシート(2)にデータを蓄積するには、出力するたびに行番号を1ずつカウントしていく変数を用いるか、
現在入力されている行の最終行を取得して、その次の行に出力するなどの工夫が必要になります。
Dim a As Long
a = ws2.Cells(Rows.Count, "A").End(xlUp).Row
→ ws2のA列の最終行番号を変数aに格納します
(ws2のcell(最終行番号,A列)から「Ctrl+↑」をしたときのセルの行番号を取得)
■サンプルコード
これらの処理を踏まえて
Sheet1の1行目にあるデータを、Sheet2の最終行にコピーしていくマクロは以下のようになります。
(最終行を取得するため、元のデータはA列に何かしらデータが入っている必要があります)
マクロ「sample」が実行されるたびに、最終行へコピーされます。
(ご質問者様のデータで動作するという意味ではありません)
Sub sample()
'変数を用意
Dim ws1 As Worksheet, ws2 As Worksheet
Dim a As Long
'シート名を格納
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
'ws2の最終行番号を格納
a = ws2.Cells(Rows.Count, "A").End(xlUp).Row
'ws1の1行目をws2の最終行にコピー
ws1.Rows(1).Copy ws2.Rows(a + 1)
End Sub
■マクロの自動記録
VBAによるプログラミングを行う際に非常に役に立ちますので、マクロの自動記録を使用て行いたい作業を記録してみてください。
コードを改変(変数の利用や、部分的な処理を流用など)することで目的とした処理内容を手軽に作ることができるかもしれません。
■初心者向けエクセルVBA講座
以下のようなVBA関連サイトでセル・シートの扱い方や、コピーに関して記述されている箇所を中心に探されてみてはどうでしょうか。
Excel VBA 入門講座
ttp://excelvba.pc-users.net/
Office TANAKA
ttp://officetanaka.net/excel/index.htm
ExcelVBA.net
ttp://www.excel-vba.net/
よねさんのWordとExcelの小部屋
ttp://www.eurus.dti.ne.jp/~yoneyama/Excel/Exl-_zen.htm
Excel VBA(エクセルマクロ)のTipsとサンプル - エクセルスマイル
http://www.happy2-island.com/excelsmile/
この回答への補足
今、『出荷リスト』というシートにある『書込』と言うボタンをおすと別シートの「台帳」シート表に横並びに自動転記されるようにコード入力中なのですが、以下ご参照ください。
しかし、転記されません。
Sub 書込()
'入力項目のチェック
If Range("見積No.").Value = "" Or Range("作成日").Value = "" Or _
Range("LOT").Value = "" Or Range("H20").Value = "" Then
MsgBox "未入力項目があります", vbExclamation, "入力エラー"
Exit Sub
End If
Application.ScreenUpdating = False
'処理区分により、台帳への書込操作を選別
Select Case Range("処理区分").Value
Case "新規"
Call S_書込
MsgBox "台帳へ書込みました。", vbOKOnly, SoftName
Case "修正"
Call S_書込
Call S_削除
Call S_並替
MsgBox "台帳へ書込みました。", vbOKOnly, SoftName
Case "削除"
Call S_削除
MsgBox "台帳から削除しました。", vbOKOnly, SoftName
Case "照会"
Exit Sub
End Select
Call S_クリア
'ワークシート(メニュー)を有効にする
Worksheets("メニュー").Activate
Application.ScreenUpdating = True
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VBA別シートの最終行の次行へ転記したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELのSheet番号って変更でき...
-
マクロの「SaveAs」でエラーが...
-
マクロ実行後に別シートの残像...
-
FindNextがうまくいかない
-
Excel VBA オートフィルターで...
-
VBA 実行時エラー1004 rangeメ...
-
グラフマクロで系列を変数にす...
-
Excel VBAで、散布図のデータ範...
-
複数シートの複数列に入力され...
-
VBA 空白行に転記する
-
100万件越えCSVから条件を満た...
-
Unionでの他のシートの参照につ...
-
VBAのソースコードを教えて下さ...
-
ExcelのVBマクロを、バックグラ...
-
VBA webクエリをループさせる...
-
VBA 別ブックからの転記の高速...
-
Changeイベントで複数セルへの...
-
Excel2013で切り取り禁止
-
VBAマクロ実行時エラーの修正に...
-
B列の最終行までA列をオート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
EXCELのSheet番号って変更でき...
-
VBA 空白行に転記する
-
マクロ実行後に別シートの残像...
-
VBAで変数の数/変数名を動的に...
-
VBA別シートの最終行の次行へ転...
-
Changeイベントで複数セルへの...
-
アクセスからエクセルへ出力時...
-
VBA 別ブックからの転記の高速...
-
Count Ifのセルの範囲指定に変...
-
【VBA】特定の条件でセルをコピー
-
VBA 実行時エラー1004 rangeメ...
-
ExcelのVBマクロを、バックグラ...
-
100万件越えCSVから条件を満た...
-
複数シートの複数列に入力され...
-
楽天RSSからエクセルVBAを使用...
-
Excel2013で切り取り禁止
-
Excel VBA オートフィルターで...
-
Unionでの他のシートの参照につ...
-
VBAを使って複数のシートから抽...
おすすめ情報