

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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
-
【VBA】特定の条件でセルをコピー
Visual Basic(VBA)
-
-
4
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
5
ある条件を満たすセルに対応する行のセル内容をコピーして・・
Visual Basic(VBA)
-
6
VBAで条件が一致する行をコピーしその1つ下へ挿入
Excel(エクセル)
-
7
【VBA】特定の文字が入っている行の一部を抽出して別シートコピーするには
Visual Basic(VBA)
-
8
エクセルVBAのIFを使ったコピペ
Excel(エクセル)
-
9
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
10
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
11
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
12
【VBA】コピー&複数個所のペースト繰り返し
Excel(エクセル)
-
13
「選択範囲を解除してアクティブセルを選択」をマクロで行うにはどうすればよいでしょうか
Excel(エクセル)
-
14
VBAを使って検索したセルをコピーして別の場所に貼り付ける。
Visual Basic(VBA)
-
15
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
16
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
17
VBAでシートコピー後、シート名が重複している時の処理
Access(アクセス)
-
18
EXCELマクロで、シート間でのコピーペーストを繰り返す方法
Excel(エクセル)
-
19
複数のマクロボタンをまとめて一つのマクロボタンにするということ。
Excel(エクセル)
-
20
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
業務の新しい運用を考えて、上...
-
外部告発または外部通報ついて
-
異動命令
-
土日祝休み
-
社長がトイレにいく際に、隣で...
-
納品書のミス
-
取引先に挨拶訪問は、今の時代...
-
何か勉強しようと思うが
-
48歳(男)になっても “悟り” を...
-
仕事のサービスの対応範囲内と...
-
人間がパフォーマンスを出す瞬...
-
経営者がスーパーマンなのか、...
-
肉体労働者はギャラが安い?
-
皆さん、おはようございます♪ ...
-
世の中 サラリーマンが多いから...
-
今年の新入社員だけがメチャク...
-
スキマバイト、これは理不尽で...
-
営業電話に対する第一声
-
この30年間で経営者の給料ばか...
-
買い取り店が沢山できています...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
リース初心者です 利子率の計...
-
エクセルで複数の勤務時間ごと...
-
プルダウンで選択すると隣のセ...
-
Excel2010の並べ替えで行の高さ...
-
60進法で複数セルの足し算、引...
-
エクセルの行高さが、挿入作業...
-
エクセルで作った書類に、パン...
-
今日の日付が第n曜日かを求める
-
至急! Excelで歩合計算
-
エクセルシートを重ねることは...
-
エクセル関数で {=TABLE(,セル...
-
VBA 条件が一致した場合の...
-
エクセルで一番下の日付や時刻...
-
曜日別の売上平均値をだしたい...
-
エクセルデータを拡大/縮小して...
-
Excelで歩合給の計算をしたいの...
-
エクセルで離れたセルを離れた...
-
データを任意の場所【台帳】へ...
-
EXCELでR1C1参照形式の絶対参照...
-
エクセル IF文について教えて...
おすすめ情報