VBAについて、現在勉強中な為、色々調べておりますが、詳しい方がおりましたら教えてください。
在庫管理の表をエクセルでやっております。
注文が来て、品物の手配をする時に、在庫の有無を確認したいので下記のような事が出来れば
良いと思っております。
3つのシートを使っております。シート名は、”必要数””出荷数””在庫数”
シート:”在庫数”では、入荷数の合計から、マクロを使ってコピーした”出荷数”の数を
差し引くことにより、発注手配が必要な物とそうでない物がわかりやすいように作りたいと思って
おります。
今回は、注文来た数を出荷数のシートにVBAでコピーさせる方法の質問です。
シート名:”必要数” のセルC2:C:50 を、コピーして、隣のシート”出荷数”のA列の
一番上の空白に、形式を選択して貼り付け(値・行列を入れ替える)
ただし、A列には、日付が入力されてる為、参照した空白の一つ上のセルがコピー元と同じ
日付なら、貼り付けをしないでエラー表示させたい。
自動マクロでは、コピー元を選択して、ここに貼り付けみたいな事はできたのですが
3行目に貼り付けした後は、4行目に貼り付けるという自動マクロがわかりません。
ネットで調べたコードを何個もコピペしてやってみたのですが、なかなかうまく行きません。
詳しい方がおりましたら、コードを教えて頂けると助かります。
どうぞ、宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
実証出来る環境に移動出来たので、実証してみました(苦笑)
したらば、案の定コードのミスが2か所。Offset(1)が抜けていたことと
PasteSpecialはPasteとは違って、Selectionで動くこと・・・です。
ま、それを直したのがこれですが。
Sheets("必要数").activate
CHK = Range("C2").Value
Range("C2:C50").copy
Sheets("出荷数").activate
Range("A65536").End(xlUp).Offset(1).Select
IF Selection.Offset(-1).Value<>CHK Then
Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=True
Else
Msgbox "日付が重複しています"
End If
ところで、当然こいつを動かすには前提条件とコピー先シートの準備が
必要です。あまりVBAに慣れていないようなので、コードの解説をしつつ。
まずは
Sheets("必要数").activate
CHK = Range("C2").Value
これで、必要数シートのC2:C50セルの先頭データを変数として取り込みます。
変数名は仮に「CHK」としましたが、これは私の癖で「日付」とかでもいいです。
Range("C2:C50").copy
これでコピーの準備をします。
Sheets("出荷数").activate
Range("A65536").End(xlUp).Offset(1).Select
これは「件数が判らない時の最終行の求め方の定番コード」です。End(xlUp)で
[Ctrl]+[↑]と同じ動きをします。要は「一番下の行から続いている空白の、一番
上のセルに飛ぶ」という処理になります。
http://www.happy2-island.com/excelsmile/smile03/ …
次に
IF Selection.Offset(-1).Value<>CHK Then
これで、一番上の空白のもう一つ上のセル=データの入ってる最終セルを見に
行きます。これが、事前に保管しておいた変数の内容とあっているかチェックする
訳ですね。
当然このことから、コピーする先のシートには、事前に最低でもA1セルに何か
入ってないとエラーする(A1セルに飛んじゃうと、Offset(-1)に当たるセルが存在
しない)ということも判ります。
で、
Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=True
これで「行列を入れ替えて値貼り付け」というわけです。
ちなみに、これだけだと、処理は1回しか動きません。
複数回動かすには、例えばDo~Loopとかして、コピー元を順次変えていくという
ようなコードも必要ですが・・・それは大丈夫なんですよね?
この回答への補足
ご丁寧にありがとうございます。LOOPさせないといけないのは、わかっているのですが、
どこで使えばいいのかわかりません。親切丁寧に教えて頂ける方なので、ご面倒でなければ
教えていただけますでしょうか? 宜しくお願い致します。
アドバイスを頂きありがとうございます。
実際に動かしてみました。今の自分にはこれで十分だと思います。
また、わからない事がありましたら、質問させていただきたいと思いますので
その時は、宜しくお願い致します。
本当に、ありがとうございました。
No.1
- 回答日時:
チェックしてないので、そのまま動くかどうかは分かりませんが、
発想としてはこれで行ける筈です。
Sheets("必要数").activate
CHK = Range("C2").Value
Range("C2:C50").copy
Sheets("出荷数").activate
Range("A65536").End(xlUp).Select
IF Selection.Offset(-1).Value<>CHK Then
Activesheet.PasteSpecial Paste:=xlPasteValues, Transpose:=True
Else
Msgbox "日付が重複しています"
End If
要は事前に「チェックすべきセルの値を変数として受け取り、
IF文で、貼りつけるベく選択したセルの一つ上をチェックして
やる・・・って方法です。
変数でデータを受けて、後でどこかで使うという方法、
選んだセルを基準として、そこから「何個目」というセルの値を
得る方法が判れば、多分出来る話ではないかと思います。
この回答への補足
丁寧にコードを書いて頂きありがとうございます。
実際にエクセルに貼り付けてやってみましたが、うまく行きません。。
貼り付けの部分が、エラーになってしまったので、自分でやってみた
貼り付けのコード( Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=True
を書いてみて、実行すると、貼り付ける事はできたのですが
エラーメッセージもでず、貼り付けした次の行にもコピーされません。。。
Range("A65536").End(xlUp).Select
このコードが何か関係してるでしょうか・・?
お手数ですが、わかる方がおりましたら、教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) シートが違う2枚のエクセルシートにある数値を別シートにコピーしたい(VBA?) 8 2022/03/31 12:24
- Visual Basic(VBA) Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、 2 2022/09/01 23:57
- Excel(エクセル) Excelの複数ファイルの複数行を別ファイル1つのシートにVBA、マクロで集約する方法 5 2022/09/13 06:30
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- その他(Microsoft Office) エクセルマクロ オートフィルターでで選択コピー 2 2022/04/18 11:05
- Visual Basic(VBA) Excel(VBA) 特定の条件に該当する行の値、書式を同じセルにコピ&ペーストしたいです 1 2022/05/21 18:18
- Excel(エクセル) EXCEL マクロで 同じフォルダ内の複数ファイルの複数行全体を選択して1つのファイルに集約 4 2022/09/27 18:41
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/25 11:55
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
エクセルVBAのIFを使ったコピペ
Excel(エクセル)
-
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
-
-
4
【VBA】特定の条件でセルをコピー
Visual Basic(VBA)
-
5
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
6
ある条件を満たすセルに対応する行のセル内容をコピーして・・
Visual Basic(VBA)
-
7
VBAで条件が一致する行をコピーしその1つ下へ挿入
Excel(エクセル)
-
8
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
9
【VBA】2つのシートの値を比較して条件一致したら、同じ行の隣の値を別ブックへ転記したいです。 VB
Visual Basic(VBA)
-
10
エクセル 同じ値を探して隣の数値をコピーする
Excel(エクセル)
-
11
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
12
VBAを使って検索したセルをコピーして別の場所に貼り付ける。
Visual Basic(VBA)
-
13
エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?
Excel(エクセル)
-
14
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
15
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
16
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
-
17
エクセルVBA Ifでシート名が合致したら別ファイルから転記する場合のElse IfとForの書き方
Visual Basic(VBA)
-
18
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
19
【VBA】指定した検索条件に一致したら別シートに転記したい
Visual Basic(VBA)
-
20
同じ作業を複数のシートに実行させるにはどうしたらいいのでしょうか
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
リース初心者です 利子率の計...
-
エクセル関数で {=TABLE(,セル...
-
60進法で複数セルの足し算、引...
-
プルダウンで選択すると隣のセ...
-
Excel2010の並べ替えで行の高さ...
-
VBA 条件が一致した場合の...
-
エクセルを使った分配比率の求...
-
エクセルで作った書類に、パン...
-
Excelハイパーリンクのアドレス...
-
エクセルで離れたセルを離れた...
-
至急! Excelで歩合計算
-
エクセルで複数の勤務時間ごと...
-
エクセルデータをワードへ反映...
-
エクセルで複雑な表の作り方
-
エクセルで有給休暇の取得日数...
-
今日の日付が第n曜日かを求める
-
エクセルで行ごとに繰り返しの...
-
エクセルの行高さが、挿入作業...
-
エクセルデータを拡大/縮小して...
-
Caps Lockキーの解除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel2010の並べ替えで行の高さ...
-
リース初心者です 利子率の計...
-
エクセルで離れたセルを離れた...
-
エクセルで複数の勤務時間ごと...
-
エクセル関数で {=TABLE(,セル...
-
プルダウンで選択すると隣のセ...
-
VBA 条件が一致した場合の...
-
エクセルで作った書類に、パン...
-
60進法で複数セルの足し算、引...
-
エクセルシートを重ねることは...
-
Excelハイパーリンクのアドレス...
-
至急! Excelで歩合計算
-
エクセルを使った分配比率の求...
-
今日の日付が第n曜日かを求める
-
Excelのオートカルクの結果をコ...
-
Excelの空白行を上に詰めるVBA...
-
エクセルデータをワードへ反映...
-
エクセルの行高さが、挿入作業...
-
Excelの基本を1週間で覚えたい
-
Excelで歩合給の計算をしたいの...
おすすめ情報