アプリ版:「スタンプのみでお礼する」機能のリリースについて

独学でエクセルの勉強しています。
B2からB6に担当者別の当日売上げが入力されています。
これをコピーし当日の日付の欄(ここでは3/5)に売上げを貼り付けたいのですが、
どのようなプログラムを組めば良いでしょうか?
諸先輩方のアドバイスお願い致します。

「コピーしたセルを当日セルの一行下へ貼り付」の質問画像

A 回答 (4件)

>ただ入力欄の罫線および日付は元々入力されており、売上げ件数のみが空白となっています。


c = Range("A2").End(xlToRight).Column + 1
2行目(A2セル)から右へ移動する方法もありますね。
>ボタンクリックした日を検索して
検索するにはFindコマンドを使います。
c = Rows("1:1").Find(Date).Column
1行目を検索して 今日の日付(date)を検索して合致した列番号という使い方です。
1行目の日付は 表示形式が日付である必要があります。(文字列ではダメ)
>売上げ件数のデータのみを貼り付けたいのですが
2行目以降ということですので Rangeコマンドで指定します
担当者の名前が100行目まであるとして
Range(Cells(2, c), Cells(100, c)).Value = Range("B2:B100").Value
言った記述になります。
Sub Test()
c = Rows("1:1").Find(Date).Column
Range(Cells(2, c), Cells(100, c)).Value = Range("B2:B100").Value
End Sub
となりますが
良く考えてみたら
Sub Test()
c = Rows("1:1").Find(Date).Column
Columns(c).Value = Columns("B:B").Value
Cells(1, c).Value = Date
End Sub
でも結果同じですし、担当者数がどれだけ増えても大丈夫ということになりますね。
また最初の様に日付もボタンを押した日にちが勝手に入ってくれるほうが日付を準備する
手間が要らないということになりますよ。
それと担当者が最大何名なのかわかりませんが
横方向に 担当者 縦方向に 日付と通常致します。
理由は データが横方向には256列(254日分)という制限があるからです。
一つのファイルを準備したら何年分もデータが蓄積されるようにします。
過去にさかのぼってデータを分析したり、グラフ化することが出来るからです。
もし月ごとに別ファイルやシートを作成したりすると 
月単位の売り上げのグラフができないですよね。
エクセルには 縦横入れ替えて貼り付ける機能もありますので
間に合うのであればシートのレイアウトも一度検討してください。
その際は VBAのコードで Column と Row の使い方が変わります。
この使い方も勉強してみてください。
    • good
    • 1
この回答へのお礼

思っていた通りの処理ができました。
初心者にもわかりやすい解説ありがとうございました。
まだ今回のプログラムの半分も理解できていないですが、これから学んでみます。
今後ともよろしくお願いします。

お礼日時:2011/03/06 21:06

エクセルでのプログラムについて興味をお持ちの様なので説明しておきます。


先の回答で経験されました様にエクセルには VBAとという機能がついていて
VBエディターを起動して
Sub から始まり 
End Sub までの間の行にコードを記述すれば上から順に実行されていきます。
http://excelvba.pc-users.net/index.html
等に勉強のサイトがありますので一通り目を通されることをお勧めします。
さて本題です。
先ほど作成されたボタンのコードを
Sub test01()
MsgBox Range("A1").End(xlToRight).Column + 1
MsgBox ActiveSheet.UsedRange.Columns.Count + 1
End Sub
にして実行してみてください。
Range("A1").End(xlToRight).Column の意味は
A1セルから右へ移動して最初の空白セルの列番号
ActiveSheet.UsedRange.Columns.Count の意味は
このシートの使っているセルの列の数
他にも方法はあります。
さてB列の値を 最後の列の隣に入れてみます。
Sub test01()
c = Range("A1").End(xlToRight).Column + 1
Columns(c).Value = Columns("B:B").Value
End Sub

Columns(c).Value = Columns("B:B").Value の意味は
先のコードで得られた最後の列の列番号 cの列に B列の値を入れる
ということです。

