ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Excel VBA 製作所コミュの横にデータを入力していく方法について

  • mixiチェック
  • このエントリーをはてなブックマークに追加
自分で試してみたり、本でサンプルを探したり、ネットで探してみたのですが、
調べ方が悪いのかどうしても見つからなかったのでご質問です。

入力フォームから縦にデータを蓄積する方法として、
With Cells(Rows.Count, 1).End(xlUp).Offset(1)
.Value = TextBox1.Text
.Offset(0, 1).Value = TextBox2.Text
.Offset(0, 2).Value = TextBox3.Text
基本的にこのコードを使っています。

横にデータを蓄積していく場合、End(xlUp)の部分を
End(xlToRight)かEnd(xlToLeft)に変更すればいいものだと
思い込んでいましたが、この変更だけではエラーが出てしまいます。

やりたいことは、

(日付)  1 2 3・・・・31(合計)   
(商品名)          
 りんご  2   1       30
 みかん  1 2         20
 バナナ  3   2       10 
 合 計  6 2 3       60

こんな感じで縦にその日売れた個数を入力していきます。
売れなかった場合は「0」を入力ではなく空白セルとなります。

さらに問題があり、最後の列にも合計があるため、
この合計をスルーして入力ができるようにしなければなりません。
実際のデータは売上個数表ではなく、
最後の合計列の前に小計列がありますので2列分スルーしなければなりません。

もしよろしければ教えてください。
よろしくお願いしますm(__)m
エクセル2003を使っています。


コメント(13)

Cells(Rows.Count, 1).End(xlUp).Offset(1)
はA列最下行のセルからコントロール+↑キーで飛んだ先の一つ下のセルって事。
右に飛ぼうと左に飛ぼうと一つ下はないです。最下行ゆうてるねんから。

31日しかないと分かってるんやからIF判定の方が堅実ちゃうかな?
勿論左でも行けますよ。前述の通りにコントロールと方向キーなんだからマクロ記録して修正すればいいんです。
具体的な話し抜けてました。
右端のセルからコントロール+←を三回押すんですが、よくみるとデータには空白の可能性あるんじゃないですか?
使えない気がするな。
>よこまや様
今回もさっそくのお答えありがとうございますm(__)m

マクロの記録で試してみたのですが、
よくわからなくなってしまいました。

例えばなのですが、
3行目の一番右端からコントロール←で飛んだセルの一つ右の列の縦に
データを入れていく事は可能ですか?
それができるのなら日付を先に入力しなければ
できそうな気がするのですけど。。。
やっぱり無理でしょうか?
>よこまや様

Range("IV3").Select
Selection.End(xlToLeft).Select
Selection.End(xlToLeft).Select
Selection.End(xlToLeft).Select

これで試してみようと思っているのですが、
ひとつ右に移動のコードがわかりません。

マクロの記録で→を最後に押すと
Range("B3").Select
という感じになり特定のセル位置指定になってしまいます。
移動先の隣りのセルという指定方法はないでしょうか?

色々と質問して申し訳ないのですが、
もうひとつお願いします。

縦にデータ入力の場合、
With Cells(Rows.Count, 1).End(xlUp).Offset(1)
.Value = TextBox1.Text
.Offset(0, 1).Value = TextBox2.Text
.Offset(0, 2).Value = TextBox3.Text
となるので、今回のコードは↓のようになるのかなと思っていましたが、
With Selection.End(xlToLeft).Select
.Value = TextBox1.Text
.Offset(1, 0).Value = TextBox2.Text
.Offset(2, 0).Value = TextBox3.Text

「.Value = TextBox1.Text」
この部分でエラーが出てしまいます。
根本的にやり方が違うのでしょうか?
携帯からなので手抜きしすぎました。

まず少しおうかがいします。

○年中無休ですか?つまり日付が飛ぶ可能性はないのでしょうか?

○根本的な話しですがフォームを使う意図は何でしょうか?貴方や或いはそれなりにExcelが使える方ならこのケースは労力に見合う成果が期待しにくい気がするんですが。
勿論プログラミングの訓練とかでしたら否定致しませんが。

○日付を入力させる意図ですよね。でしたら空白に日付も入れていけばという貴方のプランにはリスクを感じます。
例えば同じデータを誤って打ち込んだらどうします?
逆に一日飛ばして次の費のデータを入れてしまったり。

