No.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 の使い方が変わります。
この使い方も勉強してみてください。
思っていた通りの処理ができました。
初心者にもわかりやすい解説ありがとうございました。
まだ今回のプログラムの半分も理解できていないですが、これから学んでみます。
今後ともよろしくお願いします。
No.3
- 回答日時:
エクセルでのプログラムについて興味をお持ちの様なので説明しておきます。
先の回答で経験されました様にエクセルには 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の基本です。
先に紹介したサイトにありますのでじっくりと勉強してみてください。
詳細な説明、またサイト紹介ありがとうございます。
ご教授頂いたプログラム実施したところボタンクリックすることでコピーし貼り付けることはできました。
ただ入力欄の罫線および日付は元々入力されており、売上げ件数のみが空白となっています。
この空白の部分にボタンクリックした日を検索して売上げ件数のデータのみを貼り付けたいのですが・・。
紹介頂いたサイトでも勉強してみます。
No.2
- 回答日時:
プログラムとは関係ありませんが、
「本日の売上」の列に数字を入力する手間と「3/5」の列に数字を入力する手間は一緒ではないでしょうか。
(本日の売上という以上、毎日その列は更新されるのでしょうから…)
ウィンドウ枠の固定を使い、その日に入力すべき列を表示しておけばいいだけの気もします。
コピーをする場合は
1.「本日の売上」の列に記入されているセルを選択しコピーすべき情報を取得する
2.今日の日付を取得する
3.1を元に2行目を検索する
4.貼りつけする
という流れになると思います。
フォームにボタンを作りそのボタンをクリックすると上記マクロが実行される、
という形式になると思います。
回答ありがとうございます。
説明不足で申し訳ありません。
本日の売上げについては他のシートとリンクしており日々自動で更新されます。
それをフォームボタンクリックすることでクリックした日付のセル欄に自動で貼り付けされるようにしたいのです。
1~4の具体的なプログラムご教授願えますでしょうか?
No.1
- 回答日時:
エクセルの勉強でたいせつなことは、したいことの特徴を認識し、文章で明確にそれを表現できることにある。
決してメソッドなどの勉強だけでない。本件はそれがはっきり表現できてない。
ーー
言ってみれば
いつも当日データを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でなくても、この列より右列にはデータを入れないと言う列を指定してよい。
回答ありがとうございます。
何分素人なのでVBAにつてもあまり理解できておりません。
質問の主旨としましては、
B列は他のシートとリンクしており自動で本日の売上げ件数が入力されます。
それをフォームボタンなど設定しクリックすることで本日のセルの欄に自動で貼り付けできるようにしたいのです。
ご教授頂いたプログラムでは確かに一番右の列がとらえられました。
ただ休みの日は飛ばしたいのでボタンをクリックしたその日のセル欄に貼り付けすることは可能でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAで『A列』に新規で数値を入力し『B列』から右方向の空白セルにその値を貼り付ける方法 4 2022/11/05 08:37
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Excel(エクセル) エクセルからビジオのリンク貼り付け 1 2023/03/30 17:51
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/07/05 09:30
- Excel(エクセル) ログインIDの一発入力? 5 2023/07/07 12:30
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Excel(エクセル) エクセルの祝日に色が反映しない 4 2022/05/18 09:58
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/26 09:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
【VBA】2つのシートの値を比較...
-
データグリッドビューの一番最...
-
Excelで、あるセルの値に応じて...
-
マクロ 最終列をコピーして最終...
-
DataGridViewに空白がある場合...
-
VBAで、特定の文字より後を削除...
-
rowsとcolsの意味
-
B列の最終行までA列をオート...
-
VBAを使って検索したセルをコピ...
-
VBAで、離れた複数の列に対して...
-
マクロ 関数を使った抽出でエラ...
-
IIF関数の使い方
-
VBAで重複データを確認したい
-
Changeイベントでの複数セルの...
-
VBAのFind関数で結合セルを検索...
-
エクセル アクティブセルから...
-
文字列の結合を空白行まで実行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
エクセルVBAにて =A1=B1とすれ...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
VBA UserFormからの転記で
-
targetをA列のセルに限定するに...
おすすめ情報