このままでは1行目が 本日の売り上げ となっていますので
Sub ボタン3_Click()
c = Range("A1").End(xlToRight).Column + 1
Columns(c).Value = Columns("B:B").Value
Cells(1, c).Value = Date
End Sub
と1行加えて 今日の日付を入れてみました。
Range Cellsの使い方はエクセルVBAの基本です。
先に紹介したサイトにありますのでじっくりと勉強してみてください。
    • good
    • 0
この回答へのお礼

詳細な説明、またサイト紹介ありがとうございます。
ご教授頂いたプログラム実施したところボタンクリックすることでコピーし貼り付けることはできました。
ただ入力欄の罫線および日付は元々入力されており、売上げ件数のみが空白となっています。
この空白の部分にボタンクリックした日を検索して売上げ件数のデータのみを貼り付けたいのですが・・。
紹介頂いたサイトでも勉強してみます。

お礼日時:2011/03/06 17:17

プログラムとは関係ありませんが、


「本日の売上」の列に数字を入力する手間と「3/5」の列に数字を入力する手間は一緒ではないでしょうか。
(本日の売上という以上、毎日その列は更新されるのでしょうから…)
ウィンドウ枠の固定を使い、その日に入力すべき列を表示しておけばいいだけの気もします。

コピーをする場合は
1.「本日の売上」の列に記入されているセルを選択しコピーすべき情報を取得する
2.今日の日付を取得する
3.1を元に2行目を検索する
4.貼りつけする
という流れになると思います。
フォームにボタンを作りそのボタンをクリックすると上記マクロが実行される、
という形式になると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
説明不足で申し訳ありません。
本日の売上げについては他のシートとリンクしており日々自動で更新されます。
それをフォームボタンクリックすることでクリックした日付のセル欄に自動で貼り付けされるようにしたいのです。
1~4の具体的なプログラムご教授願えますでしょうか?

お礼日時:2011/03/06 09:08

エクセルの勉強でたいせつなことは、したいことの特徴を認識し、文章で明確にそれを表現できることにある。

決してメソッドなどの勉強だけでない。
本件はそれがはっきり表現できてない。
ーー
言ってみれば
いつも当日データをB列に入力します。そのデータを使用者の指示で前日データがセットされた列の直ぐ右隣列にセットしたいと言うことではないか。
ーー
ここには2つ問題があって、
当日データ列のデータ入力を完了したことを知らせる仕掛けが必要。(B列で各行のデータを入れたときにそのセルだけ移す仕掛けもあるが、それもイベントを使う)
これはコマンドボタンのクリックイベントなどを使う。
まだそこまで行くのは、質問者には早すぎると思う。
ーー
エクセルでは入力を1列で入れて、適当な列に移すと言う方式でなく、人間が3月5日の入力列はシート上でどこかを判断して、その列にデータを入れるような方式を取るのだ。表計算ソフトではそういうものだ。
アクセスなどなら1つの入力用フォームにデータを入れてテーブルの適当な個所(レコード)に追加するやり方だが。
そのことを判って無いとエクセルVBAなどが必要になって難しくなるばかりだ。
ーー
あえて、やるとすればコマンドボタンを1つシートに張り付け、クリックイベントのプロシージュアに下記と+コピペのコードを入れる。
Sub test01() '2003までの例
r = Range("IV2").End(xlToLeft).Column + 1
MsgBox r
End Sub
をやってみて。最右列がとらえられるだろう。これはVBAの定石。
第2列目で判断していることに注意。
第2列データの最も右の列+1を割り出している。そこの列にB列データを貼り付ければよい。
IV2でなくても、この列より右列にはデータを入れないと言う列を指定してよい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
何分素人なのでVBAにつてもあまり理解できておりません。
質問の主旨としましては、
B列は他のシートとリンクしており自動で本日の売上げ件数が入力されます。
それをフォームボタンなど設定しクリックすることで本日のセルの欄に自動で貼り付けできるようにしたいのです。
ご教授頂いたプログラムでは確かに一番右の列がとらえられました。
ただ休みの日は飛ばしたいのでボタンをクリックしたその日のセル欄に貼り付けすることは可能でしょうか?

お礼日時:2011/03/06 09:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!