ログインしてさらに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
.Offset(0, 3).Value = TextBox4.Text
.Offset(0, 4).Value = TextBox5.Text
End With

このコードを使いました。

例えば5月1日に3件の入力をした場合、日付は1回しか入れません。
5月1日 名前 金額 請求日 入金日
      名前 金額 請求日 入金日
      名前 金額 請求日 入金日

こんな感じです。
上記のコードだと日付の行を基準にしている?ためうまくいきません。
名前を基準にして空白セルを見る方法はありますか?

それから、現在A列を日付にしているのですが、
B列を日付にした時はうまく行きませんでした。
B列(2列目)を起点としてデータを入力できるでしょうか?

最後にもうひとつだけお願いします。
上記のコードだと下から空白かどうかチェックしてるはずですが、
これを上(A1)から空白をチェックすることはできますか?
表の一番下に合計を入れようとしているのですが、
この合計の行があると当然の如くその下からデータ転記されます。
合計の位置を変えればいいだけの話かもしれませんが、
もし、方法があればお願いします。

長くなってしまいましたが、住所録・家計簿などのVBAを参照しても
わからなかったので質問させていただきました。

エクセル2003を使っています。
よろしくお願いしますm(__)m

コメント(6)

携帯からなので間違いあるかも知れませんが。

With Cells(Rows.Count, 1).End(xlUp).Offset(1)


日付列=1
r=Cells(Rows.Count, 日付列).End(xlUp).row
if Cells(r, 日付列+1)<>"" Then
Cells(r+1, 日付列)=Cells(r, 日付列)
r=r+1
endif
With Cells(r, 日付列+1)


に変更してはいかがでしょう?
上のマクロを少し説明します。
B列を日付にしたい場合は当然日付列を2にしないといけません。
こうした意味合いを持つ数値はプログラムの中に埋め込むと探すのが大変なのでこの様に変数にしておく事で例えばご希望のB列に変更したいという場合も代入の一カ所だけの修正ですからすぐに見つかるでしょ?
(あえてconstにまでは踏み込んでません、突っ込まないでね)

次に三件入力しても日付は一カ所のみというのは省力化の為ですよね。省力化はいいんですが、実際に後々の処理の可能性の妨げになる事が考えられるので賛同出来ません。例えばピボットやSUMIF等の集計をしたい時に全データに日付が揃ってない事は多分不便です。
そこで二件目からは日付を踏襲する様にマクロは作ってあります。
もしどうしても空白にしろと上司等がいうなら日付列を、条件書式で一件前と同じ日付の場合はフォントを白色にしてください。

最後に合計がある時に上から調べたらというのは多分貴方の思い込みです。
変わりません。どっちからにしろ、合計を判断してその上でその合計行をずらすのか、はたまた書き直すのか、まず仕様を決めないと始まりません。
やっぱ、しっかり勘違いしてました。
Offset(1)というのを使ったことがなくて省略されたのが
x方向なのにそっちにずらせて考えてました。


で、Pcで確認したバージョン。

Dim r As Integer, 日付列 As Integer


日付列 = 1
r = Cells(Rows.Count, 日付列).End(xlUp).Row + 1

With Cells(r, 日付列)
If TextBox1.Text = "" Then
.Value = Cells(r - 1, 日付列).Text
Else
.Value = TextBox1.Text
End If

.Offset(0, 1).Value = TextBox2.Text
.Offset(0, 2).Value = TextBox3.Text
.Offset(0, 3).Value = TextBox4.Text
.Offset(0, 4).Value = TextBox5.Text
End With

なお条件書式は列を選んで数式がを選択
=A1=A65536
で白色フォントにします。
>よこまや様
ご丁寧な説明ありがとうございましたm(__)m
すごくわかりやすかったです。
2列目(B列)を日付にしてもうまくできました^^
VBAはあまり得意ではないのですが、
また新しい知識を手に入れることができました。
これからも頑張りたいと思います。

集計のことなどを考えていなかったので、
条件書式の件も非常に助かりました。

本当にありがとうございましたm(__)m
いえいえどう致しまして。
合計の件は如何致しましょう。
僕のおすすめは書き直しですね。ずらせるのは少しややこしくなるから。
>よこまや様
件数次第で位置が変わる場合がありそうなのと、
手間というほどの作業ではないので、
合計は締め日に追加することにします。
ありがとうございましたm(__)m

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

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

Excel VBA 製作所 更新情報

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

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