[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シートの入力と蓄積の自動記録』(みんみん)
入力フォームを作り、入力ボタンを押すと別シートのリストに蓄積されて入力フォームが初期化され、印刷ボタンを押すと別シートの様式が印刷される、というのを作成しています。
印刷はマクロの自動記録で出来たのですが、リストへの入力がうまくいきません。
ご指導のほどよろしくお願いします。
シートの内容はこんな感じです。
【入力フォーム】
A B C D E F G
取扱店 受領者 受付日 受付者
林工務店 林 盛蔵 H25.5.22 みんみん
可燃ゴミ 総額 50,000円
■大 購入枚数 500枚
□中 購入枚数
□小 購入枚数
不燃ゴミ
■大 購入枚数 500枚
□中 購入枚数 入 力
□小 購入枚数 印 刷
資源ゴミ
■大 購入枚数 500枚
□中 購入枚数
□小 購入枚数
生ゴミ
■中 購入枚数 50枚
□小 購入枚数
□粗大ゴミ購入枚数
【リスト】
A B C D E F G H I J
a@受付日 受付者 取扱店 受領者 可燃ゴミ 不燃ゴミ 資源ごみ 生ゴミ 粗大ゴミ
大中小 大中小 大中小 中小
1 H25.5.22 みんみん 林工務店 林 盛蔵 500 500 500 50
とりあえず、作ったコードを、そのままアップしてみてはいかが?
(ぶらっと)
これです。
これでは入力フォームのチェックも外れないし、同じところに反映されるだけで蓄積されないんです。
Sub 入力()
'
' 入力 Macro
' マクロ記録日 : 2013/5/22 ユーザー名 : minmin
'
'
Range("C2:D2").Select Selection.Copy Sheets("リスト").Select Range("B5:C5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("入力").Select Range("A2:B2").Select Application.CutCopyMode = False Selection.Copy Sheets("リスト").Select Range("D5:E5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("入力").Select Range("C7").Select Application.CutCopyMode = False Selection.Copy Sheets("リスト").Select Range("F5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("入力").Select Range("C8").Select Application.CutCopyMode = False Selection.Copy Sheets("リスト").Select Range("G5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("入力").Select Range("C9").Select Application.CutCopyMode = False Selection.Copy Sheets("リスト").Select Range("H5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("入力").Select Range("C11").Select Application.CutCopyMode = False Selection.Copy Sheets("リスト").Select Range("I5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("入力").Select Range("C12").Select Application.CutCopyMode = False Selection.Copy Sheets("リスト").Select Range("J5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("入力").Select Range("C13").Select Application.CutCopyMode = False Selection.Copy Sheets("リスト").Select Range("K5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("入力").Select Range("C15").Select Application.CutCopyMode = False Selection.Copy Sheets("リスト").Select Range("L5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("入力").Select Range("C16").Select Application.CutCopyMode = False Selection.Copy Sheets("リスト").Select Range("M5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("入力").Select Range("C17").Select Application.CutCopyMode = False Selection.Copy Sheets("リスト").Select Range("N5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("入力").Select Range("C19").Select Application.CutCopyMode = False Selection.Copy Sheets("リスト").Select Range("O5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("入力").Select Range("C20").Select Application.CutCopyMode = False Selection.Copy Sheets("リスト").Select Range("P5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("入力").Select Range("C22").Select Application.CutCopyMode = False Selection.Copy Sheets("リスト").Select Range("Q5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("入力").Select Range("C7:C22").Select Application.CutCopyMode = False Selection.ClearContents Range("A2:B2,D2").Select Range("D2").Activate Selection.ClearContents End Sub
(みんみん)
(みんみん)
Sheets("リスト").Select Range("F5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False こうなっていたら、Sheets("リスト")のRange("F5").Selectにしか値貼り付けできませんものね。 F列最終行直下の空白行へ貼り付けなら Sheets("リスト").Cells(Rows.Count , 6).End(xlUp).Offset( 1 ,0). _ PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ただし、1セルずつ処理するとよく似たコードの繰り返しになるので、 私ならシートのあいたところに一行になるように参照して、 それをコピー、Sheets("リスト")へ貼り付け、という処理にして、一回で済ませます。 チェックボックスはリンクさせるセルを作っておいて、 そのセルの値を変更するのが最初のうちは簡単でしょうか。 ちなみに、「大中小」をSheets("リスト")に反映する部分がありませんけど、 どうするんですかね。 (みやほりん)
>同じところに反映されるだけで蓄積されないんです。 みやほりんさんのご指摘がありますが 常に5行目に貼りつけるコードになっている様なので 先に5行目を挿入しておいて(←このコードを追加) 現在の貼付作業をすると、新しいものが上に挿入されて蓄積される様になると思います。
これなら、5行目だけを相手にすれば良いので、記録も簡単に取れると思います。
表の最後に追加していきたい場合は、 シートの一番下のセルを選択 Ctrl + ↑ で入力がある最後のセルに移動して 【相対参照で記録】に切り替えて ↓ で一つ下のセルに移動 したセルに貼りつける様にすると、マクロの記録だけでも出来ると思います。
この場合、未入力のセルがあると 入力がある最後のセルと、新しいデータを書き込むセルが 不一致になりますので、もう少し対応が必要になってきますが。
私も >私ならシートのあいたところに一行になるように参照して、 ってすると思います。 コードも短くて済みますし、貼り付けるセルも一つだけ指定すれば良いですしね。
>自動記憶じゃ無理ありますか と言う事なので、「できますよ」の意図で書いています。
実際は、記録で出来た物を少しずつ変更しながら 使ってもらうと良いと思います。
(HANA)
位置関係が不明な点が多いのですが、提示されたコードを整理して見ると、Sub 入力A() の様になります。 つまり、記入位置が、常に 5 行目と指定されているので、データは追加記入されません。
リストシートの、最終行の次の行番号 n を求め、記入位置を変数で指定したものが、Sub 入力B() となります。 それをさらに少し整理して、Sub 入力C() 。 テストはしていませんので悪しからず・・・。考え方の参考にして下さい。
Sub 入力A() With Sheets("入力") Sheets("リスト").Range("B5:C5").Value = .Range("C2:D2").Value '受付日,受付者 Sheets("リスト").Range("D5:E5").Value = .Range("A2:B2").Value '取扱店,受領者 Sheets("リスト").Range("F5:H5").Value = WorksheetFunction.Transpose(.Range("C7:C9").Value) '可燃ゴミ Sheets("リスト").Range("I5:K5").Value = WorksheetFunction.Transpose(.Range("C11:C13").Value) '不燃ゴミ Sheets("リスト").Range("L5:N5").Value = WorksheetFunction.Transpose(.Range("C15:C17").Value) '資源ゴミ Sheets("リスト").Range("O5:P5").Value = WorksheetFunction.Transpose(.Range("C19:C20").Value) '生ゴミ Sheets("リスト").Range("Q5").Value = .Range("C22").Value '粗大ゴミ .Range("A2:B2,D2,C7:C22").ClearContents End With End Sub
Sub 入力B() Dim n As Long n = Sheets("リスト").Cells(Rows.Count, "b").End(xlUp).Row + 1 'B列最終行の下 If n < 5 Then n = 5 With Sheets("入力") Sheets("リスト").Range("B" & n & ":C" & n).Value = .Range("C2:D2").Value '受付日,受付者 Sheets("リスト").Range("D" & n & ":E" & n).Value = .Range("A2:B2").Value '取扱店,受領者 Sheets("リスト").Range("F" & n & ":H" & n).Value = WorksheetFunction.Transpose(.Range("C7:C9").Value) '可燃ゴミ Sheets("リスト").Range("I" & n & ":K" & n).Value = WorksheetFunction.Transpose(.Range("C11:C13").Value) '不燃ゴミ Sheets("リスト").Range("L" & n & ":N" & n).Value = WorksheetFunction.Transpose(.Range("C15:C17").Value) '資源ゴミ Sheets("リスト").Range("O" & n & ":P" & n).Value = WorksheetFunction.Transpose(.Range("C19:C20").Value) '生ゴミ Sheets("リスト").Range("Q" & n).Value = .Range("C22").Value '粗大ゴミ .Range("A2:B2,D2,C7:C22").ClearContents End With End Sub
Sub 入力C() Dim n As Long n = Sheets("リスト").Cells(Rows.Count, "b").End(xlUp).Row + 1 'B列最終行の下 If n < 5 Then n = 5 With Sheets("入力") Sheets("リスト").Range("B" & n).Resize(, 2).Value = .Range("C2:D2").Value '受付日,受付者 Sheets("リスト").Range("D" & n).Resize(, 2).Value = .Range("A2:B2").Value '取扱店,受領者 Sheets("リスト").Range("F" & n).Resize(, 3).Value = WorksheetFunction.Transpose(.Range("C7:C9").Value) '可燃ゴミ Sheets("リスト").Range("I" & n).Resize(, 3).Value = WorksheetFunction.Transpose(.Range("C11:C13").Value) '不燃ゴミ Sheets("リスト").Range("L" & n).Resize(, 3).Value = WorksheetFunction.Transpose(.Range("C15:C17").Value) '資源ゴミ Sheets("リスト").Range("O" & n).Resize(, 2).Value = WorksheetFunction.Transpose(.Range("C19:C20").Value) '生ゴミ Sheets("リスト").Range("Q" & n).Value = .Range("C22").Value '粗大ゴミ .Range("A2:B2,D2,C7:C22").ClearContents End With End Sub (暇人)
あともう1つ質問なんですが、チェックボックスもリセットしたいのですが単純に下記の分を下に貼り付ければできますか?
Range("I7:I22").Select
Selection.ClearContents Range("A2").Select
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.