ご質問を読まずにアップしてました。
携帯は打つのも時間がかかるもので・・・。すびばせん。
今はPCからです。

>マクロの記録で→を最後に押すと
>Range("B3").Select
でしたね。これは失礼。

ただ改めて書くと最初の構文は
Cells(Rows.Count, 1)        .End(xlUp).       Offset(1)
A列最下行のセル、  からコントロール+↑キーで飛んだ先の  。一つ下の

て構文でして
Offset(0,1)
と変えればひとつ右のとなります。
OFFSETは本来 Offset(y、x)という形でいくつ縦横にずらせたセルを
参照するかということです。
詳細はヘルプの
Offset プロパティ (Range オブジェクト)
を参照してください。

一つ一つの構文の意味が理解できないと
ご自分で作ることはほぼ無理に近いです。
一気には理解できなくても、そう心がけて進めないと
ゴールは見えてきません。

With Selection.End(xlToLeft).Select
SelectはメソッドなのでWithを使っても
後ろに構文を続けることはできません。

オブジェクト、メソッド、プロパティをまず理解しましょう。
ヘルプとにらめっこしながら、使用例などをアレンジして
期待する変化が起こるか確かめるなどを、百種類ぐらい
試せば自ずとのみこめてくると思います。

Selectはマクロの記録では多用されますがそれは手で操作するから
選択しないと何も出来ないのですが、マクロでは90%以上のことは
Select省略で実現できます。

>よこまや様
毎回的確なご指摘ありがとうございますm(__)m
今までは初心者向け本の例題のコードをコピーしたり、
マクロの記録を使ったりしていただけなので、
意味もわからないままなんとなくで作ってきました。
もちろん、できる限り調べたりしていたのですけど。
これは言い訳ですね。
でも、少しずつでも理解したいという気持ちはあります。

フォームを使う意図ですが、1日分と1月分の表があります。
例えば26日分のデータを入力するとしたら、
同じデータを1日分用と1月分用に入力しなければなりません。
当然、1日分と1月分の書式は全然違います。
データ入力も多いので、できるだけ手間とミスをなくすために、
フォームに1回入力しただけで両方にデータ入力をしたいなと思ったのです。

確かに労力に見合うかと言われればその通りなのですが、
自分が使うわけではなく、PCがあまり得意ではない人が使うので、
何とかならないかなと思った次第です。

自分の理解できる範囲で表を変えればいいのですが、
もうすでにデータもかなりあるため、
今後の集計などを考えると書式を変えたくないなと思いました。

色々とありがとうございましたm(__)m
今後のためにもヘルプや本をよく読んで色々と試してみます^^
二カ所の入力が一度で済む、勿論それは十二分に正当かつ合理的な理由ですよ。開発コストは一年あればかなり回収出来そうじゃないですか。


ただ、僕なら片方に入力したものを転記するマクロにすると思います。

転記した日付の列にマークをつけてマークのない列に入力があれば転記みたいな形で。

僕がフォームでなくシートへの直接入力にこだわるのは、単なるパンチャーに入力させるなら別ですが、仕事の一環として入力する方なら普段の数値と、入力中の数値はどう違うか普段通りなのか、見比べながらやって欲しいからです。

その事は単なる入力に留まらず必ずその方のスキルアップに繋がると同時に入力ミス、入力元データの記入ミス等の検出チャンスも産みます。
以上はあくまでも僕の考え方だけで状況により適用出来ないケースも多々あるかとは思いますが。

話しを戻してフォームを使う場合、記入列の決定には、シートの上で日付を探して、そこの列を書き換える仕様が妥当ではないかと考えます。
その仕様はデータ修正モードを作成する時にもそのまま流用する事が期待出来ると思うので。

きつい事も書きましたが開発へのご健闘をお祈りしますと共に、引き続いてのご質問をお待ちしております。
>よこまや様
アドバイスありがとうございますm(__)m

>単なる入力に留まらず必ずその方のスキルアップに繋がると同時に入力ミス、
>入力元データの記入ミス等の検出チャンスも産みます。

こういうことは全く考えていなかったです。
もう少し手間以外のことなど考えて作ってみたいと思います。
また質問をする機会がありましたらアドバイスお願いします^^

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Excel VBA 製作所 更新情報

Excel VBA 製作所のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング